目前已知的全链路压测平台
1.那么什么是全链路压力测试:基于真实的用户场景,实际的线上环境,按照既定流量,对各个业务链路进行压力测试的过程。
全业务、全链路。这导致了必须线上搞压测,必须用线上的真实数据搞压测。(一个URL就是一个链路)
2.为什么要做全链路压力测试?
通常情况下项目上线前我们会对单一接口进行压测,此时我们可以获得单一接口性能的极限QPS数据,不过线上流量成分相当复杂,单一接口的性能数据并不能体现线上服务的真实情况。因此,我们还需要进行场景化的多接口性能压测。公司并不可能按照线上环境架构与性能要求1比1的搭建一套离线环境,因此生产环境的全链路压测就成为很多公司的必然选择。
~解决全链路压测难点的方案:
业务场景流程图梳理,理清各个子系统的瓶颈。
数据隔离,线上环境构建影子库。根据业务场景构建虚拟业务。
压测数据要考虑业务实际特点,尽可能贴合实际情况。
结合业务场景,微调请求量,不能压挂线上业务
找高level的上级推动进展。
压测平台,虚拟数据构建规范,压测工具选型
~全链路压测意义目的:公司业务发展,难有一个量化的数据衡量核心链路的真实峰值。有助于提升核心业务的稳定性。
找出整个链路的瓶颈,优化少量的瓶颈部分提升整体性能,以期用最少的资源达到最佳效果。
~全链路压测系统的基本产品需求,需要给用户提供一个 Web 控制台,并提供压测所需的压力机器,支持在线编写测试脚本,同时根据用户的设置对被测服务进行压力测试,最后可以展示压测的指标数据。
~四大核心要素:压力测试环境、压力测试数据、压力测试场景和压力测试流量。
其中,压测环境具备处理用户请求数据及流量隔离等的条件,从而不影响用户的良好体验。压测环境包括张流量、服务器、应用、中间件及存储过滤器和缓存过滤器。
压测数据包括压力测试的用户、企业商品等基础先验数据。压测场景可以被看成一个模型,主要指压力测试具备的业务场景、各个业务场景下压多大量。
压测流量的输出主要取决于压力测试的请求协议。http服务的访问日志收集,RPC线上流量实时录制。
~1、业务模型梳理
首先应该明确的是:全链路压测针对的是现代越来越复杂的业务场景和全链路的系统依赖。
2、数据模型构建,数据构建和准备,应该考虑这三点问题:
①、数据的真实性和可用性
可以从生产环境完全移植一份当量的数据包,作为压测的基础数据,然后基于基础数据,通过分析历史数据增长趋势,预估当前可能的数据量;
②、数据脱敏
基于生产环境的全链路压测,必须考虑的一点是不能产生脏数据,以免对生产造成影响,影响用户体验等,因此在数据准备时需要进行数据脱敏;
③、数据隔离
同样,为了避免造成脏数据写入,可以考虑通过压测数据隔离处理,落入影子库,mock对象等手段,来防止数据污染
~全链路压测应对的都是海量的用户请求冲击,可以使用分布式压测的手段来进行用户请求模拟,目前有很多的开源工具可以提供分布式压测的方式,比如jmeter、Ngrinder、locust等。
可以基于这些压测工具进行二次开发,由Contorller机器负责请求分发,agent机器进行压测,然后测试结果上传Contorller机器。
考虑到压测量较大的情况下回传测试结果会对agent本身造成一定资源占用,可以考虑异步上传,甚至事务补偿机制。
~在设计压测模型的时候会考虑:压测链路、压测场景、流量模型、压测任务、压测脚本。所谓链路,一个URL就是一个链路,场景是链路上一层的概念,一个场景可以有单个或者多个链路组合而成。(在电商环境下,某些场景是可以复用的)压测场景以后,加上流量模型就可以构成一个压测任务,流量模型就是压测的时候流量怎么来,是一条直线比值压,还是要阶梯爬坡?全业务要求流量必须是真实的,http服务的,通过nginx日志把请求内容导出来,处理一下,放到数据库池子里。rpc服务的,通过美团内部已有的rpc框架录制功能,把请求数据导出来,处理一下,放到数据库池子里。然后压测流量从数据库池子里来。
~压测任务又会转化成压测脚本,这是一一对应的。
~介绍了前面的业务模型梳理、数据模型构建、压测工具选型,然后还考虑压测环境搭建
全链路压测都是基于生产环境,解决了业务模型、数据模型以及压测工具选型,就要考虑系统扩容和风险规避了,比如压测不能影响实际的生产业务运行,还有资源申请等。
5、系统容量规划
[6、测试集群部署
能做全链路压测的业务系统,基本都是分布式系统架构,服务集群部署和负载均衡,就是需要实现和考虑的技术点。
需要解决的问题有:服务间通信问题、负载均衡问题、容灾问题]
[7、数据收集监控]
压测数据收集,需要由agent机回送给Contorller机器,但数据量过大会占用一定的资源,可以考虑异步实现测试结果回送。
至于监控,现在有很多优秀的专业监控工具,比如Nmon、Zabbix,全链路监控工具Zipkin、PinPoint以及携程开源的全链路监控工具CAT。或者可以针对需要,二次开发JVM自带的一些监控工具,做到实时全方位监控。
~全链路压测的应用,以饿了么全链路压测的实现为例作介绍
~主要功能与实现概要
具体实现:SpringBoot+AngularJS.
压测平台是典型的B/S类型Java Web项目,基于Spring Boot开发,前端使用AngularJS 。平台本身不执行测试只做调度,避免成为瓶颈,后台均使用JMeter执行测试;平台自身会维护压测机集群,保证压测机是可供测试的;测试期间产生的冷数据(用例数据、结果数据)持久化至MongoDB,热数据(实时数据)持久化至InfluxDB并定期清理。
~部署性能性能测试平台stressTestSystem
全链路压测是基于真实用户场景,在线上环境进行的压力测试,以评估系统性能。本文探讨了为何需要全链路压测,解决难点的方案,包括业务场景梳理、数据隔离和工具选型。此外,还介绍了压测环境、数据、场景和流量的核心要素,以及如何构建业务和数据模型,选择压测工具,如jmeter。文中以饿了么的全链路压测为例,说明了平台的实现,使用SpringBoot和AngularJS,并涉及数据收集监控和系统容量规划。
485

被折叠的 条评论
为什么被折叠?



