《云上大型赛事保障白皮书》——第三章 压测调优与技术演练——3.1 云上大型赛事压测调优——3.1.4 北京冬奥压测调优总结(1): https://developer.aliyun.com/article/1226563?groupCode=supportservice
压测方案和环境部署方面,本次我们采用了自建jmeter工具进行压测,压测机部署在第三方云平台,调用各模块公网接口模拟用户请求,压测脚本、各模块测试账号由业务方提供。我们一共规划了5轮压测,每轮压测约5-8个模块不等,在每轮结束后,收集相关数据及问题现场,对出现的系统瓶颈进行分析和调整,并制定下一轮压测计划,观察优化后的性能效果。
根据各模块接口的业务占比、日活跃用户数、用户行为,我们计算出每个模块接口所需要达到的并发用户数,及对应的QPS。
各模块初始并发及加压策略如下,以其中一个模块为例。
系统调优方面,最终我们一共完成全部16个模块x个接口的单接口压测及一次混合场景的全链路压测,整个过程一共发现问题18个,包括应用侧自身问题3个和系统架构调优问题15个,除此之外,我们也发现并执行了一共35条针对RDS的优化动作。最终效果冬奥通APP各模块的并发量提升了2倍-5倍,有力的保证了赛时该系统的稳定性。以下是一些具有明显改善效果的问题记录:
第一轮压测开始时,大部分模块在加压到x并发时即发生了成功率恶化,提示系统瓶颈的存在。我们通过全链路资源监控指标的梳理,发现了三处瓶颈:一处为多个模块的前端SLB的EIP公网入口流量超限丢包,该问题通过使用大带宽的共享带宽替换各个SLB的单EIP解决。一处为路由模块压测x并发时,因为该模块业务模型的原因QPS比较高,导致了前端SLB发生QPS超限返回了大量503异常码,该问题通过SLB升配方式解决。一处为多个模块ACK集群服务中承载SLB流量的ingress1pod资源使用率过高,造成多个模块偶发发生请求timeout,为此扩容了DMZ区和Trust区承载SLB流量的ingress1pod数量,该问题得到解决。在这些比较明显的瓶颈点解决之后,结合RDS层面的SQL优化建议,我们在随后的压测可以看到大部分模块已经可以达到压测目标。
之后我们解决了一个非常具有参考意义的疑难问题:在调优和SLB升配之后,此时已不再存在简单的超限或超时问题,但路由模块和配置中心模块在x并发时仍可以观察到大量的5021Bad1Gateway报错,但节点监控没有明显异常。考虑到这两个模块的业务模型,同并发场景下比其他模块的QPS都要高,我们怀疑在ACK集群节点转发组件上产生了瓶颈。我们在复现问题时在节点上进行了抓包,通过抓包可以看到由SLB发来的TCP1SYN建连报文有一定概率被延迟转发或者丢包,同时conntrack -s检查conntrack状态表显示大量 insert_failed和drop计数。
图:ACK集群节点抓包显示IPVS延迟转发
图:ACK集群节点抓包显示IPVS丢包
考虑到ACK集群nodeport的用法实质上起的是一个NAT的功能,节点在处理每一个TCP流的NAT转换时都需要插入conntrack表项。根据压测高峰期时的QPS计算,按TCP连接TIME_WAIT状态默认120秒的回收速度,节点上的conntrack表项会不够空间插入。因此我们缩小了节点上IPVS1Conntrack表内核参数中针对TIME_WAIT状态的保留时间,由默认120秒改为了15秒,以快速回收,具体命令如下:
a.操作sysctl-wnet.netfifilter.nf_conntrack_tcp_timeout_time_wait=15
b.回滚sysctl-wnet.netfifilter.nf_conntrack_tcp_timeout_time_wait=120
在做了这一调整之后,再次压测路由模块和配置中心模块时,果然502问题不再发生。之后,这个内核参数优化动作,我们也应用到了DMZ和Trust集群的所有节点上。
另外一个问题是在压测埋点模块时,初始并发就达到了1.54%的503超限错误码。埋点模块的链路比较简单,前端SLB直接挂了一个运行nginx的ECS。我们通过检查SLB日志可以看到是由nginx返回的503,检查nginx上的参数配置可以看到并发连接数的配置较小,调整之后即得到解决。
全部的问题列表及解决方案如下:
最终,经过全面的压测和调优,我们得以保证冬奥通APP在赛时稳定运转,为2897名运动员和8000+注册媒体人,2万名志愿者、工作人员提供了不间断的服务。
《云上大型赛事保障白皮书》——第三章 压测调优与技术演练——3.1 云上大型赛事压测调优——3.1.4 北京冬奥压测调优总结(3): https://developer.aliyun.com/article/1226531?groupCode=supportservice