【问题标题】:How to control event handling rate with a serverless stack如何使用无服务器堆栈控制事件处理率
【发布时间】:2021-04-20 19:44:49
【问题描述】:

我必须获取一个限制为几百请求/分钟的外部 API,以处理未知数量的事件:上周事件(我存储为 dynamoDB 对象的事件),并使用每个事件调用此 API .

我的第一个想法是做以下事情:

  • 从 dynamo 获取特定日期的所有事件(但我可以获取更少)
  • 将这些事件放入 SQS 队列中
  • 让 SQS 事件触发另一个 lambda,其保留并发设置足够低(假设为 2),它将请求 API。 由于 lambda 的持续时间约为 100 毫秒,我在这里最多可以有 20 个请求/秒吗?

我的逻辑在这里正确吗?

谢谢。

【问题讨论】:

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


    【解决方案1】:

    我认为您的解决方案通常是有道理的。您应该注意的另一件事是 SQS 队列上的 VisibilityTimeout。这基本上意味着

    隐藏已读取 ${VisibilityTimeout} 秒的任何内容,然后再使其可见以供再次处理

    请记住,如果您在 Lambda 中遇到错误,队列消息将仅保留在队列中。如需更多信息,请联系see this article,我觉得这很有帮助。

    如果您的外部 API 仍然遇到限制问题,您可以采取的另一种方法是设置一个 CloudWatch 事件,该事件每隔一段时间(比如说每 5 分钟)唤醒一次并显式调用您的 lambda。您需要改造您的 Lambda 以显式读取队列中的消息,然后处理它们。这将使您能够使用 SQS SDK 上的receiveMessage method 对“sip”消息进行更多控制。

    【讨论】:

      猜你喜欢
      • 2010-11-20
      • 1970-01-01
      • 2017-01-31
      • 2014-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-04
      相关资源
      最近更新 更多