AWS Lambda与Amazon SQS的更快投票扩展介绍
由 James Beswick 于 2023年11月6日撰写 发布在 Amazon Simple Queue Service (SQS), AWS Lambda 和 无服务器计算 类别中。
关键要点
AWS Lambda现在可以支持高达五倍的投票扩展速度,针对与Amazon SQS配置的Lambda函数。该功能提高了Lambda和SQS结合时的伸缩性,响应快速的消息处理需求。客户能够通过调整并发限制,以控制Lambda函数的执行数量,避免过载下游服务。今天,AWS宣布,AWS Lambda 支持针对配置了 Amazon Simple Queue ServiceAmazon SQS作为事件源的Lambda工作负载达到五倍的更快投票扩展率。
这一新功能使得使用Lambda和SQS构建事件驱动应用的客户,在SQS队列中的消息突然激增时能够实现更快速的伸缩,降低了为实现更快消息处理而重复配置Lambda函数或SQS队列的必要性。
概述
利用AWS Lambda构建现代事件驱动和消息传递应用的客户,通常会将Amazon SQS作为构建解耦架构的基本组件。Amazon SQS 是一种完全管理的消息队列服务,适用于微服务、分布式系统和无服务器应用。当Lambda函数订阅SQS队列作为事件源时,Lambda会对队列进行投票,检索消息并将其批量发送给函数处理程序进行处理。为了高效消费消息,Lambda检测队列深度的增加,并增加投票处理的进程以处理排队的消息。
一直以来,Lambda最多会每分钟增加60个并发执行,适用于订阅SQS队列的Lambda函数,并在大约20分钟内扩展到最多1250个并发执行。然而,客户反馈称,他们使用Lambda和SQS构建的一些现代事件驱动应用对消息的突发增量非常敏感,这可能导致用户在消息处理上出现明显的延迟。为了充分利用Lambda的能力处理在SQS队列中突发的消息,这些客户需要更快速的Lambda消息投票扩展。
随着今日的宣布,订阅SQS队列的Lambda函数每分钟的扩展速度可以达到300个并发执行,总计最多可扩展到1250个并发执行。这一扩展改进帮助开发者利用Lambda和SQS集成的简易性,以便在突发的消息涌入期间构建能够快速扩展的事件驱动应用。
控制SQS的最大并发Lambda调用
新的扩展速率自动应用于所有使用Lambda和SQS作为事件源的AWS账户。您无需采取任何明确的操作,也无须支付额外的费用。此扩展改进助力客户构建更高性能的Lambda应用,以满足快速的SQS投票扩展需求。为了防止可能使下游依赖项过载的情况,Lambda为客户提供了控制最大并发执行数量的选项,可以通过设置 保留并发 控制函数级别的并发性,和通过 最大并发性 控制事件源级别的并发性。
以下图示展示了您可以使用的设置,以控制SQS事件源的流量。您可以使用保留并发控制函数级别的扩展,并使用最大并发控制事件源扩展。
保留并发 是您希望分配给函数的最大并发执行量。如果某个函数被分配了保留并发,则其他函数无法使用该并发。
AWS建议在您希望确保函数具有足够的并发来快速扩展时使用保留并发。当SQS事件源试图扩展并发Lambda调用,但该函数已达到保留并发定义的阈值时,Lambda服务会限制进一步的函数调用。
这可能导致SQS事件源试图缩减,并减少并发处理的消息数量。根据队列配置,受到限制的消息将被返回队列进行重试,依据保留策略过期,或发送至死信队列DLQ或失败目的地。
最大并发设置则允许您在事件源级别控制并发性。它允许您定义事件源试图发送给Lambda函数的最大并发调用数量。对于配置了多个SQS事件源的单个函数,您可以单独为每个事件源定义最大并发,从而提供更细粒度的控制。在尝试为SQS事件源添加速率控制时,AWS建议您首先评估最大并发控制,因为它提供了更大的灵活性。
保留并发和最大并发是互补的功能,可以结合使用。最大并发有助于防止下游系统的不堪负荷和受限调用,而保留并发则有助于确保函数可用的并发量。

示例场景
假设您的业务需要处理大量来自存储的文档。每隔几小时,您的业务合作伙伴会将大量文档上传至您账户中的S3桶。
为了保证可靠性,您设计了应用程序以便在上传每个文档时向SQS队列发送消息,以便高效处理而不遗漏任何文件。这些文档使用一个Lambda函数进行处理,该函数处理单个文档所需时间约为两秒。
vn加速器试用一小时处理这些文档是一个对CPU要求高的操作,因此您决定每次执行处理一个文档。您希望利用Lambda的能力将并行处理扩展到尽可能多的并发执行环境。您希望Lambda函数能够快速扩展以并行处理这些文档,并在所有文档处理完后迅速缩减到零,以节省成本。
当一个业务合作伙伴上传20万个文档时,20万个消息会被发送到SQS队列中。Lambda函数配置了SQS事件源,并开始从队列中消费消息。
下图展示了在SQS事件源扩展改善之前进行测试场景的结果。正如预期,您可以看到每分钟并发执行增长60,逐步达到900个并发执行,所有消息处理完成大约需要16分钟。
以下图展示了在SQS事件源扩展改善后,同样的测试场景的结果。两个图表使用相同的时间框架,但第二个图表的性能更好。每分钟并发执行增长300,达到1250个并发执行只需4分钟,所有消息的处理时间仅需约8分钟。
部署此示例
使用 示例项目 在您自己的AWS账户中复制此性能测试。遵循READMEmd中的说明,在您的AWS账户中利用AWS Cloud Development Kit (CDK)配置示例项目。
该示例项目被配置为演示处理20万个消息的大规模工作负载。在您的账户中运行此示例项目可能会产生费用。请参阅 AWS Lambda定价 和 Amazon SQS定价。
部署完成后,使用“sqscannon”目录下的应用程序发送20万个消息到SQS队列中或重新配置为其他数量。此过程需要数分钟,以向SQS队列填充消息。所有消息发送完成后,请启用如READMEmd中所述的SQS事件源,并在提供的CloudWatch控制面板中监控相关图表。
新的AWS账户的默认并发配额为1000。如果您尚未请求提高此配额,则并发执行数量上限为此数值。请使用 服务配额 或联系您的账户团队以请求增加并发配额。
安全最佳实践
在授予您的Lambda函数访问SQS队列的权限时,请始终使用最小权限原则。这样可以确保只有特定的函数具备执行特定操作的权限,从而降低潜在攻击面的风险。例如,如果您的函数仅从队列中提取消息,请授予其读取消息的权限,而不要授予其发送新消息的权限。函数执行角色 定义了函数允许对其他资源执行的操作,而 队列访问策略 则定义了可以访问此队列的主体和允许的操作。
使用 服务器端加密SSE 来存储加密的敏感数据在SQS队列中。通过SSE,您的消息始终以加密形式存储,SQS仅在发送给授权消费者时进行解密。SSE使用SQS管理的加密密钥SSESQS或在AWS密钥管理服务中管理的密钥SSEKMS来保护队列中消息的内容。
结论
改进后的Lambda SQS事件源投票扩展能力使得对突发事件驱动工作负载的扩展性能提高了高达五倍,且无需额外费用。这项改进为客户在收到SQS队列中的消息激增时提供了更快的处理能力,同时继续提供灵活性,以限制SQS作为事件源的最大并发调用。
欲获取更多无服务器计算的学习资源,请访问 Serverless Land
标签 贡献, 无服务器计算
一位财务助理争当PETRONAS机器学习冠军 培训与认证博客
PETRONAS 财务助理的机器学习冠军之路关键要点Aiyna Nazieha Muhamad 成为首位获得 PETRONAS Exclusive AWS 虚拟 DeepRacer 竞赛的女子冠军,且...
使用 AWS 的云财务管理技术实施手册CFM TIPs来管理成本 云财务管理
云财务管理技术实施指引CFM TIPs在AWS中的运用关键要点本文介绍了为AWS提供的云财务管理技术实施指引CFM TIPs,旨在帮助组织在有效实施云财务管理实践方面提供系统化的指南。这些指引可以简化...