记一次流量暴增造成的“生产事故”优化经历! (2)

平台官网、平台 APP 抢标过程中服务器压力巨大,平台 APP 问题更加突出,抢标高峰期间单台 APP 服务器 Apache 最大连接数已经接近 2600,接近 Apache 最大的处理能力。

数据库服务器压力巨大。

 

数据库压力主要在两个时期比较突出:

 

当平台做活动的时候,官网、小网页、APP 访问量巨增,导致数据查询量跟着巨增,当到达数据库处理极限时,就会表现出网站打开慢等问题。

当用户抢标的时候,用户抢标的压力又分为两个阶段:抢标前和抢标中。
抢标前,因为满标速度很快,用户提前打开抢标页面不断刷新,这样数据库的查询压力会不断增大,如果抢标的用户量非常大,会导致在抢标之前将数据库连接数用完。
抢标中,单次购买大概会涉及 15 张左右表进行更改查询,每个标的份额 1000 万大概每次会有 100-200 人左右购买完成满标,以中间值 150 人计算,在几秒的时间内需要对数据更新 2000-3000 次(仅仅是更新,不包括查询 ),产生大量并发,可能会导致更新失败或者连接超时,从而影响到用户投标和系统正常满标。

 

解决方案

 

Web 服务器解决方案

 

单个用户访问 Web 服务的示意图,如下:

 

记一次流量暴增造成的“生产事故”优化经历!

 

目前网站和平台 APP 均是采用了两台服务来做均衡负载,每台服务器中安装了 Apache 来做服务端接受处理,每台 Apache 最大可以处理大约 2000 条连接。因此理论上目前网站或者 APP 可以处理大于 4000 个用户请求。

 

如果要支持同时 10000 的请求,则需要 5 台 Apache 服务器来支持,因此目前缺少 6 台 Web 服务器。

 

升级服务器后的访问示意图,如下:

 

记一次流量暴增造成的“生产事故”优化经历!

 

数据库解决方案

 

当前数据库的部署方案,如下图:

 

记一次流量暴增造成的“生产事故”优化经历!

 

主从分离解决主库 80% 的查询压力。目前平台官网、APP 均连接 MySQL 主库导致主库压力倍增,把服务中的查询全部迁移到从数据库可以大量减轻主库的压力。

增加缓存服务器。当从库查询到达峰值的时候,也会影响主从的同步,从而影响交易,因此对用户经常使用的查询进行缓存以达到减少数据库的请求压力,需要新增三台缓存服务器搭建 Redis 集群。

 

记一次流量暴增造成的“生产事故”优化经历!

 

其他优化

 

官网首页静态化,从 cnzz 统计来分析,首页占比网站的整体访问量的 15% 左右,对于首页不经常变动的数据通过静态化来处理,提升官网打开的流畅度。

Apache 服务器的优化,开启 gzip 压缩,配置合理的链接数等。

去掉投资过程中的更新热点:标的进度表。每次投标成功或者失败都需要对标的进度表进行更新,多线程更新的时候就会出现乐观锁等问题。
去掉过程中的更新,只在满标后将标的进度信息保存在标的进度表,优化投资过程中对数据库的压力。

 

服务器升级方案

 

平台最大的压力来自于数据库,需要将现在的一主一从,改为一主四从。官网/APP/小网页产生的大量查询,由虚 IP 分发到三台从库,后台管理查询走另外的一个从库。

 

数据库需要新增三台服务器,数据库升级后的示意图如下:

 

记一次流量暴增造成的“生产事故”优化经历!

 

通过增加缓存可以减少数据库的压力,除了需要新增两台大内存的缓存服务器,还需要新增三台 Web 服务器分解用户访问请求。

 

记一次流量暴增造成的“生产事故”优化经历!

 

APP 需要新增两台服务器

 

在抢标过程中 APP 服务器压力最大,需要新增两台服务器,配置完成后的示意图如下:

 

记一次流量暴增造成的“生产事故”优化经历!

 

官网需要新增一台服务器

 

官网在抢标过程也有一定的压力,需要新增一条服务器,完成后示意图如下:

 

记一次流量暴增造成的“生产事故”优化经历!

 

总合计之后需要购置 8 台服务器,其中有两台要求有大内存(64 G以上),所有优化方案投产后,问题解决,抢标无忧!

 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wssjxx.html