AWS Lambda
开发人员指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

Lambda 函数并行执行

并发执行是指在任意指定时间对您的函数代码的执行数量。您可以估计并发执行计数,但是,根据 Lambda 函数是否处理来自基于流的事件源的事件,并发执行计数会有所不同。

  • 基于流的事件源 - 如果您创建 Lambda 函数处理来自基于流的服务(Amazon Kinesis Streams 或 DynamoDB 流)的事件,则每个流的分区数量是并发度单元。如果您的流有 100 个活动分区,则最多会有 100 个 Lambda 函数调用并发运行。然后,每个 Lambda 函数按照分区到达的顺序处理事件。

  • 并非基于流的事件源 - 如果您创建 Lambda 函数处理来自并非基于流的事件源(例如,Amazon S3 或 API 网关)的事件,则每个发布的事件是一个工作单元。因此,这些事件源发布的事件数(或请求数)影响并发度。

    您可以使用以下公式来估算并发 Lambda 函数调用数。

    Copy
    events (or requests) per second * function duration

    例如,考虑一个处理 Amazon S3 事件的 Lambda 函数。假定 Lambda 函数平均用时 3 秒,Amazon S3 每秒发布 10 个事件。因此,您的 Lambda 函数有 30 个并发执行。

请求速率

请求速率是指调用您的 Lambda 函数的速率。对于除了基于流的服务之外的所有服务,请求速率是事件源生成事件的速率。对于基于流的服务,AWS Lambda 按下面所示计算请求速率:

Copy
request rate = number of concurrent executions / function duration

例如,如果一个流上有 5 个活动分区(即,您有 5 个并行运行的 Lambda 函数),并且您的 Lambda 函数用时大概 2 秒,则请求速率为 2.5 个请求/秒。

并发执行限制

默认情况下,AWS Lambda 将给定区域中所有函数的总并发执行数限制为 1000。有关如何调高限制的说明,请参阅以下内容。

任何导致函数的并发执行超出安全限制的调用都将受到限制。在这种情况下,调用不执行您的函数。每个受限制调用都会提高该函数的 Amazon CloudWatch Throttles 指标的值。

根据函数的调用方式,受限制的调用的处理方式会有所不同:

  • 非基于流的事件源 - 这些事件源中的一部分同步调用 Lambda 函数,另一些则异步调用。处理方式各不相同:

    • 同步调用 - 如果函数被同步调用并受限制,则发出调用的应用程序会收到 429 错误,并将负责执行重试操作。这些事件源可能会有内置到集成中的额外重试。例如,CloudWatch Logs 最多会重试失败的批处理五次,在重试之间存在一定的延迟。有关支持的事件源列表以及所用的调用类型,请参阅支持的事件源

      如果通过 Amazon API Gateway 调用 Lambda,则需要确保将 Lambda 响应错误映射到 API 网关 错误代码。如果直接调用该函数 (如使用 RequestResponse 调用模式通过 AWS 软件开发工具包,或者通过 API 网关),则客户端会收到 429 错误,您可以选择重试调用。

    • 异步调用 - 如果您的 Lambda 被异步调用并受到限制,AWS Lambda 会自动重试受限制的事件,最长六个小时,并在重试之间有一定的延迟。在使用异步事件来调用 Lambda 函数之前,会将它们排队。

  • 基于流的事件源 - 对于基于流的事件源 (Amazon Kinesis Streams 和 Amazon DynamoDB 流),AWS Lambda 会轮询流并调用您的 Lambda 函数。当您的 Lambda 函数受到限制时,AWS Lambda 会尝试在数据过期前处理被限制的记录批次。对 Amazon Kinesis Streams 来说,这个时间段可以长达七天。受限制的请求将被视为各分区的阻塞性请求,Lambda 不会从分区中读取任何新记录,直至受限制的记录批次过期或成功。如果流中有多个分区,Lambda 会继续调用不受阻的分区,直至有分区通过。

请求提高并发执行数限制

  1. 打开 AWS Support Center 页面,登录 (如有必要),然后选择 Create case

  2. 对于 Regarding,选择 Service Limit Increase

  3. 对于 Limit Type,选择 Lambda,在表单中填写所有必填字段,然后选择页面底部对应于首选联系方法的按钮。

注意

AWS 可以为您自动提高并发执行数限制,使您的函数能够匹配传入事件率。例如,由 Amazon S3 存储桶触发函数时。

扩展

AWS Lambda 将根据增加的流量动态扩展容量,具体取决于您的账户的并发执行限制。为了处理突增流量,Lambda 将立即根据预定量增加您的并发执行函数,具体取决于在哪个区域执行 (请参阅下表)。

如果默认的并发立即增加量值 (如下表所示) 不足以适应流量的猛增,Lambda 将继续增加并发函数执行数量 (每分钟 500 次),直到达到账户的安全限制,或并发执行的函数数量足以成功处理增加的负载。

注意

由于 Lambda 依赖 Amazon EC2 针对已启用 VPC 的 Lambda 函数提供弹性网络接口,这些函数在扩展时也会受制于 Amazon EC2 的速率限制。如果您的 Amazon EC2 速率限制使得已启用 VPC 的函数无法在每分钟内添加 500 个并发调用,请根据前一部分的说明请求提高限制:请求提高并发执行数限制

超过此速率后,您的应用程序 (即利用全部并发立即增加量的应用程序) 应该可以通过客户端重试和回退处理 Amazon EC2 限制 (502 EC2ThrottledException)。有关更多详情,请参阅 AWS 中的错误重试和指数回退

下表按区域列出了并发立即增加量:

区域 并发立即增加量 (函数执行)
亚太区域(东京) 1000
亚太区域(首尔) 500
亚太地区(孟买) 500
亚太区域(新加坡) 500
亚太区域(悉尼) 500
加拿大 (中部) 500
欧洲(法兰克福) 1000
欧洲 (伦敦) 500
欧洲(爱尔兰) 3000
AWS GovCloud (US) 500
美国东部(俄亥俄州) 500
美国西部(加利福尼亚北部) 500
美国西部(俄勒冈) 3000
美国东部(弗吉尼亚北部) 3000
南美洲(圣保罗) 500

建议阅读材料

如果您是首次接触 AWS Lambda,我们建议您通读“工作原理”部分中的主题以熟悉 Lambda。下一个主题为出错时重试

在您阅读了“工作原理”部分中的所有主题之后,我们建议您查看 构建 Lambda 函数,尝试入门练习,然后探讨使用案例。每个使用情形都提供了设置端到端体验的分步说明。