限制从 AWS SQS 触发的 AWS Lambda 的并发调用(忽略保留并发)?

2024-04-11

对我来说,一开始这似乎是一个简单的用例,但结果比我预期的要困难得多。

Problem

我有一个 AWS SQS 作为作业队列,触发工作线程 AWS Lambda。然而,由于工作人员 lambda 共享不可扩展的资源,因此将并发运行的 lambda 数量限制为(为了示例)不超过 5 个同时运行的 lambda 非常重要。

很简单,根据管理 Lambda 函数的并发性 https://docs.aws.amazon.com/lambda/latest/dg/configuration-concurrency.html

预留并发还限制了最大并发数 函数,并应用于整个函数

然而,设置Reserved concurrency-property to 5似乎被SQS完全忽略,队列Messages in Flight- 在我的例子中,属性显示接近 20-30 个并发执行,具体取决于放入队列的消息量。

Question

我最接近的解决方案是使用 SQS FIFO 队列并设置消息组ID https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/using-messagegroupid-property.html为随机选择或在 1-5 之间交替的值。但是,由于工作负载不均匀,这并不是最佳选择,因为最好按实际工作负载而不是偶然分配并发性。

我还尝试使用 AWS Step Functions 作为地图状态 https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-map-state.html有一个 MaxConcurrency 参数,该参数似乎在小型作业队列上运行良好,但由于每个状态的输入/输出限制为 32kb,这在我的用例中不可行。

有没有人找到更好或替代的解决方案?还有其他方法吗Reserved concurrency应该使用吗?

Similar

这是我发现的一些类似的问题,但我认为我的问题是不同的,因为我对限制调用总数 https://stackoverflow.com/questions/51202756/aws-lambda-sqs-trigger-throttle-limit,并且(虽然我自己没有尝试过)我不明白为什么来自 S3 或 Kinesis Steam 的触发器 https://stackoverflow.com/questions/42028897/can-i-limit-concurrent-invocations-of-an-aws-lambda其行为与 SQS 不同。


此问题于今天于 2023 年 1 月得到解决。您可以按照本博客中的建议使用最大并发性。我将 FIFO 与 groupid 结合使用,因为我的后端不可扩展,并且我希望不出现任何限制问题,因为 DLQ 上的消息过多没有帮助。

https://aws.amazon.com/blogs/compute/introducing-maximum-concurrency-of-aws-lambda-functions-when-using-amazon-sqs-as-an-event-source/ https://aws.amazon.com/blogs/compute/introducing-maximum-concurrency-of-aws-lambda-functions-when-using-amazon-sqs-as-an-event-source/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

限制从 AWS SQS 触发的 AWS Lambda 的并发调用(忽略保留并发)? 的相关文章

随机推荐