AWS Lambda临时负载平衡

时间:2019-11-20 11:48:40

标签: concurrency aws-lambda

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

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

如果我为lambda设置了并发限制(例如1000),它将处理前1000个SNS事件,并在并发释放后自动处理剩余的事件吗?而且我将只为实际运行时间付费,而不是为减少并发性花费的时间吗?

否则,有没有一种方法可以使AWS允许我在1分钟的时间范围内分散作业负载,以便我可以每5秒调用一次lambda并包含全部作业的一部分?

1 个答案:

答案 0 :(得分:1)

  

如果我为lambda设置了并发限制(例如1000),它将处理前1000个SNS事件,并在并发释放后自动处理剩余的事件吗?而且我将只为实际运行时间付费,而不是为减少并发性花费的时间吗?

是的。设置并发限制在您的用例中无疑是很方便的,也是解决之道。这就是并发限制实际存在的原因之一:)

不幸的是,您无法利用SNS进行批处理,因为它总是发送一个唯一的事件。您可以做的是用您的SNS主题挂接一个SQS队列,并让Lambda函数订阅SQS队列,然后您就可以利用批处理功能(最大批处理大小为10)减少并发Lambda执行的数量,但是仍然需要设置并发限制,以确保不耗尽所有可用的并发。

  

否则,有没有一种方法可以使AWS允许我在1分钟的时间范围内分散作业负载,以便我可以每5秒调用一次lambda并包含全部作业的一部分?

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

相关问题