AWS Lambda 现在提供了一种方法来控制由 Amazon SQS作为事件源调用的最大并发函数数。设置Maximum Concurrency,开发人员可以确定各个 SQS 队列中处理消息的功能的并发性,从而简化无服务器应用程序的可扩展性。
事件源映射(ESM) 使 Lambda 函数能够订阅 SQS 队列,并根据队列中的消息数量进行缩放。弹性 ESM 轮询队列中的消息并相应地调用 Lambda 函数,同时处理的最大消息数由两种服务的服务限制决定。
尽管使用SQS 作为 Lambda 的事件源是无服务器架构中的常见模式,但确定适当的并发性、可见性超时和maxReceiveCount设置在过去一直是一个挑战。AWS 的解决方案架构师John Lee和Jeetendra Vaidya解释说:
当 SQS 队列中有大量消息时,Lambda 会横向扩展,添加额外的函数来处理消息。扩容会消耗账户中的并发配额。为防止这种情况发生,您可以为各个 Lambda 函数设置预留并发。这确保了指定的 Lambda 函数始终可以扩展到那么多的并发性,但也不能超过这个数字。
AWS 提供了一个包含 SAM 应用程序的存储库来测试Maximum Concurrency。演示应用程序部署了一个运行 10 秒的 Lambda 函数,一个最大并发数为 5 的事件源映射,以及一个可见性超时为 20 秒的 SQS 队列,以模拟具有少量消息的高函数并发。
Yan Cui,云顾问和 AWS 无服务器英雄,评论:这是个好消息!最后,您可以使用 Lambda 遇到的 SQS 过度轮询问题的正确解决方案。以前最好的解决方法是使用 FIFO 队列并使用组 ID 管理并发。很高兴看到官方的解决方案!
Stedi 的无服务器工程师Zac Charles过去称这个问题为“ SQS overpull ”,现在警告说:新的最大并发功能是一个真正的解决方案,这正是 AWS 社区多年来一直想要的。现在它就在这里,您绝对应该使用它,但请注意,如果您的可用并发数达到零,您仍然会遇到 SQS 过度拉取问题。
函数的可用并发数由并发执行配额、总预留并发数和当前正在进行的调用数之间的差值决定。
使用新功能无需支付额外费用。开发人员可以使用控制台、CLI、SAM 或适用于 Lambda 的开发工具包为 Amazon SQS 设置最大并发数,支持的最小值为 2,最大值为 1000。关于作者,雷纳托洛西奥
作为云架构师、技术主管和云服务专家,Renato 拥有丰富的经验。目前,他住在柏林,作为首席云架构师远程工作。他的主要兴趣领域包括......。