【发布时间】:2019-06-29 14:22:28
【问题描述】:
我们注意到,在设置 AWS lambda 以从 SQS 触发时,很多时候触发会发生几分钟,有时甚至会延迟一小时才能触发。我知道 AWS lambda 会在内部进行轮询,当队列为空时,它可能会进行一些指数退避。
但是,我们有一个调度程序,它每 30 分钟运行一次并将数据推送到队列中。但是,对于 % 的消息,lambda 的触发要晚得多。我们的业务要求它在一分钟内触发。
有没有办法强制 lambda 始终检查队列?另一种方法是使用步进函数,但由于此线程中的另一个答案,这是不可能的 --> How do you run functions in parallel?
我也在考虑将数据推送到 s3 并从 s3 异步触发 lambda 触发器而不是被轮询,但是当我们想要推送大量记录时,s3 没有批处理 api,所以就这样了。
【问题讨论】:
-
您看到的随机延迟可能是由于帐户或 lambda 本身的并发限制。我使用 SQS 触发器已经有一段时间了,老实说,我从来没有经历过超过几秒的延迟。您是否研究过 CloudWatch 指标,特别是 lambda 并发?
-
刚刚检查过。指标显示最大值为 100。我的限制为 5000。
-
hmmm 我很难相信触发器需要长达一个小时,所以当您已经确认它不是并发问题时。您的 SQS 队列中有任何自定义配置吗?你怎么知道有延迟?您是否记录了将消息推送到 SQS 的时间,并且您是否在延迟期间检查了 Lambda CloudWatch?有什么活动吗?
-
如果我在安静的时间发布消息,那么我会收到消息。
标签: amazon-web-services aws-lambda amazon-sqs