如何在几秒钟内发送 50.000 个 HTTP 请求?

Posted

技术标签:

【中文标题】如何在几秒钟内发送 50.000 个 HTTP 请求?【英文标题】:How to send 50.000 HTTP requests in a few seconds? 【发布时间】:2021-08-05 10:53:19 【问题描述】:

我想为我的应用的一项功能创建负载测试。它使用 Google App Engine 和 VM。用户向 App Engine 发送 HTTP 请求。这个引擎在几秒钟内收到数千个请求是现实的。所以我想创建一个负载测试,在 1-10 秒的时间范围内发送 20.000 - 50.000。

你会如何解决这个问题?

我开始尝试使用 Google Cloud Task,因为它看起来非常适合。您为特定时间点安排 HTTP 请求。文档说每个队列每秒有 500 个任务的限制。如果每秒需要更多任务,可以将此任务拆分为多个队列。我这样做了,但 Google Cloud Tasks 不会在给定时间点执行所有计划任务。一个队列需要 2-5 分钟来执行 500 个请求,这些请求都安排在同一秒 :thinking_face:

我还尝试了运行异步 node-fetch 请求的 TypeScript 脚本,但我的 macbook 上需要 77 秒的 5.000 个请求。

【问题讨论】:

【参考方案1】:

我不认为你可以“在几秒钟内”从“你的 macbook”获得 50.000 个 HTTP 请求,最好考虑使用特殊的负载测试工具(可以按顺序部署到 GCP 虚拟机上尽量减少network latency 和流量成本)

工具的选择取决于你,要么你需要足够强大的machine type,以便它能够“在几秒钟内”从单个虚拟机执行 50k 请求,要么该工具需要具有以下功能在clustered mode 中运行,这样您就可以启动多台机器,它们会同时发送请求。

鉴于您提到 TypeScript,您可能想尝试 k6 tool(尽管它无法扩展)或查看 Open Source Load Testing Tools: Which One Should You Use? 以了解其他选项,它们都没有提供 javascript API,但有几个不需要编程语言知识

【讨论】:

【参考方案2】:

您可以考虑使用的工具是siege。

这里是Linux based,并通过在 GCP 之外的外部系统进行测试来防止产生任何额外费用。

您可以在 relatively large machine 或 GCP 内的几台机器上部署 siege。

设置起来相当简单,但是由于您提到在几秒钟内需要 20-50k,所以默认情况下,siege 每秒只允许 255 个请求。不过You can make this larger,所以它可以满足您的需求。

您需要考虑一台机器可以建立多少个连接,因为每台机器都会根据 CPU、内存和网络套接字的数量有一定的限制。您可以只增加 -c 数字,直到机器给出“错误:系统资源耗尽”错误或类似的东西。试验一下您在 GCP 上的虚拟机可以处理什么。

【讨论】:

以上是关于如何在几秒钟内发送 50.000 个 HTTP 请求?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置访问令牌在几秒钟内过期

在几秒钟内向许多iphone / android发送通知

PHP 如何在几秒钟内设置单个Wordpress帖子的样式

MySQL:如何在几秒钟内获得两个时间戳之间的差异

如何在几秒钟内设置单个Wordpress帖子的样式

在 Java/Scala 中,如何以最少的代码/以最优雅的方式在几秒钟内获得特定的 UTC 日期?