【问题标题】:AWS Lambda SQS integration: How to force concurrent lambdasAWS Lambda SQS 集成:如何强制并发 lambda
【发布时间】:2019-05-14 11:27:48
【问题描述】:

目前我正在使用 SQS 队列来触发 Lambda 函数。 我的 Lambda 函数一次只能处理一条 SQS 记录,我想尽快耗尽 SQS 队列

所以我设置了

Delivery Delay: to 0 seconds,

Batch size: to 1

And set Lambda to use unreserved account concurrency 1000

假设情况:一条 SQS 消息被推送到 Lambda,现在正在处理中。然后另一条消息到达 SQS。我们确定会创建一个新的 lambda 来处理该消息吗?

【问题讨论】:

    标签: amazon-web-services aws-lambda amazon-sqs


    【解决方案1】:

    Michael 是对的,正如 AWS 的文件所述

    随着涌入队列的消息增加,AWS Lambda 会自动扩展轮询活动,直到并发函数执行的数量达到 1000、账户并发限制或(可选)函数并发限制,以较低者为准。 Amazon Simple Queue Service 支持 5 个并发函数调用的初始突发,并将并发性每分钟增加 60 个并发调用。

    因此,例如,1000 条消息一次到达队列, 第一分钟只处理 5 个。

    65 个 lambdas 将在第二分钟内同时运行……以此类推

    这非常缓慢且引人注目,尤其是在您的函数长时间运行时

    【讨论】:

      【解决方案2】:

      Lambda 会连续执行,但不会超过并发限制。

      与您的情况一样,您的 SQS 队列一次可能会收到 2000 条消息。 Lambda 会同时运行 1000 个函数,剩下的 1000 个函数只有在之前的执行完成后才会运行。

      所以我认为快速消耗队列的最佳解决方案是编写 lambda 函数来一次处理多条消息并将批量大小更改为 10。

      【讨论】:

      • 谢谢@Manoj Acharya。由于处理时间和内存限制,我无法进行一次调用来处理许多队列记录。我只需要知道 lambdas 将被同时调用,并随着到达 SQS 的消息量(然后立即推送到 lambda)进行缩放,直到达到并发限制。如果确认,我可以标记您的答案已选择
      • 这是确认的。 Lambda/SQS 集成使用有限数量的工作人员从队列中获取消息。最初有 5 个。
      • 感谢@Michael-sqlbot。我在哪里可以了解有关该行为的更多信息?
      • 扩大规模需要时间:aws.amazon.com/blogs/aws/…
      猜你喜欢
      • 2020-06-14
      • 2019-06-29
      • 1970-01-01
      • 2021-03-28
      • 2020-05-17
      • 1970-01-01
      • 2021-12-01
      • 2020-07-28
      • 1970-01-01
      相关资源
      最近更新 更多