Skip to content

面试速答(先看这里)

**一句话结论:**在进行压测之前,首先应该在一个独立的压测环境中进行测试。

60秒标准回答:

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

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

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

**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点

回答主线:

  • **要点1:**在压测的时候,一定是不能影响线上的真实用户的。
  • **要点2:**预发布环境:指的是和线上一样的环境,数据库、缓存都用的是同一份,机器配置也相同,但是正常用户无法访问,需要通过 host 绑定的方式来访问。
  • **要点3:**一般来说,针对新场景的压测,建议先从日常开始压测,然后再到预发布环境开始压。
  • **要点4:**而且,更重要的是压测数据不要写到线上库去,容易对真实用户的造成影响,就算压测数据不会被真实用户的看到,但是表中数据量大对性能也是有影响的。
  • **要点5:**选择在系统负载较低的时间段进行压测,例如深夜或者低峰时段。

**记忆锚点:**应该是与线上环境隔离 → 合理的配置和网络隔离 → 工具中设置适当的并发 → host

关键取舍:

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

易错提醒:

  • 在压测的时候,一定是不能影响线上的真实用户的。
  • 2、日常环境的配置相对更低一些,可以更容易发现压测链路上的薄弱点。

加分表达:

  • 一般来说,针对新场景的压测,建议先从日常开始压测,然后再到预发布环境开始压。
  • 如果是老链路,可以直接去预发布环境压测。
  • 确保只在指定的测试环境中进行压测,并且不要对线上生产环境发出任何测试请求。

追问准备:

  • 那么如何避免呢?
  • 为啥要在日常先压呢?
  • 为啥还要去预发布压测呢?

典型回答 ​

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

单独的压测环境 ​

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

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

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

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

为啥要在日常先压呢?

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

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

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

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

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

控制压测范围 ​

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

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

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

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

业务低峰期压测 ​

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

控制压测流量 ​

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

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