【问题标题】:SQS triggering lambda in Serverless has latency无服务器中的 SQS 触发 lambda 存在延迟
【发布时间】:2021-12-07 19:20:36
【问题描述】:

下面有一个用例

  1. StepFunction -> Lambda -> EventBridge 到 SQS 触发 lambda

当消息接收到 Eventbridge 时,它​​将发布到 SQS,SQS 将触发 lambda。我在这里注意到的是,每次推送一些消息时,几乎需要 21 秒才能到达最终的 lambda。

SQS 的配置:

  • 可见性超时:30 秒
  • 死信队列:已启用
  • 延迟交付:0
  • receiveMessageDelay:尝试了短轮询和长轮询

Lambda 在 VPC 内部

当我进行分析时,所有的桥梁都在瞬间发生,但 SQS 触发 Lambda 需要 21 秒。

所有博客都说,它会立即发生,但对我来说没有运气。

不确定我的配置是否错误。任何帮助对我来说都更有价值。

谢谢, 古纳

【问题讨论】:

  • 从 21 秒开始,我可能认为您设置了长轮询(最长 20 秒)。设置Receive message wait time 1 秒怎么样?
  • @shimo,是的,我进行了短轮询和长轮询(0 和 1 和 20)。但对于所有人来说,延迟都是一样的。但是,有时它的工作速度非常快,与短期或长期民意调查无关。
  • 您的工作流程有什么特别的原因吗?能不能去掉一些元素,比如 SQS 队列?
  • 是的,我们更喜欢在信函保留期(最多 4 天)和死信队列的简单设置中使用 SQS

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


【解决方案1】:

经过进一步调查,注意到 SQS 触发 lambda 设置在 serverless 中配置为 maximumBatchingWindow,以指定在调用函数之前收集记录的最长时间(以秒为单位)。批量大小为 1 时不需要。

【讨论】:

    【解决方案2】:

    扩展 Guna 自己的答案,我们遇到了同样的问题,发现原因是记录在案的 SQS 限制,因为我们将 batchSize 配置为 100,maximumBatchingWindow 配置为 1。

    AWS 声明:

    如果您使用批处理窗口并且您的 SQS 队列包含非常低的流量,则 Lambda 可能会等待长达 20 秒,然后再调用您的函数。即使您将批处理窗口设置为低于 20 秒也是如此。

    来源:https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html

    一旦我们删除了batchSizemaximumBatchingWindow 配置设置,SQS-Lambda 调用延迟就会显着降低。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-10
      • 2019-08-24
      • 2020-05-17
      • 2019-11-08
      • 2019-05-02
      • 2020-07-28
      • 2019-04-24
      • 2019-06-10
      相关资源
      最近更新 更多