微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用无服务器堆栈控制事件处理率

如何解决如何使用无服务器堆栈控制事件处理率

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

我的第一个想法是执行以下操作:

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

我的逻辑在这里正确吗?

谢谢。

解决方法

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

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

请记住,如果您的 Lambda 出现错误,队列消息将仅保留在队列中。有关更多信息,请参阅 see this article,我觉得这很有帮助。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。