| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 开发测试 -> 如何做“健康码”的性能压测 -> 正文阅读 |
|
[开发测试]如何做“健康码”的性能压测 |
为什么要做压测随着无线设备的普及和 5G 的大力建设,越来越多的线上系统、小程序成为了人们生活中必不可少的工具。对于这些工具,都会面对一个问题:系统能承受多少用户同时访问,面对突发的流量洪峰,能否保证系统无故障稳定运行? 为了回答这个问题,就需要在系统上线前做多轮压力测试,提前模拟出复杂的, 高仿真的线上流量来验证整体系统的高可用性, 这也是实施系统高可用方案的关键环节。另外,通过不同阶段的压测,也完成对系统的容量规划、瓶颈探测,对系统整体能力进行验收,确保在突发的流量洪峰来临前,系统确实能够承受即将来临的真实线上压力。 从某种意义上来说,压测是系统稳定性的验证者。 如何实施一次准确的性能压测准备压测环境 压测的执行环境是一个老生常谈的话题,如果直接在生产环境执行压测,会有2个问题:
为了解决这 2 个问题,一般业内采用如下几种方案: 以上方案各有优缺点,适用场景也不尽相同,可以根据自己项目所处的阶段灵活选择方案。 构建压测脚本 业内常用的压测工具包括 JMeter、Gatling、Locust、k6、Tsung、阿里云 PTS 等。这些工具无一例外,都需要将压测业务的 API,编排为一个压测脚本。 这一步工作的重点在确认压测的 API,不要有遗漏,且 API 编排的顺序要符合用户的操作逻辑。对于健康码业务的压测来说,如果脚本中遗漏了登录鉴权 API,那后面的刷新健康码、查看核酸报告等 API 都会在权限校验这步就报错,不会执行正常的业务逻辑,也就无法模拟真实的业务场景。
为了避免复杂脚本中遗漏 API 的风险,推荐使用录制功能生成脚本。 确认压力模型 这一步是在配置压测中模拟的压力峰值、不同 API 的压力分布比例以及压力值递增模型。压力值指的是模拟并发用户数,或每秒发送的请求数。 施压模式 在设置之前,需要确认施压模式,业内主要有 2 种施压模式:
在项目验收阶段,很重要的一个指标就是系统的吞吐量,即可支持的QPS。对于这种压测场景,更推荐使用吞吐量模式,可以直观的看到施压机每秒发出的请求数,并和服务端的吞吐量直接对应起来。 各 API 压力分布比例 确认了施压模式后,需要配置不同 API 的压力分布比例。比如健康码业务,100% 的用户会调用登录 AP 和获取健康码 API,但后面并不是所有用户都会调用查询核酸报告 API、查看推送信息等 API。所以每个 API 的准确压力分布比例,也是一次成功压测中不可获取的因素。 压力值递增模型 常见有脉冲模型,阶梯递增,均匀递增。 脉冲模型会模拟流量在瞬间突然增大,常用于秒杀、抢购的业务场景。 递增模型可以模拟在一定时间段内,用户量不断增大,常用于模拟有预热的业务场景。 除了常规的递增模型,最好在压测中可以实现手动调速功能,一是可以模拟一些非常规的流量递增情况,二是可以反复调整压力值,来复现和排查问题。 施压流量地域分布 确定了压力值和递增模型后,还需要确定施压流量的地域分布,应尽量拟合真实的用户分布,才能保证测试结果真实可信。 对于区域性的在线业务,施压机分布在当地的同一机房,是可以理解的。如果是全国性的在线业务,施压机也应该按照用户分布,在全国各地域部署。 执行压测,观察压测指标 压测中核心指标:请求成功率,请求响应时间(RT),系统吞吐量(QPS) 请求成功率不止要看全局的请求成功率,还要关注一些核心API的成功率,避免整体成功率达标,核心 API 成功率不足的情况。 请求响应时间,需要关注 99、95、90、80... 等一些关键分位的指标是否符合预期,而平均响应时间没有太大的参考意义,因为压测需要保证绝大部分用户的体验,在不清楚离散程度的情况下,平均值容易造成误判。 系统吞吐量是衡量系统能承受多大访问量的指标,是压测不可缺少的标准。 上面三个指标遇到拐点时,就可以认为系统已经出现性能瓶颈,可以停止压测或调小压力值,准备分析、定位性能问题了。 除了这三个业务指标,同时还应该同时观测系统的应用监控、中间件监控和硬件监控的一些指标,包括但不限于: 服务器:
数据库:
中间件:
更多压测时需要关注的指标,见压测指标[2] 如果系统已经达到预期,往往还可以可以按照 10-20% 的比例,不断加大压力值,为系统做一次峰值“摸高”,观察系统的极限值是多少,做到心里有底。 复盘,性能优化 压测结束,如果未达到预期,可以配合监控排定位,分析性能问题,性能优化完成后,在下一轮压测中继续验证。 测试中问题分析和调优的方法这里不展开描述,可以参考这篇测试问题分析及调优[3]。 如果系统表现已经符合预期,可以用压测得到的系统吞吐量指标,配置流控、降级、系统或隔离规则,保障系统稳定性。 作者:拂衣、风云 本文为阿里云原创内容,未经允许不得转载。 |
|
开发测试 最新文章 |
pytest系列——allure之生成测试报告(Wind |
某大厂软件测试岗一面笔试题+二面问答题面试 |
iperf 学习笔记 |
关于Python中使用selenium八大定位方法 |
【软件测试】为什么提升不了?8年测试总结再 |
软件测试复习 |
PHP笔记-Smarty模板引擎的使用 |
C++Test使用入门 |
【Java】单元测试 |
Net core 3.x 获取客户端地址 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/18 2:33:08- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |