《云上大型赛事保障白皮书》——第三章 压测调优与技术演练——3.1 云上大型赛事压测调优——3.1.2 云上大型赛事压力测试方法论(上): https://developer.aliyun.com/article/1226645?groupCode=supportservice
3.1.2.3 设计压测方案
阿里云PTS产品团队总结的压测方案设计原则,要做到五个一样:一样的线上环境,一样的用户规模,一样的业务场景,一样的业务量级,一样的流量来源。
对于大型赛事而言,由于赛程是固定的,所以环境准备这部分其实比较容易解决,因为一定是要在生产环境上线之前进行压测,这时还没有真实用户,但环境已经搭建完毕,此时即为压测的最佳时段。但如果是已经线上运转的生产环境,那么设计压测方案时要做一个取舍,生产环境和测试环境的压测方案各有其优缺点:针对生产环境压测,其衡量的精准度较高,参考效果更好,但是会有一些额外的成本,首先需要对相关的测试数据进行处理,包括压测时如何插入测试数据不会影响生产,以及压测结束后脏数据的清理,同时,也要谨慎考虑压测流量对生产环境造成的影响,要尽量挑选在低峰期进行。针对单独的测试环境压测,其难点在环境的构建上,规模和生产一致的成本也是最高的,所以一般而言为等比构建(生产环境的1/2,1/4,1/8等),甚至是生产环境中部分应用独立部署测试集群,数据库共用的方式,此外测试环境需要从生产环境中导入脱敏的基础数据,例如至少是最近半年或者1年的,保持其整体的数据关联性,这个对于压测的准确度和参考性也很重要。
如何准确模拟用户规模、业务场景、业务量级、流量来源是一个比较大的课题。从工具层面来讲,一般是通过专用压测工具如jmeter或直接购买压测服务来进行模拟。使用jmeter等压测工具,需要针对业务场景有针对性的进行分布式部署,可部署在三方的专用压测机云环境,但需要自行编写压测机压测脚本,对技术水平的要求比较高,因为压测准确性很大程度上取决于脚本是否能完美模拟用户请求场景。当然也可以使用专有的云上压测服务,阿里云有一个SaaS化的性能测试分布式云化压测服务PTS(Performance Test Service),其压力发起来源是遍布全国上百个城市和各运营商的CDN节点,可分布式的模拟海量用户的真实业务场景,可以作为压测方案一个轻量快速的选项。
要写出能准确模拟真实场景的压测脚本,需要深刻的了解系统的业务模型,系统有很多业务,每种业务逻辑和业务量是不一样的,系统的基础数据、系统预热情况等代表系统的状态。链路范围、链路的访问量级、链路的参数集合、基础数据、预热情况一起构成了压测的业务模型。需要编写者非常了解在真实场景下,各个业务种类的请求模型,及对应的业务占比,以进行不同的容量整体配比,精准地将流量落地。保证压测结果可靠性的几个关键点在:业务逻辑改动要仿真业务场景,QPS配比要仿真业务场景,入参满足业务仿真的需求,影子数据满足业务仿真的需求。
同时,压测方案中要包括需要监控的指标,包括压测机资源指标、业务指标、服务端资源指标等。如果是对生产环境压测,也要设计对应的紧急问题的应急预案,如数据回滚、数据清理等。
监控指标应包含以下内容:
•客户端和服务端操作系统:CPU利用率、内存利用率、磁盘I/O、网络I/O、内核参数等。
•中间件:nginx返回码、JDBC连接池、SLB超限指标等。
•数据库:慢SQL、锁、缓存、会话、进程数等。
•应用侧:请求响应时间、请求超时率、请求成功率、QPS等。
3.1.2.4 配置压测环境
在预上线环境进行压测,需要注意的是测试数据的准备要和真实用户场景数据一致,可使用生产数据例如人员ID、生产账号账密、生产日期、生产位置等真实数据进行压测,但要注意数据清理和功能回归。
在生产环境进行压测,最核心的是线上写操作不能污染正常的业务数据。因此,需要针对存储做影子库表,即正常业务库表的镜像,让压测流量的数据流转到影子库表,正常业务流量流转到正常业务库表,在逻辑上隔离两种流量,使之互不影响。
另外一个关键点是配置完善的监控,没有完善的系统监控,将会导致性能分析无从下手。
3.1.2.5 实施压测计划
在真正实施压测时,要按照阶梯加压的原则进行,首先从小流量压力开始,按照合理阈值逐段增压,同时关注各监控指标数据,在开始性能恶化时即为系统原始性能基线数据与容量,以此为优化初值。
观察监控指标除了留意异常告警外,还应留意:
•应用侧指标是否正常,业务成功率是否满足预期,请求响应时间是否有恶化。
•中间件流量是否有毛刺和异常下跌情况,是否有超限丢包、连接池打满、返回码大量报错等现象,上下游流量是否对齐,即在相同的时间段到达流量峰值。
•客户端和服务端是否有性能超限情况,例如CPU打高、IO打满等。
•数据库是否有大量慢SQL产生,RT偏高、连接池满等现象。
•也要留意压测场景目标是否都达到,是否需要再补充压测场景。
3.1.2.6 解决压测问题
压测时一定会遇到具体的问题,这部分属于如何进行系统调优,将在下一小节讨论。
以上即为压测通用方法论,无论压测的形式如何更改,其本质皆为这六大核心要点,流程图如下。
图:压测流程图