如何在几秒钟内发送 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 请求?的主要内容,如果未能解决你的问题,请参考以下文章