

# 为函数配置预留并发
<a name="configuration-concurrency"></a>

在 Lambda 中，[并发](lambda-concurrency.md)指您的函数当前正在进行的请求数。有两种类型的并发控件可用：
+ 预留并发 – 这将设置分配给您的函数的最大和最小并发实例数。当一个函数有预留并发时，任何其他函数都不可以使用该并发。对于确保最关键的函数始终具有足够的并发性来处理传入请求，预留并发非常有用。此外，预留并发可用于限制并发，以防止下游资源（如数据库连接）不堪重负。预留并发既充当下限，也充当上限，它专门为您的函数预留指定的容量，同时也防止其超出该限制扩展。为函数配置预留并发不产生任何额外费用。
+ 预置并发 – 指分配给函数的预初始化执行环境的数量。这些执行环境已准备就绪，可以立即响应传入的函数请求。预置并发有助于减少函数的冷启动延迟，旨在使函数具有两位数毫秒的响应时间。通常，交互式工作负载从该功能中获益最大。这些是用户发起请求的应用程序（例如 Web 和移动应用程序），并且对延迟最敏感。异步工作负载（例如数据处理管线）经常对延迟不太敏感，因此通常不需要预置并发。配置预置并发会让您的 AWS 账户 产生额外费用。

本主题详细介绍了如何管理和配置预留并发。有关这两种并发控制的概念概述，请参阅[预留并发和预置并发](https://docs.aws.amazon.com/lambda/latest/dg/lambda-concurrency.html#reserved-and-provisioned)。有关配置预置并发的信息，请参阅 [为函数配置预置并发](provisioned-concurrency.md)。

**注意**  
关联到 Amazon MQ 事件源映射的 Lambda 函数具有默认的最大并发数。对于 Apache Active MQ，最大并发实例数为 5。对于 Rabbit MQ，最大并发实例数为 1。为函数设置预留或预调配的并发不会更改这些限制。要在使用 Amazon MQ 时请求增加默认的最大并发数，请联系 支持。

**Topics**
+ [配置预留并发](#configuring-concurrency-reserved)
+ [准确估计函数所需的预留并发](#estimating-reserved-concurrency)

## 配置预留并发
<a name="configuring-concurrency-reserved"></a>

您可以使用 Lambda 控制台或 Lambda API 为函数配置预留并发设置。

**为函数预留并发（控制台）**

1. 打开 Lamba 控制台的[函数页面](https://console.aws.amazon.com/lambda/home#/functions)。

1. 选择要为其预留并发的函数。

1. 选择 **Configuration**（配置），然后选择 **Concurrency**（并发）。

1. 在**并发**下，选择**编辑**。

1. 选择**预留并发**。输入要为该函数预留的并发数量。

1. 选择**保存**。

您最多可以预留的单位数量为**非预留账户并发**值减去 100。剩余 100 个单位的并发可用于不会使用预留并发的函数。例如，如果您的账户的并发上限为 1000，则不能将所有 1000 个单位的并发预留给单个函数。

![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/concurrency-reserve-over-limit.png)


为一个函数预留并发会影响可用于其他函数的并发池。例如，如果您为 `function-a` 预留 100 个单位的并发，则即使 `function-a` 不使用所有 100 个单位的预留并发，您账户中的其他函数也必须共享剩余的 900 个单位的并发。

要有意限制函数，请将其预留并发设置为 0。这将停止函数处理任何事件，直到您删除限制。

要使用 Lambda API 配置预留并发，请使用以下 API 操作。
+ [PutFunctionConcurrency](https://docs.aws.amazon.com/lambda/latest/api/API_PutFunctionConcurrency.html)
+ [GetFunctionConcurrency](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionConcurrency.html)
+ [DeleteFunctionConcurrency](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteFunctionConcurrency.html)

例如，要使用 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
}
```

## 准确估计函数所需的预留并发
<a name="estimating-reserved-concurrency"></a>

如果您的函数当前正在提供流量，则可以使用 [CloudWatch 指标](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html)轻松查看其并发指标。具体而言，`ConcurrentExecutions` 指标显示了您账户中每个函数的并发调用数。

![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/concurrency-concurrent-executions-metrics.png)


前面的图表显示，在给定的任何时间，此函数平均处理 5 到 10 个并发请求，峰值通常为 20 个请求。假设您的账户中还有许多其他函数。**如果此函数对您的应用程序至关重要，并且您不想丢弃任何请求**，请使用大于或等于 20 的数字作为预留的并发设置。

请注意，您也可以使用以下公式[计算并发](https://docs.aws.amazon.com/lambda/latest/dg/lambda-concurrency.html#calculating-concurrency)：

```
Concurrency = (average requests per second) * (average request duration in seconds)
```

将每秒的平均请求数与平均请求持续时间（以秒为单位）相乘可以粗略估计您需要预留多少并发。您可以使用 `Invocation` 指标估算每秒的平均请求数，并使用 `Duration` 指标估计平均请求持续时间（以秒为单位）。有关更多信息，请参阅[将 CloudWatch 指标与 Lambda 结合使用](monitoring-metrics.md)。

您还应该熟悉上游和下游吞吐量限制。虽然 Lambda 函数可随负载无缝扩展，但上游和下游依赖项可能不具有相同的吞吐量。如果您需要限制函数可以扩展的幅度，可以为函数配置预留并发。