Aws lambda 限制每秒AWS Lambda调用中每秒可见的AWS SQS消息

Aws lambda 限制每秒AWS Lambda调用中每秒可见的AWS SQS消息,aws-lambda,amazon-sqs,quota,Aws Lambda,Amazon Sqs,Quota,我正在实现一个涉及触发Lambda函数的SQS的解决方案,该解决方案使用第三方API来执行一些操作。 第三方API有每秒请求的限制,因此我想将Lambda函数处理的SQS消息量限制在类似的速率 有没有办法限制SQS上每秒可访问的消息数或Lambda函数每秒的调用数 [已编辑] 在关于AWS运动的评论中给出了一些见解之后: 通过处理Kinesis参数批次窗口、批次大小和有效负载大小,不存在精益解决方案,因为Kinesis的行为会触发lambda执行,如果达到以下任何阈值: *给定N=每秒可通过第三

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

有没有办法限制SQS上每秒可访问的消息数或Lambda函数每秒的调用数

[已编辑]

在关于AWS运动的评论中给出了一些见解之后: 通过处理Kinesis参数批次窗口、批次大小和有效负载大小,不存在精益解决方案,因为Kinesis的行为会触发lambda执行,如果达到以下任何阈值: *给定N=每秒可通过第三方api执行的最大请求数。 *配置批处理窗口=1秒且批处理大小为N,back presrre应触发执行超过N_MAX的请求。 *配置批处理窗口=1秒,批处理大小为允许的最大值,将处于性能低下状态,并且不保证每秒执行少于N次


我发现的最简单的解决方案是创建一个固定执行速率为1秒的Lambda,该Lambda从SQS/Kinesis读取固定数量的消息N,并将这些消息写入另一个SQS/Kinesis,将另一个Lambda作为端点。

这是一个困难的情况

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

发件人:

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

因此,可以使用并发性来限制同时执行的Lambda函数的数量,但这并不一定映射到每秒x个API调用。这将取决于Lambda函数执行(例如2秒)所需的时间以及它在这段时间内进行(例如2次)API调用的次数

可能需要在Lambda函数内部引入延迟,因为您在等待时仍在为函数的运行付费,或者在Lambda函数外部引入延迟,方法是以不同的方式触发Lambda函数,甚至在Lambda之外进行处理

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

将并发设置为1 如果API调用被拒绝,请让Lambda函数重试该调用
这是一个困难的局面

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

发件人:

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

因此,可以使用并发性来限制同时执行的Lambda函数的数量,但这并不一定映射到每秒x个API调用。这将取决于Lambda函数执行(例如2秒)所需的时间以及它在这段时间内进行(例如2次)API调用的次数

可能需要在Lambda函数内部引入延迟,因为您在等待时仍在为函数的运行付费,或者在Lambda函数外部引入延迟,方法是以不同的方式触发Lambda函数,甚至在Lambda之外进行处理

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

将并发设置为1 如果API调用被拒绝,请让Lambda函数重试该调用
感谢@John Rotenstein就SQS部分给出了全面详细的回答

如果您的设计仅限于一个消费者,则可以使用kinesis streams替换sqs。通过替换它,您可以使用kinesis的批处理窗口选项来限制消费者的请求。批处理窗口选项用于

Lambda以固定的节奏从流中读取记录,例如,对于Kinesis数据流,每秒读取一次记录,并使用一批记录调用函数。“批处理”窗口允许您在调用函数之前等待300秒以生成批处理。现在,当满足以下条件之一时,将调用一个函数:有效负载大小达到6MB,批处理窗口达到其最大值,或者批处理大小达到其最大值。使用“批处理”窗口,可以增加每个invocat传递给函数的平均记录数 离子。当您希望减少调用次数并优化成本时,这将非常有用


感谢@John Rotenstein就SQS部分给出了全面详细的回答

如果您的设计仅限于一个消费者,则可以使用kinesis streams替换sqs。通过替换它,您可以使用kinesis的批处理窗口选项来限制消费者的请求。批处理窗口选项用于

Lambda以固定的节奏从流中读取记录,例如,对于Kinesis数据流,每秒读取一次记录,并使用一批记录调用函数。“批处理”窗口允许您在调用函数之前等待300秒以生成批处理。现在,当满足以下条件之一时,将调用一个函数:有效负载大小达到6MB,批处理窗口达到其最大值,或者批处理大小达到其最大值。使用批处理窗口,可以增加每次调用传递给函数的平均记录数。当您希望减少调用次数并优化成本时,这将非常有用


您可以使用来限制lambda函数的最大并发性。如果lambda函数不一定非要为sqs,则另一种方法是使用批处理窗口的kinesis选项。如果lambda函数不一定非要为sqs,则可以使用来限制lambda函数的最大并发性,另一种方法是使用批处理窗口选项进行动态显示。我也处于相同的情况,将并发设置为1对我起到了作用。我的方法是在API饱和时,使用统一的随机可见性超时将消息放回,以便平衡消息上的负载。我也处于同样的情况,将并发性设置为1对我起到了作用。我的方法是在API饱和时使用统一的随机可见性超时将消息放回,以便平衡其负载。