【问题标题】:AWS Lambda temporal load balancingAWS Lambda 时间负载均衡
【发布时间】:2020-03-16 03:09:05
【问题描述】:

我有一个 AWS Lambda 函数,我每 1 分钟调用一次,其中包含 >1000 个 SNS 事件。这是一个问题,因为我的帐户并发设置为 3000,所以如果我开始添加更多作业,那么最终我将拥有超过 3000 个并发 Lambda 实例。

每个作业大约需要 2-5 秒才能完成,这意味着在每个 1 分钟的窗口内,并发限制只会在前 5 秒内受到威胁,而在剩下的 55 秒内我将有 0 并发。

如果我为 lambda 设置并发限制(例如 1000),它会处理前 1000 个 SNS 事件,然后在并发释放后自动获取其余事件吗?我是否只需要为实际运行时间而不是等待并发减少所花费的时间付费?

否则,AWS 有没有一种方法可以让我将作业负载分散到 1 分钟的窗口中,以便我可以每隔约 5 秒调用一次 lambda,其中包含作业总数的一个子集?

【问题讨论】:

    标签: concurrency aws-lambda


    【解决方案1】:

    如果我为 lambda 设置并发限制(例如 1000),它会处理前 1000 个 SNS 事件,然后在并发释放后自动获取其余事件吗?我是否只需要为实际运行时间而不是等待并发减少所花费的时间付费?

    是的。设置并发限制在您的用例中肯定会派上用场,并且是可行的方法。这是并发限制实际存在的原因之一:)

    很遗憾,您无法利用 SNS 进行批处理,因为它总是发送一个且唯一的事件。您可以做的是将 SQS 队列与您的 SNS 主题挂钩,并让 Lambda 函数订阅 SQS 队列,然后您可以充分利用批处理(最大批处理大小为 10)减少并发 Lambda 执行的数量,但您仍然需要设置并发限制以确保不会用完所有可用的并发。

    否则,AWS 有没有一种方法可以让我将作业负载分散到 1 分钟的窗口中,以便我可以每隔约 5 秒调用一次 lambda,其中包含作业总数的一个子集?

    不,但由于上述原因,这是不必要的。

    【讨论】:

      猜你喜欢
      • 2014-12-18
      • 1970-01-01
      • 1970-01-01
      • 2018-04-14
      • 2019-07-14
      • 2017-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多