全链路生产压测,指的是模拟真实场景、使用多样化的流量请求进行全流程、全链路压力测试。传统的性能测试,测试环境资源数量、各链路硬件资源配置、配比与生产环境存在差异,且系统性能会受其他关联方的影响,单交易压测结果无法反映系统真实性能情况。而全链路生产压测可以找到系统的瓶颈点、发现系统潜在风险;有效评估系统的实际承载能力,指导调配服务资源、调整限流策略。

打开网易新闻 查看更多图片

笔者结合自身参与的银行系统全链路生产压测实践经验,针对全链路生产压测的适用场景、风险及难点和解决方案进行了简述及分析,为全链路生产压测的解决方案提供参考。

1、全链路生产压测适用场景

全链路生产压测适用场景广泛,主要适用于以下四种场景:

1)新系统上线

相对于生产上的已有系统,新系统的承载能力往往很难预估。当一个全新的系统即将上线时,全链路生产压测可以准确探知系统承载能力,防止刚上线被用户流量冲垮,也可以探知新系统支持的最大并发流量访问,新系统的性能是否影响用户体验。

2)系统稳定性探测

对于已上线的系统,全链路生产压测可以通过模拟真实的用户流量压力,去探知系统的性能瓶颈,从而提升系统的整体服务能力和吞吐量,提升用户体验。

3)系统容量规划

当系统本身已经平稳运行很长时间,比较稳定,需进行成本优化时,全链路生产压测可以对系统进行精细化的容量规划,确保资源的高效利用,从而降低系统的运行成本。

4)热门业务上线

在秒杀、抢购等热门业务上线前进行全链路生产压测,可以通过模拟流量激增的场景,对系统的性能进行测试,发现系统的性能瓶颈并进行优化。

2、全链路生产压测的风险

尽管全链路生产压测存在诸多的优点,适用场景也较为广泛。但是,在全链路生产压测在开展过程中,仍有一些风险需要注意。首先,由于压力测试在生产环境中进行,压测过程可能影响被测系统功能正常开展,甚至有造成系统瘫痪的风险;其次,生产环境中,压测地址、产品存在泄漏的风险,一旦被正常客户发现、使用,可能造成客户投诉,引发声誉风险;再次,当测试数据流入生产环境,可能给组织业务带来风险;还有,全链路生产压测的关联方众多,如若生产压测前期没有对有关方履行充分的告知义务,有关方未做及时准备,可能使关联系统受到影响;最后,当压测执行过程中,网络流量暴增,可能会引发网络限流等措施,影响压测结果。

3、全链路生产压测难点及攻克方法

全链路生产压测的成功实施,很大困难在于压测的全链路特点,其压测脚本、流量构造以及如何与生产实际流量、服务进行隔离。

1)构造全链路生产压测脚本

与传统性能测试脚本的构造方法不同,全链路生产压测脚本的构造,需要充分考虑整个系统链路的请求。为此,实施方需充分梳理业务场景、系统架构,统计关联系统相关交易,从而梳理整个链路的请求来源。同时,要根据真实场景业务回放,获得所有API接口和请求。最后,在全链路的请求比例上,可参考以往数据,结合测试经验,按真实场景进行构造。

2)构造压测流量

对于压测流量的构造,可以从以下几个方面考虑:使用压测工具构造压测流量,流量来源为IP、运行商等多种来源,其次,压测数据应全面、真实,所以可以收集正常业务流程数据,以便模拟真实业务场景。最后,要确保压测数据可用,并且不带有生产敏感信息,因此需采用人工构造的方式,从真实数据中提取数据,并经过脱敏之后导出。

3)压测隔离

在生产环境进行压力测试,势必要考虑隔离的问题。首先,需要对压测流量进行标记,以便隔离流量;其次,一般生产压测选择深夜业务低峰时段进行,基于IP、网络、域名等隔离生产环境,以便隔离服务;再次,通过构造影子区域、影子数据库等方式,进行数据隔离;除此之外,还需对系统进行相关的压测改造,以便使不满足压测隔离的交易满足压测隔离的需求。最后,在全链路生产压测执行完毕之后,还需对压测环境、服务、数据进行清理,确保生产环境未受到生产压测的影响。

4、全链路生产压测流程规范

笔者结合自身参与的银行系统全链路生产压测实践经验,提出了以下全链路生产压测流程规范,为全链路生产压测的解决方案提供参考。

图1:全链路生产压测流程图

1)压测准备

压测开展之前,要进行充分的压测准备。首先,要确定压测范围,明确压测目标,并针对压测链路进行梳理。其次,针对生产链路压测,要对业务系统改造:例如针对压测交易设计替换页、设置白名单手机号、身份证号等。接着,要明确压测方案:制定全面的压测计划、明确压测数据构造方法、确定压测流程、编制紧急预案、梳理监控指标等。此外,在压测管理方面,需明确压测期间的组织安排及各系统联系人。最后,需进行压测验证:事先进行脚本调试及验证,确保脚本的可用性和有效性。

2)压测执行

由于压力测试执行环境为生产环境,全链路生产压测的执行比普通性能测试更为复杂。笔者参与的全链路生产压测分为四部。第一步为预热期,目的是验证压测工具到被测应用的连通性及站点和PC端的功能连通性;接着进入演练期,小并发阶梯增加压力,本阶段目的是验证请求压力按预期传导至应用,验证应用有效性,并确定每个测试场景的时间间隔。第三步开始正式压测,按照预估的TPS阶梯性增加并发,对网络连接、流量、服务器性能进行监控。根据第一次的压测结果进行相应的优化之后,进行第二次压测,以验证系统的性能是否提升,第一次生产压测发现的问题是否解决。

此外,压测执行过程中需注意的是,一旦发生紧急情况,必须马上根据事先设计好的紧急预案进行处理,以便尽快恢复生产,确保对生产系统及环境不产生影响。

打开网易新闻 查看更多图片

图2:压测执行—从预热期到二次压测

  3)压测总结

压测执行之后,要及时的对整个过程进行总结。形成详实的生产压测性能分析报告,对系统的容量进行评估。并且对整个生产压测进行复盘,并提出改进计划,因为涉及系统性能优化,全链路的生产压测往往要进行许多轮次。需考虑如何在下一次压测过程中对测试过程进行优化改进。最后,需清理压测数据,要将压测数据还原到压测之前,为下次压测作准备,还需对环境进行恢复并进行测试,以确认系统版本恢复到压测前版本。

最后邀请想提升实力的测试人一起学习

如果你的也有很多问题想要解决,你的测试职业规划也需要一点光亮,你也想跟着大家一起分享探讨,我给你推荐一个「Python自动化测试学习交流群」你缺的知识这里有,你少的技能这里有,你要的大牛也在这里……

来吧!!一起进阶自动化测试!!