性能测试如何做全链路压测?

2022-04-25 20:23:57 浏览数 (1)

你好,我是小牛。

关于性能测试之前写过两篇文章,分别讲了新人应该如何自学性能测试以及如何开始上手进行压测,确定目标TPS,参考文章:

如何自学性能测试?

新人做性能测试,如何确定目标压测TPS?

今天再来和大家聊聊全链路压测,首先要知道什么是全链路压测?

如果面试时,当面试官问到你这个问题的时候,一定要搞明白全链路压测是线上生产压测,而不是在测试环境进行压测。

至于原因也很简单,因为对于绝大部分公司,虽然代码生产和测试一致,但是生产的服务器包括硬件资源配置绝对都是优于测试环境的。

比如小牛公司生产环境的服务器数量是测试环境的4倍,所以一般都是根据生产的最大TPS,除以4,然后再乘以一个冗余系数,估算出来测试环境需要压测到多少,可以满足生产要求,峰值不会崩溃。

那么问题就来了,这种估算真的足够准确吗?要知道在整个业务流程中,最大的困难在于评估用户从登陆到支付完成全部交易的整个链路中,核心页面和关键交易的实际承压能力。

如果我们知道各个系统组件的承压能力,就可以通过木桶原理找到那块短板,然后在路由网关做一定的限流,防止大并发流量导致系统宕机。

生产环境上,系统一旦出现宕机是一件很可怕的事情。就算运维短时间重启了服务,但是过一会儿极大可能还会发生继续宕机,从而阻断交易。

即便是阿里这样的超级巨头,在早期做双11的时候也发生过这样的事情。为什么会出现这个问题,就是因为大家对整个全交易链条上的各个环节的系统承压能力不清楚。

这些链路就包括网关,前端,缓存,中间件,后端服务,数据库等服务,每一个环节挂了都有可能导致生产服务崩溃宕机。所以这就是为什么做生产环境全链路压测的意义。

但是,就目前行业情况来看,真正有能力做全链路压测的公司还是很少的,大部分公司都只是在测试环境去做压测去评估生产环境峰值。

原因就在于全链路压测是一件极耗费人力以及考验技术的工程。它需要协调全公司的资源参与包括开发,测试,运维等等,以及整个链路上的每一个部门和小组参与。

同时还要做一些预案,万一压测过程中出现系统宕机怎么办?这些都是需要考虑的。

除此之外,还有一个就是比较难搞的也是面试经常会问的一个问题,就是你们做全链路压测,怎么保证生产数据不被干扰?就是如何做数据隔离,这个重点讲一下,面试大概率会被问到。

目前业界主要使用隔离方案有两种,一种是逻辑隔离,另一种是物理隔离。

一.逻辑隔离

压测用到的所有数据,包括用户账号,订单号等信息通过一定规则和生产真实数据区别开。

比如你们生产数据订单号一般是9位,那么你就可以造一批15位的数据,再比如你们用户账号都是数字,可以造一批带有字母的。然后压测结束之后,由DBA进行统一删除处理即可。

二.物理隔离

在一些大厂相对来说技术水平比较高,可能会采用这种方式更多一些,就是在生产数据库中创建一些和真实业务一样的表,叫做影子表。这种表字段包括结构和真实表一模一样。

压测可以在请求数据header中加入某个字段作为标识,数据写入数据库时,由数据库中间件识别到该标识,从而将这些压测数据直接存入影子表中,这样就实现了压测数据和真实数据完全物理隔离。

但这种相对来说就对技术水平要求高一些,你们公司的架构和组件要支持这种识别方法。然后压测结束之后可以由DBA直接将影子表数据清空,从而避免操作真实表。

除此之外,还需要了解的是全链路压测时如何对生产影响降低到最低。就是我们选择在做全链路压测时也包括平时一些发版一般都会在晚上12点到早上6点进行。

因为这个时候用户活跃最低,对用户造成影响最小。即便发生一些生产问题,也可以及时修复,造成损失最小。

以上,就是对全链路压测的一个简单科普,希望大家可以有一个初步了解。这个面试时可能会问到相关一些问题,至少可以讲出一些来,不至于太懵逼。

0 人点赞