为函数配置预留并发
在 Lambda 中,并发指您的函数当前正在进行的请求数。有两种类型的并发控件可用:
-
预留并发 – 指分配给函数的最大并发实例数。当一个函数有预留并发时,任何其他函数都不可以使用该并发。对于确保最关键的函数始终具有足够的并发性来处理传入请求,预留并发非常有用。为函数配置预留并发不产生任何额外费用。
-
预置并发 – 指分配给函数的预初始化执行环境的数量。这些执行环境已准备就绪,可以立即响应传入的函数请求。预置并发对于缩短函数冷启动延迟很有用。配置预置并发会让您的 AWS 账户 产生额外费用。
本主题详细介绍了如何管理和配置预留并发。有关这两种并发控制的概念概述,请参阅预留并发和预置并发。有关配置预置并发的信息,请参阅 为函数配置预置并发。
注意
关联到 Amazon MQ 事件源映射的 Lambda 函数具有默认的最大并发数。对于 Apache Active MQ,最大并发实例数为 5。对于 Rabbit MQ,最大并发实例数为 1。为函数设置预留或预调配的并发不会更改这些限制。要在使用 Amazon MQ 时请求增加默认的最大并发数,请联系 AWS Support。
Sections
配置预留并发
您可以使用 Lambda 控制台或 Lambda API 为函数配置预留并发设置。
为函数预留并发(控制台)
打开 Lamba 控制台的函数页面
。 -
选择要为其预留并发的函数。
-
选择 Configuration(配置),然后选择 Concurrency(并发)。
-
在并发下,选择编辑。
-
选择预留并发。输入要为该函数预留的并发数量。
-
选择 Save(保存)。
您最多可以预留的单位数量为非预留账户并发值减去 100。剩余 100 个单位的并发可用于不会使用预留并发的函数。例如,如果您的账户的并发上限为 1000,则不能将所有 1000 个单位的并发预留给单个函数。
为一个函数预留并发会影响可用于其他函数的并发池。例如,如果您为 function-a
预留 100 个单位的并发,则即使 function-a
不使用所有 100 个单位的预留并发,您账户中的其他函数也必须共享剩余的 900 个单位的并发。
要有意限制函数,请将其预留并发设置为 0。这将停止函数处理任何事件,直到您删除限制。
要使用 Lambda API 配置预留并发,请使用以下 API 操作。
例如,要使用 AWS Command Line Interface(CLI)配置预留并发,请使用 put-function-concurrency
命令。以下命令为名为 my-function
的函数预留 100 个单位的并发:
aws lambda put-function-concurrency --function-name my-function \ --reserved-concurrent-executions 100
您应该会看到类似如下输出:
{ "ReservedConcurrentExecutions": 100 }
准确估计函数所需的预留并发
如果您的函数当前正在提供流量,则可以使用 CloudWatch 指标轻松查看其并发指标。具体而言,ConcurrentExecutions
指标显示了您账户中每个函数的并发调用数。
前面的图表显示,在给定的任何时间,此函数平均处理 5 到 10 个并发请求,峰值通常为 20 个请求。假设您的账户中还有许多其他函数。如果此函数对您的应用程序至关重要,并且您不想丢弃任何请求,请使用大于或等于 20 的数字作为预留的并发设置。
请注意,您也可以使用以下公式计算并发:
Concurrency = (average requests per second) * (average request duration in seconds)
将每秒的平均请求数与平均请求持续时间(以秒为单位)相乘可以粗略估计您需要预留多少并发。您可以使用 Invocation
指标估算每秒的平均请求数,并使用 Duration
指标估计平均请求持续时间(以秒为单位)。有关更多信息,请参阅 将 CloudWatch 指标与 Lambda 结合使用。
您还应该熟悉上游和下游吞吐量限制。虽然 Lambda 函数可随负载无缝扩展,但上游和下游依赖项可能不具有相同的吞吐量。如果您需要限制函数可以扩展的幅度,可以为函数配置预留并发。