全链路压测介绍
全链路压力测试的宏观介绍
全链路压测是在模拟实际用户使用场景的基础上,通过对整个应用程序栈进行压力测试,评估系统在高负载下的表现。这包括了从用户界面、前端服务、中间件到后端数据库等所有组成部分,以全面了解整个软件系统的性能。
什么是全链路压测
全链路压测是一种系统性的性能测试方法,旨在模拟真实用户场景下的完整操作流程,全面评估软件系统在不同压力下的性能表现。这种测试方法对于保证应用程序的高可用性、稳定性和可扩展性至关重要。
基于实际的生产业务场景、系统环境,基于真实数据模拟海量的用户请求对整个业务链进行压力测试,并持续调优的过程;
压测目标
业务代码零侵入:业务域业务代码无改造,业务流程无影响。
全链路压测隔离原理
压测数据隔离
线上压测中,最复杂的问题就是压测链路中涉及到写操作,如何避免污染线上数据,并且能保证压测请求保持和线上相同的请求路径。业界有很多解决方案,常见的有影子表,影子库,以及数据偏移
MySQL、MongoDB:对于MySQL、MongoDB等数据库,采用影子表的策略。SDK会判断流量是否为测试流量,如果是,则根据配置将操作映射到影子表中。配置策略包括读写影子表和读线上表写影子表两种。
Redis:Redis Key加上 Stress 前缀。如 Stress_Tag=Valuex,那么读写 Redis 的 Key=Valuex_Key。这样可以解决多个压测任务数据冲突的问题。压测结束后,只需要对 Prefix=Valuex 做清除或过期操作即可。
MQ:对于消息队列,平台有两种策略。一是直接丢弃,然后针对消息队列的性能,单独进行压测;二是在Header 中透传压测标记,Consumer 根据压测标记和业务需求,再做特殊处理。默认走丢弃策略,业务方可根据需求进行配置。
其他存储,如ES,ClickHouse 等,都有压测集群。压测时,会将压测请求打到指定的压测集群中。
全链路大屏巡检
实现7*24小时不间断端到端的业务自动巡检,通过大屏可直观实时的查看核心链路运行状态,问题出现在哪个点上,影响的范围有多大,帮助开发和运维人员第一时间发现问题,给处理问题争取了黄金时间
全链路平台展示
性能指标
在进行全链路压测和性能测试时,需要关注多个关键性能指标(KPIs)来评估系统的性能表现,以下是一些常见的性能测试指标。
吞吐量(Throughput)
系统在单位时间内能够处理的请求数量或事务数量,通常以每秒请求数(RPS/TPS)来衡量。
资源利用率(Resource Utilization)
包括CPU使用率、内存使用、磁盘I/O、网络带宽使用等,反映系统资源是否成为瓶颈。
系统在压测期间能够持续对外提供服务的能力,通常要求达到99.9%以上。
这些指标可以根据测试目标和系统特性的不同而有所侧重,在实际的全链路压测中,需要根据具体的业务场景和性能目标选择合适的指标,并制定相应的测试计划。
流量录制工具方案对比和总结
录制工具对比总结:
我们对流量复制有了些基本的概念和应用了,也对tcpcopy 和 goreplay 两款开源工具有了一定的认知。两款开源工具各有优缺点,我们来一块总结下。
简单http 复制 goreplay 完全可以胜任,稍复杂点或应用场景更复杂,那么推荐 tcpcopy。更复杂,要求更高的流量复制,那只能开发定制了。
总结