✅压测如何避免影响线上用户?

典型回答

在压测的时候,一定是不能影响线上的真实用户的。那么如何避免呢?

单独的压测环境

在进行压测之前,首先应该在一个独立的压测环境中进行测试。这个环境应该是与线上环境隔离的,包括独立的数据库、缓存和其他依赖服务。这样可以确保压测不会对线上用户产生任何影响。

这个压测环境可以是日常(测试)环境,也可以是预发布环境。

预发布环境:指的是和线上一样的环境,数据库、缓存都用的是同一份,机器配置也相同,但是正常用户无法访问,需要通过 host 绑定的方式来访问。

一般来说,针对新场景的压测,建议先从日常开始压测,然后再到预发布环境开始压。如果是老链路,可以直接去预发布环境压测。

为啥要在日常先压呢?


1、日常压测的成本低,不会有任何影响,不用考虑脏数据问题,也不用考虑对用户的影响。

2、日常环境的配置相对更低一些,可以更容易发现压测链路上的薄弱点。


为啥还要去预发布压测呢?


主要是因为日常环境的服务器配置、数据库情况、业务链路和线上有很大差别。无法还原线上的真实情况。

所以,需要日常和语法结合着去压测。

控制压测范围

确保只在指定的测试环境中进行压测,并且不要对线上生产环境发出任何测试请求。并且通过合理的配置和网络隔离,确保测试请求不会意外地进入线上系统。

而且,更重要的是压测数据不要写到线上库去,容易对真实用户的造成影响,就算压测数据不会被真实用户的看到,但是表中数据量大对性能也是有影响的。

所以,如果在预发布环境压测时,需要考虑影子表。

影子表:通常是指在数据库设计中的一种技术概念,用于在不影响主表的情况下进行数据备份、实时数据同步、数据修订或其他操作。也通常用在全链路压测中。

业务低峰期压测

选择在系统负载较低的时间段进行压测,例如深夜或者低峰时段。这样可以最大程度地避免影响线上用户的正常使用体验。

控制压测流量

在压测工具中设置适当的并发数和请求速率,以确保不会超出系统能够处理的范围。

最好是逐步放量,先并发的压,扛得住的话再一点点放量。

原文: https://www.yuque.com/hollis666/xkm7k3/lqzkcwhe1qnw05r0