在本地对 api 进行负载测试,而不是在已部署的测试环境中进行负载测试

Load testing an api locally, vs in a deployed testing environment

我们有一个 expressJS API 利用 mongoDB Atlas,它将实时部署到 AWS。 我们希望在用户开始使用它之前对其进行压力和负载测试 API。

问题是是在本地执行负载测试,还是在测试环境中部署到AWS并对部署的负载测试API。

任何人都可以就此问题提供任何建议吗?

使用尽可能接近您的请求负载和数据构建您的 API 的 AWS 测试版本是最准确的测试方法。

确定您的 API 是否会按照您期望的方式在生产中执行的最可靠方法是尽可能模拟生产环境和负载。如果您有快速的 Macbook Pro,那么对 API 的单个实例的操作可能 运行 比环境 AWS 更快。另一方面,某些 AWS 产品可能 up/scale 缩减您的服务以满足需求。任何这些都可能降低本地测试的准确性。

这里有一篇关于设置负载测试的更多 in-depth 文章。它介绍了如何衡量您的数据负载、用户和查询,以便最好地模拟负载: https://developers.redhat.com/blog/2015/04/30/how-to-load-test-and-tune-performance-on-your-api#preparation

综上所述,这是一个新 API。有多少用户会在前两周使用您的应用程序?每秒多少个请求?如果您只是想确保您没有在循环中留下任何 4x 嵌套查询或其他东西,则在本地进行测试可以获得一些信息。如果您要向 100 个朋友和家人推出测试 CRUD 应用程序,请考虑推迟构建大量测试基础设施以优化 100 万用户的性能,直到您有更多已证实的需求。

如果您能够像云一样启动具有相同规格的本地环境 - 结果应该没有差异或差异很小。

但您需要确保本地是准确的副本,包括:

  • CPU 的数量和频率
  • 内存
  • 网络和磁盘 IO
  • 网络延迟(如果您在欧洲而云在澳大利亚,您应该 运行 在靠近服务器的地理位置进行测试,否则您会看到更长的响应时间,因为数据包需要一些时间来回传输地球)
  • 等等

如果没有 - 您仍然可以对与 Mongo 没有直接联系的方面进行一些测试,即使用 profiler tools 查找可能有问题的代码部分等。

唯一不应该接触 ten-feet 杆的方法是 running load tests against a scaled-down environment