限制每秒可见的AWS Lambda每秒每秒可见的AWS SQS消息

问题描述 投票:0回答:2

我正在实现一种解决方案,该解决方案涉及触发Lambda函数的SQS,该函数使用第三方API执行某些操作。该第三方API每秒有一个请求限制,因此我想将Lambda函数处理的SQS消息的数量限制为相似的速率。

是否有任何方法可以限制SQS上每秒可见的消息数或Lambda函数每秒的调用数?

aws-lambda amazon-sqs quota
2个回答
1
投票

这是一个困难的情况。

Amazon SQS可以并行触发多个AWS Lambda函数,因此没有中央监督可以对第三方API发出多快的请求。

来自Managing concurrency for a Lambda function - AWS Lambda

为了确保功能始终可以达到一定程度的并发性,可以为功能配置保留的并发性。当一个函数具有并发保留时,其他任何函数都不能使用该并发。 保留的并发性还限制了该函数的最大并发性,并应用于整个函数,包括版本和别名。

因此,并发可用于限制执行同时 Lambda函数的数量,但这不一定映射为“每秒x个API调用”。这将取决于Lambda函数执行所需的时间(例如2秒)以及在该时间内执行了多少次API调用(例如2次API调用)。

可能有必要引入延迟,要么是Lambda函数内部(不太好,因为您仍在等待时运行该函数),或者是outside Lambda函数(通过触发Lambda函数)甚至可以在Lambda之外进行处理)。

最简单(但效率不高)的方法可能是:

  • 设置并发1
  • 具有Lambda函数如果被拒绝,请重试API调用

0
投票

感谢@John Rotenstein提供了有关SQS部分的全面而详细的答案。

如果您的设计仅限于单个使用者,则可以用sqs流替换kinesis。通过替换它,您可以使用kinesis的batch window选项来限制使用者提出的请求。批处理窗口选项用于reduce the number of invocations

Lambda以固定的节奏(例如,对于Kinesis数据流每秒一次)从流中读取记录,并调用具有一批记录的函数。批处理窗口可让您等待300秒来构建批处理,然后再调用功能。现在,当满足以下条件之一时,将调用一个函数:有效负载大小达到6MB,批处理窗口达到其最大值或批处理大小达到其最大值。使用批处理窗口,您可以增加每次调用传递给该函数的平均记录数。当您希望减少调用次数并优化成本时,这很有用。

© www.soinside.com 2019 - 2024. All rights reserved.