执行负载测试以模拟 200k - 500k 并发用户的最佳解决方案是什么?

What is the best solution to execute a load test to simulate 200k - 500k concurrent users?

我正在寻找执行负载测试的最佳解决方案,以模拟 200k - 500k 并发用户来测试 Web 应用程序。一些场景涉及视频查看、用户内容推送(如图片、视频上传)、页面查看。其中一个目标就是确保 CDN 服务能够从用户的角度处理如此巨大的负载。

根据研究,Jmeter 似乎可以按此处所述进行分发:

问题:

  1. 但是,在寻找云时,如何估计需要多少从节点以及使用哪些硬件?

  2. BlazeMeter 服务怎么样?看起来这项服务可以节省时间 - 只需避免基础设施设置。

实际上,如果没有问题1的答案,就无法计算成本并进行比较。

有什么建议吗?在严格的时间框架内进行目标测试的想法,使用最好的智能解决方案:)

Docker 本身并不能解决扩展挑战,它做了相反的事情:产生消耗资源的开销。因此,除非您在不使用容器的情况下在裸机或虚拟机上有像 Docker Swarm or K8S which can automatically scale or create new containers on physical or virtual machines - it won't give you any performance benefit comparing to running JMeter in distributed mode 这样的容器编排解决方案。

  1. 没有“c6g.large AWS instance可以模拟5000个虚拟用户”这样的答案,因为实际数量取决于:

    • 机器硬件规格
    • 测试的性质(采样器的性质、pre/post 处理器、断言等)
    • 应用程序响应时间和大小

    因此,如果您正在执行简单的 HTTP GET requests return 少量数据,您将能够模拟比上传大文件和接收大量响应的情况更多的用户

    所以你应该如下操作:

    • 确保有一个解决方案来监控 JMeter 引擎在 CPU、RAM、网络、磁盘 IO 等方面的健康状况。如果您没有记住一个,你可以考虑使用 JMeter PerfMon Plugin

    • 确保遵循JMeter Best Practices

    • 从 1 个虚拟用户开始,逐渐增加负载,同时查看资源消耗

    • 当任何受监控的资源消耗开始超过合理阈值时,即总可用容量的 80% - 通过查看 Active Threads Over Time listener[ 记下在此阶段有多少用户在线=17=]

    • 这是您可以从特定这台机器模拟多少用户来进行特定的测试

  2. BlazeMeter 引擎的硬件容量也有限,并且上述限制适用,因此请确保在负载测试期间监控 engines health,就好像 JMeter 无法足够快地发送请求一样,您将获得即使您的应用程序每单位时间可以处理更多请求,也会出现“假阴性”结果