Marcia 是 Amazon Web Services 的首席开发倡导者,在软件行业构建和扩展应用程序方面拥有20年的工作经验。她热衷于设计能够充分利用云并拥抱DevOps文化的系统。最近她发表了一篇博文,带来了一个AWS Lambda重大改进:扩展速度提升了 12 倍!
1、Lambda函数更新,扩展速度倍增
现在,AWS Lambda 的扩展速度提高了 12 倍。每个同步调用的 Lambda 函数现在每 10 秒扩展 1000 个并发执行,直到所有函数的聚合并发达到账户的并发限制。此外,帐户中的每个功能现在都可以彼此独立地扩展,无论这些功能是如何调用的。这些改进无需额外成本,并且无需在现有功能中进行任何配置。
图片
使用传统架构构建可扩展且高性能的应用程序可能具有挑战性,通常需要过度配置计算资源或复杂的缓存解决方案来满足峰值需求和不可预测的流量。许多开发人员选择 Lambda 是因为当应用程序面临不可预测的流量时,它可以按需扩展。
在此更新之前,Lambda 函数最初可以在第一分钟内在账户级别扩展 500-3,000 个并发执行(取决于区域),然后每分钟扩展 500 个并发执行,直到达到账户的并发限制。
由于此扩展限制由同一账户和区域中的所有功能共享,因此如果某个功能遇到流量涌入,可能会影响同一账户中其他功能的吞吐量。这增加了监控一些可能超出帐户限制的功能的工程工作量,从而导致嘈杂的邻居场景并降低同一帐户中其他功能的总体并发性。
现在,通过这些扩展改进,流量变化较大的客户可以比以前更快地达到并发目标。例如,发布突发新闻报道的新闻网站或进行限时抢购的在线商店将迎来大量访问者涌入。由于这些改进,它们现在的扩展速度比以前快了 12 倍。
此外,使用Amazon Athena和Amazon Redshift等服务以及基于Lambda 的标量 UDF来执行数据丰富或数据转换的客户将受益于这些改进。这些服务依赖于批处理数据并将其分块传递给 Lambda,同时调用多个并行函数。增强的并发扩展行为确保 Lambda 可以快速扩展并满足服务级别协议 (SLA) 要求。
2、实践中究竟如何?
下图显示了一个函数每 10 秒接收并处理请求。帐户并发限制设置为 7,000 个并发请求,并在同一帐户中的所有功能之间共享。每个函数的扩展速率固定为每 10 秒 1,000 个并发执行。此速率独立于同一帐户中的其他功能,这样可以更轻松地预测此功能将如何扩展和限制请求(如果需要)。
图片
- 09:00:00 – 该函数已经运行了一段时间,并且已经有 1,000 个并发执行正在处理。
- 09:00:10 – 十秒后,又爆发了 1,000 个新请求。该函数可以毫无问题地处理它们,因为该函数每 10 秒最多可以扩展至 1,000 个并发执行。
- 09:00:20 – 同样的情况也发生在这里:一千个新请求。
- 09:00:30 – 该函数现在收到 1,500 个新请求。由于函数的最大扩展容量为每 10 秒 1,000 个请求,因此其中 500 个请求将受到限制。
- 09:01:00 – 此时,该函数已处理 4,500 个并发请求。但突然出现了 3,000 个新请求。Lambda 处理 1,000 个新请求并限制 2,000 个,因为该函数每 10 秒可以扩展到 1,000 个请求。
- 09:01:10 – 10 秒后,又爆发了 2,000 个请求,该函数现在可以再处理 1,000 个请求。但是,其余 1,000 个请求会受到限制,因为该函数可以扩展到每 10 秒 1,000 个请求。
- 09:01:20 – 现在该函数正在处理 6,500 个并发请求,并且有 1,000 个传入请求。其中前 500 个请求得到处理,但其他 500 个请求受到限制,因为该函数达到了 7,000 个请求的帐户并发限制。请务必记住,可以通过在AWS 管理控制台中创建支持票证来提高账户并发限制。
如果你的账户中有多个函数,这些函数将独立扩展,直到达到账户总并发限制。之后,所有新的调用都将受到限制。
3、可用范围及具体规则
默认情况下,所有功能都会启用这些扩展改进。据悉,从去年 11 月 26 日开始到 12 月中旬,AWS 将逐步向除中国和 GovCloud 区域之外的所有 AWS 区域推出这些扩展改进。
具体规则如下:
Lambda不会累积并发扩展率中未使用的部分。这意味着,在任何时刻,你的扩展速率始终最大为1000个并发单元。例如,如果在10秒的时间间隔内没有使用任何可用的1000个并发单元,那么在接下来的10秒间隔内就不会增加1000个额外的单元。在接下来的10秒内,并发扩展率仍然是1000。
只要你的函数继续接收越来越多的请求,Lambda就会以最快的速度扩展,达到帐户的并发限制。可以通过配置保留并发来限制单个函数可以使用的并发量。如果请求的速度快于函数的扩展速度,或者函数处于最大并发状态,那么其他请求将失败,并出现节流错误(429状态代码)。
4、总结
以前,Lambda 函数在账户级别共享扩展限制,如果一个函数遇到高流量,则会导致潜在的吞吐量问题。AWS Lambda 函数更新后,扩展速度提高了 12 倍。现在,每个函数每 10 秒扩展 1,000 个并发执行,独立于同一账户中的其他函数,直到达到账户的聚合并发限制。此更新无需额外成本或配置更改,通过允许快速扩展,使面临不可预测流量的应用程序受益匪浅。
新的独立扩展系统可以让函数更快地达到并发目标,这对于突发新闻或秒杀闪购等场景将会更加出色。
此外,利用 Lambda 进行数据处理的 Amazon Athena 和 Amazon Redshift 等服务将因此次更新而获得性能增强。这些改进默认启用,并将推广到除中国和 GovCloud 区域之外的所有 AWS 区域。