在压测的时候,一定是不能影响线上的真实用户的。那么如何避免呢?
在进行压测之前,首先应该在一个独立的压测环境中进行测试。这个环境应该是与线上环境隔离的,包括独立的数据库、缓存和其他依赖服务。这样可以确保压测不会对线上用户产生任何影响。
这个压测环境可以是日常(测试)环境,也可以是预发布环境。
预发布环境:指的是和线上一样的环境,数据库、缓存都用的是同一份,机器配置也相同,但是正常用户无法访问,需要通过 host 绑定的方式来访问。
一般来说,针对新场景的压测,建议先从日常开始压测,然后再到预发布环境开始压。如果是老链路,可以直接去预发布环境压测。
为啥要在日常先压呢?
1、日常压测的成本低,不会有任何影响,不用考虑脏数据问题,也不用考虑对用户的影响。
2、日常环境的配置相对更低一些,可以更容易发现压测链路上的薄弱点。
为啥还要去预发布压测呢?
主要是因为日常环境的服务器配置、数据库情况、业务链路和线上有很大差别。无法还原线上的真实情况。
所以,需要日常和语法结合着去压测。
确保只在指定的测试环境中进行压测,并且不要对线上生产环境发出任何测试请求。并且通过合理的配置和网络隔离,确保测试请求不会意外地进入线上系统。
而且,更重要的是压测数据不要写到线上库去,容易对真实用户的造成影响,就算压测数据不会被真实用户的看到,但是表中数据量大对性能也是有影响的。
所以,如果在预发布环境压测时,需要考虑影子表。
影子表:通常是指在数据库设计中的一种技术概念,用于在不影响主表的情况下进行数据备份、实时数据同步、数据修订或其他操作。也通常用在全链路压测中。
选择在系统负载较低的时间段进行压测,例如深夜或者低峰时段。这样可以最大程度地避免影响线上用户的正常使用体验。
在压测工具中设置适当的并发数和请求速率,以确保不会超出系统能够处理的范围。
最好是逐步放量,先并发的压,扛得住的话再一点点放量。