

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 弹性负载均衡 API 的请求节流
<a name="elb-api-throttling"></a>

Elastic Load Balancing 会根据每个区域限制其对每个 Amazon 账户的 API 请求。这是为了帮助提高服务的性能和可用性。节流可确保对弹性负载均衡 API 的请求不会超过允许的最大 API 请求限制。无论您调用还是代表您调用 API 请求（例如，由或第三方应用程序调用），API 请求均受请求限制的约束。 Amazon Web Services 管理控制台 

如果超出弹性负载均衡 API 的节流限制，您将会收到 `ThrottlingException` 错误代码和 `Rate exceeded` 错误消息。

建议您做好准备，以从容地处理节流。有关更多信息，请参阅[超时、重试和回退并抖动](https://www.amazonaws.cn/builders-library/timeouts-retries-and-backoff-with-jitter/)。如果您遇到严重的限制，可以联系 Amazon Web Services 支持 以帮助您评估您的 API 使用情况和潜在的解决方案。每个案例都经过单独评估。 Amazon Web Services 支持 可能会在系统的安全限制范围内增加您的限制，以保持高可用性和可预测的性能。

## 如何应用节流
<a name="how-throttling-works"></a>

弹性负载均衡使用[令牌存储桶算法](https://en.wikipedia.org/wiki/Token_bucket)来实现 API 节流。使用此算法，您的账户拥有一个持有特定数量的*令牌*的*存储桶*。存储桶中的令牌数量代表您在任意一秒的节流限制。

弹性负载均衡提供两套 API 操作。ELB API 版本 2 支持以下类型的负载均衡器：应用程序负载均衡器、网络负载均衡器和网关负载均衡器。ELB API 版本 1 支持经典负载均衡器。每个 ELB API 版本都有自己的存储桶和令牌。

代表您调用 Elastic Load Balancing API 的服务，例如亚马逊 EC2、Amazon ECS、Amazon EC2 Auto Scaling，并且 Amazon CloudFormation 拥有自己的账户级存储桶。这些服务不会消耗您存储桶中的令牌。

## 请求速率限制
<a name="rate-based-throttling"></a>

使用请求速率限制时，您发出的 API 请求数量会受到节流。您发出的每个请求都会从存储桶中删除一个令牌。例如，非变异 API 操作的令牌存储桶容量为 40 个令牌。您在一秒内最多可以发出 40 个 `Describe*` 请求。如果您在一秒钟内发出的 `Describe*` 请求超过 40 个，则会被节流，同时该秒内剩余的请求将会失败。

存储桶会以设定的速率自动填充。如果存储桶的容量低于其最大容量，则每秒会将一定数量的令牌退回该存储桶，直至达到其最大容量为止。如果重填令牌到达时存储桶已满，则这些令牌将被丢弃。存储桶中的令牌数量不能超过其最大数量。例如，非变异 API 操作的存储桶容量为 40 个令牌，重填速率为每秒 10 个令牌。如果您在一秒钟内发起 40 个 `DescribeLoadBalancers` 请求，存储桶中的令牌将被消耗至零（0）。我们会按每秒 10 个令牌的速度重填该存储桶，直至达到 40 个令牌的最大容量为止。因此，如果在此期间没有发出任何请求，一个空存储桶需要 4 秒才会达到其最大容量。

您无需等存储桶完全填满才能继续发起 API 请求。您可以在令牌添加到存储桶的同时使用这些令牌。如果您立即使用重填令牌，存储桶就不会达到最大容量。

所有弹性负载均衡 API 操作都共享同一个账户级别的节流限制。该账户级别存储桶的容量为 40 个令牌，重填速率为每秒 10 个请求令牌。

## 请求令牌存储桶的容量与重填速率
<a name="bucket-capacity-and-refill-rate"></a>

API 操作分为若干类别来实施请求速率限制。每个类别都有自己的限制。

**类别**
+ **变异操作**：用于创建、修改或删除资源的 API 操作。此类别通常包括所有未归类为*非变异操作*的 API 操作。此类操作的节流限制低于非变异 API 操作。
+ **非变异操作**：用于检索资源相关数据的 API 操作。此类 API 操作通常具有最高的 API 节流限制。
+ **资源密集型操作**：完成时间最长、消耗资源最多的变异类 API 操作。此类操作的节流限制比变异操作更低。此类操作的节流独立于其他变异操作。
+ **注册操作**：用于注册或注销目标的 API 操作。此类 API 操作的节流独立于其他变异操作。
+ **未分类操作**：此类 API 操作拥有独立的令牌存储桶容量和重填速率，即使原本属于上述其他类别亦不例外。

下表显示了各类别请求令牌存储桶的默认容量和重填速率。


| 类别 | ELBv2 行动 | ELBv1 行动 | 存储桶容量 | 重填速率（每秒） | 
| --- | --- | --- | --- | --- | 
| 资源密集型 | CreateLoadBalancer, SetSubnets | CreateLoadBalancer, AttachLoadBalancerToSubnets, DetachLoadBalancerFromSubnets, EnableAvailabilityZonesForLoadBalancer, DisableAvailabilityZonesForLoadBalancer | 10 | 0.2 † | 
| 注册 | RegisterTargets, DeregisterTargets | RegisterInstancesWithLoadBalancer, DeregisterInstancesFromLoadBalancer | 20 | 4 | 
| 非变异 | DescribeAccountLimits, DescribeCapacityReservation, DescribeListenerAttributes, DescribeListenerCertificates, DescribeListeners, DescribeLoadBalancerAttributes, DescribeLoadBalancers, DescribeRules, DescribeSSLPolicies, DescribeTags, DescribeTargetGroupAttributes, DescribeTargetGroups, DescribeTargetHealth | Describe\* | 200 | 50 | 
| 变异 | AddListenerCertificates, AddTags, CreateListener, CreateRule, CreateTargetGroup, DeleteListener, DeleteLoadBalancer, DeleteRule, DeleteTargetGroup, ModifyCapacityReservation, ModifyIpPools, ModifyListener, ModifyListenerAttributes, ModifyLoadBalancerAttributes, ModifyRule, ModifyTargetGroup, ModifyTargetGroupAttributes, RemoveListenerCertificates, RemoveTags, SetIpAddressType, SetRulePriorities, SetSecurityGroups | AddTags, ApplySecurityGroupsToLoadBalancer, ConfigureHealthCheck, CreateAppCookieStickinessPolicy, CreateLbCookieStickinessPolicy, CreateLoadBalancerListener, CreateLoadBalancerPolicy, Delete\*, ModifyLoadBalancerAttributes, RemoveTags, SetLoadBalancer\* | 20 | 3 | 

下表显示了未分类的请求令牌存储桶的默认容量和充值费率。 ELBv2


| ELBv2 行动 | 存储桶容量 | 重填速率（每秒） | 
| --- | --- | --- | 
| CreateTrustStore | 10 | 0.2 † | 
| AddTrustStoreRevocations, DeleteSharedTrustStoreAssociation, DeleteTrustStore, ModifyTrustStore, RemoveTrustStoreRevocations | 10 | 0.2 † | 
| GetResourcePolicy, GetTrustStoreCaCertificatesBundle, GetTrustStoreRevocationContent | 20 | 4 | 
| DescribeTrustStoreAssociations, DescribeTrustStoreRevocations, DescribeTrustStores | 40 | 10 | 

**†** 部分重填速率是指需要几秒钟才能生成一个完整的令牌。

## 监控 API 请求
<a name="monitoring-api-requests"></a>

您可以使用 Amazon CloudTrail 来监控您的 Elastic Load Balancing API 请求。有关更多信息，请参阅 [使用记录 Elastic Load Balancing 的 API 调用 Amazon CloudTrail](cloudtrail-logs.md)。