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