您好,Serverfault 社区,
我目前正在开发一个 .NET Web API,它利用 MS SQL 作为后端来处理数据并返回直接结果。为了确保 API 的性能和可靠性,我一直在使用 Sendgrid Loader.io 进行负载测试。
在这些负载测试中,我的目标是并行处理大约 3500 个请求,根据 Loader.io 的说法,这似乎是可以实现的。但是,负载测试是通过 3 或 4 个客户端(服务器)模拟并发请求来执行的。
我的问题是,当我的 3500 个不同的客户端完成负载测试时,这种负载测试方法在我的服务器上是否会产生相同的结果?
答案1
作为初步近似:是的,如此成功的模拟将很好地证明您的 API 不会在设计负载下立即崩溃。
在其他所有条件相同的情况下,理论上,单个负载生成器节点X
与您的服务器建立多个独立并发连接(X
少于 64k)并在每个连接上运行 1 个请求与 X 个并发节点建立单个连接以运行其请求没有区别。只要模拟客户端负载的节点上有足够的资源(带宽、CPU、内存等),使用更多节点来模拟负载并不一定意味着您的结果将更好地代表现实世界的负载。
但根据定义,模拟只是对现实的近似,通过模拟测试场景并不能保证在现实世界和实际负载下您的 API 永远不会出现问题。
据我所知,loader.io
它支持的测试相当简单,例如,它不会模拟“坏”客户端和次优连接场景,其中(一定比例的)客户端具有高延迟和/或低带宽连接。许多这样的客户端通常会导致客户端和服务器之间的连接必须保持更长时间,这可能会导致服务器资源匮乏。
(完全不同的考虑因素是测试数据集的质量和数量,以及负载测试模拟真实世界使用情况的程度。当 API 请求可以生成大型结果集时,您是否使用分页,负载测试是否还测试分页的费用/性能并从足够大的结果中返回一个小的随机子集?还有许多其他考虑因素,使测试既是一门艺术,也是一门科学。)