当尝试执行Amazon Web Services(AWS)Lambda函数(多次)时,我们看到了错误:
AWS Lambda TooManyRequestsException: Rate Exceeded
我们如何解决这个问题?
rate-limiting amazon-web-services node.js aws-lambda serverless
TL;DR 对于并行执行的一批 500 个 lambda,我观察到它们以 50 个并发批次执行,尽管指定的保留并发度为 500。这是为什么?
你好,
我是 AWS lambda 新手,无法理解我所看到的并发行为。
我正在调用一个 lambda 函数“calc-group”[从 AWS Web 界面或 CLI],它并行调用另一个 lambda 函数“calc-number”500 次,其中后者指定了 500 的保留并发度。运行,计算结果一切正常】。
“calc-number”大约需要 1s 执行,但“calc-group”需要 10s 执行。并发执行图表表明我得到的并发数仅为 50,与我看到的 10 倍时间一致。 [注意:“calc-number”的更详细实现(此处未显示)也证明只有 50 个 lambda 执行上下文从每个顺序处理 10 个请求开始]。
我正在使用Promise.all承诺进行同步lambda.invoke调用。
我已阅读https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html和https://docs.aws.amazon.com/lambda/latest/dg/inspiration-scaling.html但不明白发生了什么。
下面是一个隔离行为的精简示例。 [注意:我知道这里的内存比所需的要高得多,但它使计时更加稳定,并且原始代码受 CPU 限制,受益于此设置]。
我非常感谢任何关于如何让所有 500 个并行执行的建议......
非常感谢!
编辑:简化了代码,阅读了有关异步 Node.js 处理程序中的错误处理的更多信息 + 较小的整理
编辑:仅供参考,如果我并行地重复调用 calc-group,则 calc-number 的并发执行会成比例增加。例如,如果我并行调用 calc-group 5 次(我从 CLI 进行测试),那么我会看到 calc-number 有 250 个并发执行,尽管发出并执行了 2500 个请求。(超过 …