Azure 负载测试。了解虚拟用户如何影响性能

Azure Load Test. Understanding how virtual users effect performance

我正在尝试理解最近 Azure 云负载测试的结果,我们 运行 反对我们 API 的

在测试 API 时,我已将负载测试虚拟用户配置为没有思考时间。所以基本上,每次虚拟用户收到响应时,它都会立即发送另一个请求。

我们也不使用任何类型的用户会话,或缓存每个用户的任何数据。这是一个基本测试,将一些 JSON 发布到 API 上的端点,然后它会对收到的数据执行一些计算。

看来,通过改变虚拟用户的数量,我们可以使服务更高效。我的意思是,它可以更快地响应并且仍然每秒处理更多的请求。

两次负载测试的结果如下所示。

第一个测试告诉我,我们的 API 能够在 2 分钟内处理 60k 个请求。

我不明白的是,为什么添加更多虚拟用户会增加平均响应时间并降低 RPS,这反过来会导致 API 在 2 分钟内只能处理 55k 个请求。

为什么 API 现在只能处理 460 RPS,而我们已经知道它可以处理 500 RPS?

没有 "exact" 单一的原因,但请记住,随着负载生成器数量的增加,连接数量、服务器上的并行操作数量等也会增加。您不能假设随着时间的推移增加用户负载,您将继续获得更好的吞吐量和响应时间。事实上,有时您会增加负载并在性能图表上发现难以捉摸的 "knee in the curve" - 延迟峰值(以及请求失败),而吞吐量直线下降。从负载测试的角度来看,这将是一件好事,因为您现在可以很好地了解在交易率等方面对现有软件+基础架构的期望。

您需要进一步深入研究以确定确切原因,但这很可能与线程池耗尽、内存问题、cpu 问题、磁盘问题、特定资源瓶颈(例如缓存或数据库)、网络饱和等

这里有3个问题: 1.why 更多虚拟用户增加响应时间; 2.why VU 越多,RPS 越低; 3.why 更多的 VU 减少总请求。

解释如下:

  1. 更多并发 VU 会创建更多并发会话,这需要服务器上的更多资源(例如会话上下文、队列大小、线程并发性),从客户端角度来看会增加服务器处理时间和响应时间。

  2. 仅当负载生成器发出与接收响应无关紧要的恒定频率请求时,在这种情况下降低 RPS 才会不一致。实际上,在发出请求后,每个 VU 都会等待直到收到响应。由于服务器响应变慢,等待时间增加,导致 RPS 降低。 这个问题有第二个答案。由于 Load Generator 的性能容量有限,模拟更多的 VU 需要更多的客户端资源,这会导致发出请求的延迟。当您将测试配置为零思考时间时,负载生成器可能会无意中注入导致额外 RPS 降低的延迟。

  3. 总请求数与VU数和RPS数成正比。显然,在您的情况下,RPS 减少产生了更大的影响,并且总请求数减少了。

一般情况下,在负载测试中增加VU导致RPS降低的效果看起来像是一个悖论,但实际上并非如此。