【发布时间】:2020-06-08 13:21:42
【问题描述】:
我正在实施一个涉及触发 Lambda 函数的 SQS 的解决方案,该解决方案使用第 3 方 API 来执行一些操作。 该第 3 方 API 每秒请求数有限制,因此我想将我的 Lambda 函数处理的 SQS 消息数量限制在类似的速率。
有没有办法限制 SQS 上每秒可见的消息数或 Lambda 函数每秒的调用数?
[编辑]
在 cmets 中给出了一些关于 AWS Kinesis 的见解之后: 通过处理 Kinesis 参数 Batch Window、Batch 大小和有效负载大小没有精益解决方案,因为 Kinesis 的行为会在任何阈值并达到时触发 lambda 执行: * 给定 N = 每秒我可以通过 3rd 方 api 执行的最大请求数。 * 配置 Batch Window = 1 秒和 Batch Size 为 N,back presurre 应该触发超过 N_MAX 个请求的执行。 * 配置 Batch Windows = 1 secnd 和 Batch Size 为 MAX_ALLOWED_VALUE,将性能不佳,也不能保证每秒执行少于 N 次。
我发现的最简单的解决方案是创建一个固定执行速率为 1 秒的 Lambda,它从 SQS/Kinesis 读取固定数量的消息 N,并将这些消息写入另一个 SQS/Kinesis,将另一个 Lambda 作为端点.
【问题讨论】:
-
可以使用reserved concurrency来限制lambda函数的最大并发
-
如果它不必是
sqs,另一种方法是kinesis和batch window选项。
标签: aws-lambda amazon-sqs quota