cover_image

爱康全链路压测及流量回放探索

爱康技术团队
2024年05月11日 03:11

图片

全链路压测介绍

全链路压力测试的宏观介绍

全链路压测是在模拟实际用户使用场景的基础上,通过对整个应用程序栈进行压力测试,评估系统在高负载下的表现。这包括了从用户界面、前端服务、中间件到后端数据库等所有组成部分,以全面了解整个软件系统的性能。


什么是全链路压测

全链路压测是一种系统性的性能测试方法,旨在模拟真实用户场景下的完整操作流程,全面评估软件系统在不同压力下的性能表现。这种测试方法对于保证应用程序的高可用性、稳定性和可扩展性至关重要。


基于实际的生产业务场景、系统环境,基于真实数据模拟海量的用户请求对整个业务链进行压力测试,并持续调优的过程;


全链路的核心为:业务场景、数据链路、压力模型和环境拓扑;
全链路压测不仅仅是一种测试手段,更确切来说其是一种测试过程,该过程涉及自动化测试/性能测试/高可用测试技术以外,还覆盖性能分析调优以及扩缩容解决方案等等。
生产环境全链路压测
价值和目标

图片

压测目标

安全压测验证:
链路梳理:链路涉及应用、中间件自动发现并梳理关联关系。

数据安全隔离
全链路压测需要将压测数据进行识别并隔离,路由至影子表、影子topic、缓存redis、消息kafka、日志log4j达到验证数据安全隔离的效果。
压测过程安全保证-SLA能力验证:压测过程中设定RTTPS阀值,验证压测平台是否会自动终止或者告警。
挡板能力:对外调服务进行mock,查看压测流量是否通过这个服务外调其他系统。

产品易用性验证:

业务代码零侵入:业务域业务代码无改造,业务流程无影响。

性能问题定位验证:
压测报告及性能问题定位:验证生产环境全链路压测平台压测报告及性能瓶颈发现、定位能力。

全链路压测隔离原理

图片

压测数据隔离

线上压测中,最复杂的问题就是压测链路中涉及到写操作,如何避免污染线上数据,并且能保证压测请求保持和线上相同的请求路径。业界有很多解决方案,常见的有影子表,影子库,以及数据偏移

MySQLMongoDB:对于MySQLMongoDB等数据库,采用影子表的策略。SDK会判断流量是否为测试流量,如果是,则根据配置将操作映射到影子表中。配置策略包括读写影子表和读线上表写影子表两种。

RedisRedis Key加上 Stress 前缀。如 Stress_Tag=Valuex,那么读写 Redis 的 Key=Valuex_Key。这样可以解决多个压测任务数据冲突的问题。压测结束后,只需要对 Prefix=Valuex 做清除或过期操作即可。

MQ:对于消息队列,平台有两种策略。一是直接丢弃,然后针对消息队列的性能,单独进行压测;二是在Header 中透传压测标记,Consumer 根据压测标记和业务需求,再做特殊处理。默认走丢弃策略,业务方可根据需求进行配置。

其他存储,如ESClickHouse 等,都有压测集群。压测时,会将压测请求打到指定的压测集群中。

图片全链路压测安全保障

图片全链路大屏巡检

实现7*24小时不间断端到端的业务自动巡检,通过大屏可直观实时的查看核心链路运行状态,问题出现在哪个点上,影响的范围有多大,帮助开发和运维人员第一时间发现问题,给处理问题争取了黄金时间

图片全链路平台展示

图片

性能指标

在进行全链路压测和性能测试时,需要关注多个关键性能指标(KPIs)来评估系统的性能表现,以下是一些常见的性能测试指标。

吞吐量(Throughput

系统在单位时间内能够处理的请求数量或事务数量,通常以每秒请求数(RPS/TPS)来衡量。


响应时间(Response Time
从发送请求到接收到响应所需的时间,包括网络延迟和服务器处理时间。通常包括平均响应时间、最大响应时间、最小响应时间等。

并发用户数(Concurrent Users
系统同时处理的用户数,考查系统在高并发情况下的表现。

资源利用率(Resource Utilization

包括CPU使用率、内存使用、磁盘I/O、网络带宽使用等,反映系统资源是否成为瓶颈。


错误率(Error Rate
在压测期间系统产生错误响应,如5xx服务器错误的比例,高错误率通常表示性能问题或稳定性问题。

可用性(Availability

系统在压测期间能够持续对外提供服务的能力,通常要求达到99.9%以上。

峰值处理能力
系统在短时间内处理大量请求的能力,重要的是系统能够在峰值期间保持稳定。

这些指标可以根据测试目标和系统特性的不同而有所侧重,在实际的全链路压测中,需要根据具体的业务场景和性能目标选择合适的指标,并制定相应的测试计划。

图片

流量录制工具方案对比和总结

图片录制工具对比总结:

我们对流量复制有了些基本的概念和应用了,也对tcpcopy 和 goreplay 两款开源工具有了一定的认知。两款开源工具各有优缺点,我们来一块总结下。

tcpcopy部署架构相对复杂,goreplay 相对简单只需启动一个进程。
tcpcopy支持的协议比较丰富,goreplay 根据架构特点仅支持 http
tcpcopy和 goreplay 都支持离线和在线录制回放。
goreplay有个中间件模块,可自定义部分过滤逻辑。

简单http 复制 goreplay 完全可以胜任,稍复杂点或应用场景更复杂,那么推荐 tcpcopy。更复杂,要求更高的流量复制,那只能开发定制了。

总结

爱康全链路意义
爱康正在推进数字化变革,系统的稳定性需要有强大的保障能力,目前做了一定的性能压测和优化,但是对于系统的稳定性需要全方位保障,做到0事故,引进全链路压测,提前找到云系统复杂链路的瓶颈以及找到性能最大承载能力,为数字化变革做好数据基础建设,从而保障爱康核心业务的稳定性,为全国用户提供优质的体验服务

图片


技术实践 · 目录
上一篇如何构建可伸缩的后端系统下一篇前端工程化实践:提升团队协作与开发效率
继续滑动看下一个
爱康技术团队
向上滑动看下一个