

# 在 API Gateway 中限制对 REST API 的请求以提高吞吐量
<a name="api-gateway-request-throttling"></a>

您可以为 API 配置节流和配额，以帮助防止它们因过多请求而不堪重负。节流和配额都是在尽最大努力的基础上应用的，应被视为目标而不是保证的请求上限。

API Gateway 使用令牌桶算法（其中，一个令牌即一个请求）限制对 API 的请求。具体来说，API Gateway 根据您账户中的所有 API，按区域检查请求提交的速率和突发事件。在令牌桶算法中，突发可以允许这些限制的预定义超出，但在某些情况下，其他因素也可能导致限制超支。

如果请求提交超过稳态请求速率和突增限制，则 API Gateway 将开始限制请求。此时客户可能会收到 `429 Too Many Requests` 个错误响应。捕获此类异常后，客户端能够以限制速率的方式重新提交失败的请求。

作为 API 开发人员，您可以针对各个 API 阶段或方法设置目标限制，以提高账户中所有 API 的整体性能。或者，您可以启用使用计划，根据指定的请求速率和配额设置客户端请求提交的节流。

**Topics**
+ [如何在 API Gateway 中应用限制设置](#apigateway-how-throttling-limits-are-applied)
+ [每个区域的账户级别限制](#apig-request-throttling-account-level-limits)
+ [在使用计划中配置 API 级别限制和阶段级别节流目标](#apigateway-api-level-throttling-in-usage-plan)
+ [配置阶段级别节流目标](#apigateway-stage-level-throttling)
+ [在使用计划中配置方法级别节流目标](#apigateway-method-level-throttling-in-usage-plan)

## 如何在 API Gateway 中应用限制设置
<a name="apigateway-how-throttling-limits-are-applied"></a>

在为 API 配置节流和配额设置之前，最好先了解 API 的节流相关设置的类型以及 API Gateway 如何应用这些设置。

Amazon API Gateway 提供四种基本类型的限制相关设置：
+ *AWS 节流限制*适用于某个区域的所有账户和客户。这些限制设置旨在防止您的 API 和账户因过多请求而不堪重负。这些限制是由 AWS 设置，且客户无法更改。
+ 每个账户限制适用于指定区域内账户中的所有 API。客户可以请求我们放宽账户级别的速率限制 —— 如果具有更短的超时和较小的有效负载的 API，则可以提高限制。要请求增加每个区域的账户级别限制，请联系 [AWS Support 中心](https://console.aws.amazon.com/support/home#/)。有关更多信息，请参阅 [Amazon API Gateway 配额](limits.md)。请注意，这些限制不能高于 AWS 节流限制。
+ 每个 API、每阶段的节流限制应用于某个阶段的 API 方法级别。您可以为所有方法配置相同的设置，也可以为每种方法配置不同的限制设置。请注意，这些限制不能高于 AWS 节流限制。
+ *每客户端限制*应用于将与使用计划关联的 API 密钥用作客户端标识符的客户端。请注意，这些限制不能高于每个账户限制。

API Gateway 按以下顺序应用节流相关设置：

1. 在[使用计划](api-gateway-create-usage-plans.md#api-gateway-usage-plan-create)中为 API 阶段设置的[每个客户端或每个方法限制](#apigateway-method-level-throttling-in-usage-plan)

1. [为 API 阶段设置的每个方法的节流限制](set-up-stages.md#how-to-stage-settings)

1. [每个区域的账户级别限制](#apig-request-throttling-account-level-limits)

1. AWS 区域节流

## 每个区域的账户级别限制
<a name="apig-request-throttling-account-level-limits"></a>

默认情况下，API Gateway 针对每个区域限制 AWS 账户内所有 API 的每秒稳态请求 (RPS)。它还对于每个区域限制一个 AWS 账户中所有 API 的突增（即最大存储桶大小）。在 API Gateway 中，突增限制代表 API Gateway 在返回 `429 Too Many Requests` 错误响应之前可以完成目标的最大并发请求提交数量。有关限制配额的更多信息，请参阅[Amazon API Gateway 配额](limits.md)。

## 在使用计划中配置 API 级别限制和阶段级别节流目标
<a name="apigateway-api-level-throttling-in-usage-plan"></a>

在[使用计划](api-gateway-api-usage-plans.md)中，您可以在 API 或阶段级别为所有方法设置每种方法的节流目标。您可以指定*节流速率*，也即，将令牌添加到令牌桶的速率（以每秒请求数为单位）。您还可以指定*节流突发*，即令牌桶的容量。

您可以使用 AWS CLI、SDK 和 AWS 管理控制台来创建使用计划。有关如何创建使用计划的更多信息，请参阅[API Gateway 中针对 REST API 的使用计划和 API 密钥](api-gateway-api-usage-plans.md)。

## 配置阶段级别节流目标
<a name="apigateway-stage-level-throttling"></a>

您可以使用 AWS CLI、SDK 和 AWS 管理控制台 来创建阶段级别的节流目标。

有关如何使用 AWS 管理控制台创建阶段级节流目标的更多信息，请参阅[修改阶段设置](set-up-stages.md#how-to-stage-settings)。有关如何使用 AWS CLI 创建阶段级节流目标的更多信息，请参阅 [create-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-stage.html)。

## 在使用计划中配置方法级别节流目标
<a name="apigateway-method-level-throttling-in-usage-plan"></a>

您可以在**使用计划**中的方法级别设置其他目标，如 [创建使用计划](api-gateway-create-usage-plans.md#api-gateway-usage-plan-create) 中所示。在 API Gateway 控制台中，通过在**配置方法限制**设置中指定 `Resource=<resource>` 和 `Method=<method>` 来设置这些限制。例如，对于 [PetStore 示例](api-gateway-create-api-step-by-step.md)，您可以指定 `Resource=/pets` 和 `Method=GET`。