全链路压测第一次实践

5、大促指标沟通

为保证压测流量和生产预估流量对齐,由技术负责人牵头,和运营产品同学进行了多次沟通,确认了本次双十一大促活动相关的活动场次、时间段、优惠券投放量、预估DAU等相关关键指标。

6、压测模型梳理

压测模型的梳理,主要包括核心业务链路的优先级、调用依赖关系、流量模型转化(漏斗模型)等,限于保密措施,这里不过多介绍。

7、流量模型梳理

关于流量模型,建议梳理出核心交易链路对应的依赖大图,并粗估双十一峰值数据,作为接下来压测、性能优化的技术目标。

8、线上容量评估

为了在压测开展前对目前线上的服务容量有一个初步的了解,需要对各个核心服务、消息队列、缓存以及DB的容量进行了梳理汇总。

9、线上链路监控

监控就是我们的眼睛,有了监控,才能快速发现问题并定位修复问题。这一点,基础架构的同学为此做了很多工作。比如:链路追踪监控的Cat、可视化监控大盘Grafana以及更多的监控组件。

10、压测数据准备

为了尽可能保证压测数据的真实性,我们的解决方案是复制生产库的数据,进行脱敏和可用性验证,用来做压测的基础数据。在数据脱敏和可用性验证这点需要高度重视。

11、资损防控梳理

由于现在双十一大促活动主要玩法都是优惠券以及满减相关,且涉及到订单支付业务,因此资损防控也是准备阶段的重中之重。

12、确定性能水位

为了精确测定各服务单机的水位性能,并留存一定的buffer作为流量高峰时刻的缓冲,结合业内经验和我们当前的系统情况,最终确定以单机40%的水位性能作为线上扩容和容量规划的验收标准。

13、输出测试方案

前期做了相当多的准备工作,在正式开展全链路压测之前,性能测试同学输出了本次双十一全链路压测的测试方案,通过评审后,全链路压测工作就可以正式开展。

实施阶段

在全链路压测实施阶段,根据测试场景和采用的测试策略,我们主要进行了如下的工作。

1、单机单链路基准测试

在目前的微服务架构下,整体链路的性能瓶颈,取决于短板(木桶原理)。因此,单机单链路基准测试的目的,是在全链路压测开始前进行性能摸底,定位排查链路瓶颈。

2、单机混合链路水位验证

单机混合链路压测的目的,是排查上下游调用依赖的瓶颈,并以此测试结果作为限流预案的基准值。

3、全链路压测演练

全链路压测作为备战双十一的重中之重,是今年双十一大促项目的基础保障。在整个实施阶段,需要不断的压测,排查定位分析问题并进行优化,对最终的线上发布和容量规划提供了支持。

4、专项演练

专项演练主要是针对服务限流降级熔断以及高可用、服务扩容进行验证。进行演练的目的主要有如下几项:

①、验证预案是否生效;
②、针对预案设定阈值进行测试调优;
③、验证预案生效时服务本身的性能表现;
④、针对上述专项场景进行实战演练;

5、稳定性测试

稳定性测试的目的,是验证系统处于负载情况下,能否长时间提供稳定可用的服务能力。

6、每日问题复盘

在备战双十一期间,会针对每天压测发现的问题进行复盘追踪,尽可能让性能问题及时解决。

发布阶段

经过闭关作战半个月,针对我们的核心业务链路,进行了多轮的压测和性能优化,各系统qps已经基本达到了预定的目标(等比例),TPS整体提升3倍以上。

在双十一峰值流量期来临之前,做最终的线上扩容和优化版本发布。针对双十一,我们还做了预案的梳理并提前执行、服务降级、缓存预热、job任务降级错峰处理。

三、收获与思考

整个过程中,大部分同学都是没有全链路压测实战经验的,但每个人都迸发出了巨大的能量。整个过程中发现了很多存在的问题,但还是有很多是值得改进的地方,比如:

时间紧促,留给性能瓶颈定位和优化的时间太少,后续可以考虑测试左移;

对一些问题定位排查工具的使用姿势应该熟练,对流量的预估应该更加准确;



留言