首先要清楚的一点就是,什么时候开始做全链路压测?我们有另外一个业务线,现在就没有打算做,那个业务线的日均单不到十万,而要压测的业务线的日均单到了200万,但这并不意味着200万是一个标准,我觉得可以从下面几点考虑:
下面具体看看要做全链路需要哪些工作。
梳理核心链路的流程和边界
因为全链路一定会设计多个流程,多种技术,多个依赖,所以,要做全链路压测,首先要梳理核心链路的流程,明确链路的边界,我觉得梳理这个是比较简单的,因为一个业务再复杂,它的核心链路肯定有限,例如,我们的核心链路就包括:
核心链路是一个业务的核心,这一块应该可以很快梳理清楚,但是,难点在于梳理清楚链路的边界。例如:
在核心链路的基础上,我们会有很多的分支业务,而这些分支业务有的可以参与压测,有的不能参与压测:原因多种多样,比如,这个分支业务不是我们自己公司的,或者这个分支业务本身就不怎么重要,可以降级掉,甚至有的业务就是不能压测,比如给用户下放push消息。
在具体实施的时候,业务反复跟整个链路的每个业务owner反复确认,哪些是核心业务,哪些是分支业务,哪些参与压测,哪些不参与压测,把这些形成文档,逐个跟进。
提供全链路压测的底层支持
要做全链路,要实现非核心链路的降级,就必须对底层的产品,例如中间件,数据库访问,MQ等做改动,让这些中间件支持全链路压测。我们整体看看,一般需要哪些改动。
我们把模型简化一下,如下图,虽然是简化的,但是基本上包括主流的分布式业务的技术栈。
可以看到,底层主要需要提供下面的支持:
思考全链路压测的数据怎么mock
流程支持之后,还有关键的一步,就是考虑如何构造压测的mock数据。在使用影子表之后,可以比较轻松的实现跟正常数据隔离,那剩下的就是好构造好mock数据,有几点需要考虑:
做好压测流量的降级预案
这一点尤其重要,特别当业务特别的复杂的时候,一定要确认好,第三方依赖能不能接收压测流量,所以,只要依赖第三方的服务,我们都要接入压测流量降级的开关,防止对第三方服务的污染。实现上,可以集成到RPC机制上,也可以提供类似于单独的限流组件。
梳理监控体系
确认好流程的技术支持和Mock数据的支持后,还要让每个业务梳理自己的监控,确保压测时候能够准确,及时的发现问题。
线下做好预演
真实的压测之前,肯定要进行预演,预演主要确认:
尽量模拟现实
我们压测的脚步要尽可能的模拟现实,比如:
压测的脚步要跟各个业务确认,尽量跟线上真实的用户行为保持一致
逐步平滑加压
压测的时候,逐步加压,并且要保持平滑加压,不要把一秒的流量都在前面几毫秒内都压出去。
形成报告
每次压测后进行复盘,总结压测中的问题,压测结果,机器的指标等数据形成报告发给大家,制订好后续的Action以及跟进的负责人。
全链路压测的技术难点不多,除了要花时间梳理流程和思考如何处理数据之外,最难的就是整个链路跨多个业务,甚至部门,需要跟进每个业务线的进度,确保大家能够在给定的时间点进行联调以及进行压测。在推进的时候,按照核心链路所在的模块进行跟进,每个模块出一个owner,各个owner跟进核心的接口和依赖,每周大家碰一下同步下总体的进度。
(adsbygoogle = window.adsbygoogle || []).push({});