亚马逊AWS官方博客

AWS Lambda 函数现在将处理大量请求时的扩展速度提高到 12 倍



现在,AWS Lambda 将扩展速度提高到 12 倍。现在,每个同步调用的 Lambda 函数每 10 秒钟可扩展 1000 个并发执行,直到所有函数的并发总数达到账户的并发限值为止。此外,一个账户内的每个函数现在可以相互独立扩展,无论如何调用这些函数。这些改进不收取任何额外费用,您无需对现有的函数进行任何配置。

使用传统架构构建可扩展的高性能应用程序可能具有挑战性,通常需要过度预置计算资源或复杂的缓存解决方案,以应对峰值需求和不可预测的流量。很多开发人员之所以选择 Lambda,是因为当应用程序面对不可预测的流量时,它可以按需扩展。

在此更新之前,Lambda 函数最初可以在第一分钟内在账户级扩展 500 到 3000 个并发执行(取决于区域),然后每分钟可扩展 500 个并发执行,直到达到账户的并发限值为止。由于此扩展限值由同一个账户和区域中的所有函数共享,因此如果一个函数遇到流量涌入,可能会影响同一个账户中的其他函数的吞吐量。这样会使工程师的监控工作量增加,因为有些可能突破账户限值,从而产生“吵闹的邻居”场景并导致同一个账户中的其他函数的并发总数减少。

而现在,借助这些扩展改进,流量可能发生很大变化的客户能够比以前更快地达到并发目标。例如,发布突发新闻报道的新闻网站或者推出限时抢购的网上商店会吸引大量的访客涌入。得益于这些改进,他们现在能够将扩展速度提高到以前的 12 倍。

此外,通过将 Amazon AthenaAmazon Redshift 等服务与基于 Lambda 的标量 UDF 结合使用以执行数据扩充或数据转换,客户将从这些改进中受益。这些服务依赖数据批处理,并以数据块的形式将这些数据传递给 Lambda,同时调用多个并行函数。增强的并发扩展行为可确保 Lambda 能够快速扩展并满足服务水平协议(SLA)的要求。

它在实践中的工作原理是什么?
下图显示了一个接收请求并且每 10 秒处理一次请求的函数。账户并发限值设置为 7000 个并发请求,并由同一个账户中的所有函数共享。每个函数的扩展速率固定为每 10 秒 1000 个并发执行。此速率独立于同一个账户中的其他函数,因此您可以更轻松地预测此函数如何根据需要扩展和限制请求。

  • 09:00:00 – 此函数已经运行了一段时间,并且已经有 1000 个并发执行正在接受处理。
  • 09:00:10 – 10 秒钟后,新增了 1000 个请求。此函数可以毫无困难地处理这些请求,因为它每 10 秒可扩展最多 1000 个并发执行。
  • 09:00:20 – 此时也发生了同样的情况:新增了 1000 个请求。
  • 09:00:30 – 此函数现在可以接收 1500 个新请求。由于函数的最大扩展能力为每 10 秒 1000 个请求,因此将会限制其中的 500 个请求。
  • 09:01:00 – 这时,此函数已经在处理 4500 个并发请求。但是新增了 3000 个请求。Lambda 会处理 1000 个新请求并限制 2000 个新请求,因为此函数每 10 秒最多只能扩展 1000 个请求。
  • 09:01:10 – 10 秒钟后,又新增了 2000 个请求,此函数现在可以再处理 1000 个请求。但剩余的 1000 个请求会受到限制,因为此函数每 10 秒最多只能扩展 1000 个请求。
  • 09:01:20 – 现在,此函数正在处理 6500 个并发请求,并有 1000 个请求传入。此函数将处理这些请求中的前 500 个请求,并限制剩余的 500 个请求,因为此函数达到了账户并发限值,即 7000 个请求。请务必记住,您可以在 AWS 管理控制台中创建一个支持票证,以提高账户并发限值。

函数扩展示例

如果您的账户中具有多个函数,这些函数将独立扩展,直到达到账户并发限值总数为止。之后,将会限制所有的新调用。

可用性
默认情况下,为所有函数启用了这些扩展改进。从 11 月 26 日到 12 月中旬,AWS 将逐步向除中国和 GovCloud 区域以外的所有 AWS 区域推出这些扩展改进。

如果希望进一步了解新推出的 Lambda 扩展行为,请阅读 Lambda 扩展行为文档页面

Marcia