Lambda、SQS 和 Cloudwatch - 架构问题

Lambda, SQS and Cloudwatch - Architectural question

我有一个有趣的现实生活情况:

约束条件:

以下是我的解决方案、疑虑和问题:

问题:队列可以 "explode" 这意味着它可以很快填满,处理速度会很慢。

问题:不确定自动缩放标准...它看起来更梦幻。

问题:过于混乱、过于复杂,与从 SQS (1) 移动到 SQS (2) 的消息数量有关。

现在

现在,很明显我的担忧与使用 SQS 和提供数据库的 Lambda 自动缩放有关。 此外,Lambda 应具有足够的扩展性以消耗大量 SQS 消息,但同时应为最终数据库留出一些空闲时间。

我希望我已经很好地解释了情况,并且很乐意就此提出您的建议(很高兴学习!)。

谢谢, 毛罗

我会利用 Lambda Reserved Concurrency

  1. 它限制了 lambda 的最大并发数,这将在队列爆炸时起到节流的作用。
  2. 它保证 lambda 将始终具有 运行 的容量。请注意,它也会降低您的帐户容量。假设您的帐户限制是 100,而您为 lambda 保留的并发数是 10。您的新帐户限制是 90,但是很容易 .

设置:

  1. 首先将预留并发设置为数据库可以轻松处理的值。假设您将其预留并发设置为 10,lambda 加载数据库需要 5 秒,并且您在 2 秒内获得 50 条消息的最大激增。清空队列需要 50 秒。数学:(50 条消息 * 2)* 5 秒/10 个 lambda = 50 秒。
  2. 对于空闲时间,您可以将预留并发设置为 0,这将停止 Lambda 从 运行ning。要自动执行此操作,您可以创建一个 CloudWatch 时间事件,调用 Lambda 将预留并发设置为 0,然后调用另一个事件将预留并发设置回您的限制。