当前位置: 首页 > 后端技术 > Java

各大厂商青睐的全链路压测意义何在?四种压测方案详细对比分析

时间:2023-04-01 23:51:01 Java

全链路压测?基于实际生产业务场景和系统环境,模拟海量用户请求和数据,在各种场景下对整个业务链路进行测试验证,不断发现和优化瓶颈,保障系统稳定性。针对日益复杂的业务场景和海量数据的冲击,发现和解决整个业务系统的可用性、可扩展性和容错性的过程。核心流程全链路压测核心流程如下:一、全链路压测意义上图为2012年淘宝核心业务应用关系拓扑图,不包括其他非核心业务应用程序。所谓核心业务就是与交易和金钱相关的业务。这张图你可能看不清楚,看不清也很正常,因为那时候阿里应用非常多,应用之间的关系混乱,人工无法理清。在一个真实的业务场景,各个系统的压力都比较大,而且系统相互依赖。单机压力测试没有考虑到依赖环节压力比较大,会引入一个不确定的误差。.这就好比,我们要生产一个电表,每个零件都经过严格的测试,最后把零件组装成一个电表,不清楚电表会是什么工作状态。技术角度:降低成本,提高服务可用性,技术培训&团队协作&快速响应;商业视角:提升用户体验,用技术更好地服务商业,创造更多商业价值。2链路压测方案分析2.1离线压测顾名思义,压测是在测试环境中进行的,是针对一些重点项目的测试手段,因为测试环境的硬件资源和压测数据都是和网上的差别太大了。服务之间的依赖关系错综复杂,测试环境难以模拟且不够稳定,压测得到的数据指标参考价值不大,很难用测试环境得到的结果推导实际生产能力。2.2前期生产环境压测这个一般是将生产环境的硬件和软件同步复制到生产环境的副本中,然后在服务内部拦截对外调用的接口,然后进行压测,让真正的可以评估生产环境的容量并达到压力测试的目的,但是成本非常高。需要完全复制生产环境的硬件,维护成本非常高。部署时,需要在预生产环境同步部署,并更改压测的代码。2.3引流压测随着业务量的不断增长,考虑到线下测试结果的准确性,我们开始尝试制作压测。这种压力测试方法称为排水压力测试。其实并没有真正模拟放大压力来测试,而是通过减少在线服务集群的数量来放大单机的处理能力。比如一个业务系统集群有100个节点,其中90个模拟下线或者转发流量给剩下的10个节点做压力测试。漏压测试的缺点是DB的压力不变,并且上下游系统压力保持不变。压测结果只能代表单个应用的性能,往往无法识别出链路和架构层面的隐患,如果在引流过程中出现异常或突然的业务高峰,很容易造成生产故障。2.4全链路压测随着微服务架构的普及,服务按照不同的维度进行拆分,一个请求往往会涉及到多个服务。互联网应用程序建立在不同的软件模块集上。这些软件模块可能由不同的团队开发,可能使用不同的编程语言实现,可能部署在数千台服务器上,跨越多个不同的数据中心。因此,需要一些能够帮助理解系统行为和分析性能问题的工具,以便在出现故障时能够快速定位和解决问题。染色、数据隔离、日志隔离、风险熔断等技术问题在生产环境的压力测试中,控制不好的风险也很高。因此,在一个复杂的微服务架构系统中,几乎每一个前端-endrequest会形成一个复杂的分布式服务调用链路。一个请求的完整调用链可能如下图所示:2.5四种压测方案对比压测效果技术难度机器成本维护成本风险离线压测差值LowLowLow无预产压测GoodLowHighHigh中引流3.全链路压测概述3.1什么是全链路压测基于实际生产业务场景和生产环境,在整个业务链(通常是核心业务链)上模拟海量用户请求和数据压力测试和持续调整。3.2解决什么问题解决日益复杂的业务场景和海量数据冲击下的系统全业务链可用性、服务能力瓶颈、容量规划等问题。3.2.3精准的容量规划3.2.3.1为什么要进行容量规划什么时候增减机器,保证系统稳定,节约成本容量规划的目的是让每个业务系统清楚的知道:什么时候加机器,什么时候应该加机器会减少吗?双十一等大促场景需要准备多少台机器,既可以保证系统稳定性,又可以节省成本多少系统容量评估阶段:初步计算每个系统需要分配多少机器容量精细-调优阶段:通过全链路压测模拟大促时的用户行为,在验证站点能力的同时验证整个站点的容量微调流量控制阶段:配置限流阈值等系统保护措施防止系统在实际业务流量超过预估业务流量时,无法提供正常服务。流控阶段:为系统配置限流阈值等系统保护措施,防止实际业务流量超过预估业务流量时,系统无法提供正常服务。3.3进行全链路性能监控。链条性能信息的集中显示,便于整体和局部性能的测量,便于查找故障源头,生产中排除故障的时间大大缩短。保障系统稳定性:可以提前预知系统的各种问题,提前模拟高并发场景,做好准备。请求链路跟踪,故障快速定位:可以通过调用链结合业务日志快速定位错误信息。准确的容量评估:能够定位到最需要扩容的服务,帮助企业以最低的成本满足业务性能需求真实的性能验证:能够在生产环境中最真实的环境中验证系统的真实性能。数据分析与链路优化:可获取用户行为路径,汇总分析可应用于众多业务场景。3.4如何进行全链路压测3.4.1业务模型梳理首先,将核心业务和非核心业务进行拆分,确认流量高峰针对哪些业务场景和模块,并做好针对性的扩容准备。整理对外接口:使用MOCK(仿真)方式作为挡板。不污染正常数据:仔细梳理数据处理的每一个环节,确保mock数据的处理结果不会写入正常库。等量数据包作为压测的基础数据,然后在基础数据的基础上,通过分析历史数据的增长趋势,预估当前可能的数据量。在一个环节,可以考虑对压测数据进行隔离处理,落入影子库,mock对象等手段防止数据污染,很多开源工具都可以提供分布式压测方法,比如JMeter,nGrinder,Locust等。到服务模块下面介绍和演示整体业务。如果本文对您有帮助,欢迎关注点赞`,您的支持是我坚持创作的动力。转载请注明出处!