《云上大型赛事保障白皮书》——第三章 压测调优与技术演练——3.1 云上大型赛事压测调优——3.1.4 北京冬奥压测调优总结(2)

本文涉及的产品
性能测试 PTS,5000VUM额度
网络型负载均衡 NLB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
简介: 《云上大型赛事保障白皮书》——第三章 压测调优与技术演练——3.1 云上大型赛事压测调优——3.1.4 北京冬奥压测调优总结(2)

《云上大型赛事保障白皮书》——第三章 压测调优与技术演练——3.1 云上大型赛事压测调优——3.1.4 北京冬奥压测调优总结(1): https://developer.aliyun.com/article/1226563?groupCode=supportservice



压测方案和环境部署方面,本次我们采用了自建jmeter工具进行压测,压测机部署在第三方云平台,调用各模块公网接口模拟用户请求,压测脚本、各模块测试账号由业务方提供。我们一共规划了5轮压测,每轮压测约5-8个模块不等,在每轮结束后,收集相关数据及问题现场,对出现的系统瓶颈进行分析和调整,并制定下一轮压测计划,观察优化后的性能效果。

根据各模块接口的业务占比、日活跃用户数、用户行为,我们计算出每个模块接口所需要达到的并发用户数,及对应的QPS。

各模块初始并发及加压策略如下,以其中一个模块为例。

1684917303177.png


系统调优方面,最终我们一共完成全部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计数。

image.png

图:ACK集群节点抓包显示IPVS延迟转发


image.png

图: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上的参数配置可以看到并发连接数的配置较小,调整之后即得到解决。

全部的问题列表及解决方案如下:

1684917474547.png

1684917527237.png

1684917546967.png


最终,经过全面的压测和调优,我们得以保证冬奥通APP在赛时稳定运转,为2897名运动员和8000+注册媒体人,2万名志愿者、工作人员提供了不间断的服务。



《云上大型赛事保障白皮书》——第三章 压测调优与技术演练——3.1 云上大型赛事压测调优——3.1.4 北京冬奥压测调优总结(3): https://developer.aliyun.com/article/1226531?groupCode=supportservice

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
相关文章
|
7月前
|
JavaScript 前端开发 算法
性能测试与调优
性能测试与调优
90 0
|
负载均衡 测试技术 应用服务中间件
性能测试常见瓶颈分析及调优方法总结
性能测试常见瓶颈分析及调优方法总结
365 0
|
3月前
|
缓存 Java 测试技术
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
使用JMeter对项目各个接口进行压力测试,并对前端进行动静分离优化,优化三级分类查询接口的性能
121 10
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
|
4月前
|
监控 Java 测试技术
实战派必看!Python性能测试中,JMeter与Locust如何助力性能调优
【8月更文挑战第6天】性能优化是软件开发的关键。本文介绍JMeter与Locust两款流行性能测试工具,演示如何用于Python应用的性能调优。JMeter可模拟大量用户并发访问,支持多种协议;Locust用Python编写,易于定制用户行为并模拟高并发。根据场景选择合适工具,确保应用在高负载下的稳定运行。
146 4
|
6月前
|
监控 Java 测试技术
Java性能测试与调优工具使用指南
Java性能测试与调优工具使用指南
|
6月前
|
缓存 Java 测试技术
Spring Boot中的性能测试与调优
Spring Boot中的性能测试与调优
|
存储 监控 安全
深聊性能测试,从入门到放弃之:如何对IO进行性能调优
深聊性能测试,从入门到放弃之:如何对IO进行性能调优
278 0
|
监控 测试技术 UED
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.3 平台网站业务稳定性保障——5.3.2 全链路压测与容量评估(1)
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.3 平台网站业务稳定性保障——5.3.2 全链路压测与容量评估(1)
304 0
|
域名解析 网络协议 数据可视化
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.3 平台网站业务稳定性保障——5.3.2 全链路压测与容量评估(2)
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.3 平台网站业务稳定性保障——5.3.2 全链路压测与容量评估(2)
215 0
|
SQL 监控 关系型数据库
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.3 平台网站业务稳定性保障——5.3.2 全链路压测与容量评估(3)
《云上业务稳定性保障实践白皮书》——五.行业客户稳定性保障实践——5.3 平台网站业务稳定性保障——5.3.2 全链路压测与容量评估(3)
207 0