性能测试能力提升最终篇-全链路压测

发布时间:2023-07-05 11:30

目录

  • 一、背景
  • 二、什么时候开始考虑做全链路压测?
  • 三、全链路压测方法
    • 3.1 梳理核心链路的流程和边界
    • 3.2 提供底层支持
    • 3.3 全链路的压测数据mock
    • 3.4 做好压测流量的降级预案
    • 3.5 梳理监控体系
    • 3.6 线下做好预演
    • 3.7 尽量模拟现实
    • 3.8 逐步平滑加压
    • 3.9 各业务线推进
  • 四、总结

一、背景

接着上一篇的知识:性能测试能力提升-JVM GC监控和优化,本篇文章,我们将主要介绍全链路压测相关的知识:

  • 什么时候开始考虑做全链路压测
  • 全链路压测方法

二、什么时候开始考虑做全链路压测?

1、业务发展速度快:单纯扩容应用的服务器可能提升不上去了,因为要受限于其他的模块,比如,DB,公共组件,中间件等。

2、链路的复杂程度在扩张:随着业务的发展,我们的接口会越来越多,业务线跟其他业务线的交互也越来越多,已无法单纯的根据自己系统的处理能力来评估接口的服务能力。

3、对单机压测结果越来越没有自信:一般而言,我们都会压一下我们自己的模块,但是身为模块的owner,自己越来越清楚,单机的压测不代表真实的场景,内心会越来越虚。

\"性能测试能力提升最终篇-全链路压测_第1张图片\"

三、全链路压测方法

3.1 梳理核心链路的流程和边界

进行全链路压测前,必须梳理核心链路的流程和边界。梳理核心链路比较快,比如:
登录》搜索》加购》结算》下单

难点在于梳理清楚链路的边界:
1、搜索要关注商品
2、加购要关注促销、优惠券
3、结算要关注时效、运费、风控
4、下单后要通知营销发券、积分
5、分支系统能不能压测:
分支业务是第三方的
分支业务不重要,可以降级
分支业务本身就不能压测
\"性能测试能力提升最终篇-全链路压测_第2张图片\"

3.2 提供底层支持

为确保全链路压测不产生脏数据,不影响正常业务,需要提供底层支持,需要重点考虑处理以下事项:

1、全链路透传压测标志

  • 必须有一种在全链路透传压测标志的能力,并且必须基于一次请求,也就是同一个traceId。
  • 需要透传的路径大概有:HTTP,RPC(DUBBO),MQ,线程池等。

2、影子表

  • 参与压测的业务,要逐个排查自己依赖的数据库,然后创建影子表,影子表必须跟正常表的结构保持一致。
  • 可以在每次压测时候手动创建,也可以推动DBA自动创建。
  • 创建好影子表后,如果当前流量是压测流量,那么写入和读取都走影子表

3、日志-影子目录

  • 为了防止压测流程的日志对正常日志造成干扰,需要改造日志组件,将压测流量产生的日志落入到影子目录。影子目录可以有日志组件自动创建。

4、MQ支持是否消费压测流量

  • 需要对MQ系统进行改造,一方面使其可以透传压测流量,另一方面,需要支持配置是否消费压测的MQ消息。

5、缓存/大数据隔离

  • 缓存层,大数据层对压测流量的处理也要考虑隔离。缓存可以使用不同的集群;大数据可以直接不收集压测的数据。

\"性能测试能力提升最终篇-全链路压测_第3张图片\"

3.3 全链路的压测数据mock

1、用户数据要提前做好认证等准备工作。

2、Mock数据要尽可能跟真实数据保持一致。

3、Mock数据有些限制需要放开, 适合压测反复使用。

4、千万不要污染正常数据:认真梳理数据处理的每一个环节,确保mock数据的处理结果不会写入到正常库里面。

\"性能测试能力提升最终篇-全链路压测_第4张图片\"

3.4 做好压测流量的降级预案

1、当业务特别的复杂的时候,要确认好,第三方依赖能不能接收压测流量。

2、只要依赖第三方的服务,我们都要接入压测流量降级的开关,防止对第三方服务的污染。

3.5 梳理监控体系

每个业务梳理自己的监控,确保压测时候能够准确,及时的发现问题:

  • 核心接口和核心依赖的流量和耗时监控
  • 中间件组件,缓存,数据库的监控报警
  • 服务器硬件的指标监控报警

3.6 线下做好预演

真实的压测之前,肯定要进行预演,主要确认:

  • 压测流程是否写入到了正确的目的地,例如,写入到影子表,影子目录,压测cache等
  • 压测流量的降级是否完备和有效
  • 进一步确保监控都已到位

3.7 尽量模拟现实

压测的方案要尽可能的模拟现实:

  • 各个业务确认,尽量跟线上真实的用户行为保持一致

3.8 逐步平滑加压

压测的时候,阶梯式平稳加压,及时监控指标,不要一开始就高并发

3.9 各业务线推进

除了要花时间梳理流程和思考如何处理数据之外,最难的就是整个链路跨多个业务,甚至部门,需要跟进每个业务线的进度,确保大家能够在给定的时间点进行联调以及进行压测。人力的组织和协调上,是一大难题,通常需要至少总监级别的人来整体规划、推动。

\"性能测试能力提升最终篇-全链路压测_第5张图片\"

四、总结

综上所述,可以看出全链路压测是一项技术含量高,人力耗时大的工程,需要各个条线的研发、测试、运维、DBA共同配合协作才能完成的事项,并且需要针对各个应用、中间层、数据库做一系列的改造。因此更适合公司业务体量已经比较大的大公司开展,由于体量大,链路影响才不那么可控,才更需要整体链路拉通整体实施压测,投入产出比也才能接受,而且也具备能真正做好全链路压测的实力。

反之,如果是体量不那么大的公司,真没必要跟风去做什么全链路压测,投入产出比太低,最后也不一定能做好。各个应用分别针对业务流量高的接口做好单接口的压测,加上同一个应用的多个接口混合压测,整体上就足以保障业务的正常性能需要,根据自身情况选择最适合自己的方式即可。

============================================================================

以上就是本次的全部内容,也是本次性能测试能力提升系列的最后一篇文章。当然,我也会陆续更新其他性能测试相关的文章,比如之前发布过的:

  • Jmeter分布式压测Linux配置及运行教程
  • prometheus+grafana搭建监控平台监控压测服务器&mysql性能
  • 性能调优必备:Arthas安装使用及常用命令教程

如果对你有帮助,欢迎关注我的微信公众号:程序员杨叔,各类文章都会第一时间在上面发布,持续分享全栈测试知识干货,你的支持就是作者更新最大的动力~
\"性能测试能力提升最终篇-全链路压测_第6张图片\"

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号