本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
弹性负载均衡 API 的请求节流
Elastic Load Balancing 会根据每个区域限制其对每个 Amazon 账户的 API 请求。这是为了帮助提高服务的性能和可用性。节流可确保对弹性负载均衡 API 的请求不会超过允许的最大 API 请求限制。无论您调用还是代表您调用 API 请求(例如,由应用程序或第三方应用程序),API 请求均受请求限制的约束。 Amazon Web Services 管理控制台
如果超出弹性负载均衡 API 的节流限制,您将会收到 ThrottlingException 错误代码和 Rate exceeded 错误消息。
建议您做好准备,以从容地处理节流。有关更多信息,请参阅超时、重试和回退并抖动
如何应用节流
弹性负载均衡使用令牌存储桶算法
弹性负载均衡提供两套 API 操作。ELB API 版本 2 支持以下类型的负载均衡器:应用程序负载均衡器、网络负载均衡器和网关负载均衡器。ELB API 版本 1 支持经典负载均衡器。每个 ELB API 版本都有自己的存储桶和令牌。
代表您调用 Elastic Load Balancing API 的服务,例如亚马逊 EC2、亚马逊 ECS、Amazon A EC2 uto Scaling,并且 Amazon CloudFormation 拥有自己的账户级存储桶。这些服务不会消耗您存储桶中的令牌。
请求速率限制
使用请求速率限制时,您发出的 API 请求数量会受到节流。您发出的每个请求都会从存储桶中删除一个令牌。例如,非变异 API 操作的令牌存储桶容量为 40 个令牌。您在一秒内最多可以发出 40 个 Describe* 请求。如果您在一秒钟内发出的 Describe* 请求超过 40 个,则会被节流,同时该秒内剩余的请求将会失败。
存储桶会以设定的速率自动填充。如果存储桶的容量低于其最大容量,则每秒会将一定数量的令牌退回该存储桶,直至达到其最大容量为止。如果重填令牌到达时存储桶已满,则这些令牌将被丢弃。存储桶中的令牌数量不能超过其最大数量。例如,非变异 API 操作的存储桶容量为 40 个令牌,重填速率为每秒 10 个令牌。如果您在一秒钟内发起 40 个 DescribeLoadBalancers 请求,存储桶中的令牌将被消耗至零(0)。我们会按每秒 10 个令牌的速度重填该存储桶,直至达到 40 个令牌的最大容量为止。因此,如果在此期间没有发出任何请求,一个空存储桶需要 4 秒才会达到其最大容量。
您无需等存储桶完全填满才能继续发起 API 请求。您可以在令牌添加到存储桶的同时使用这些令牌。如果您立即使用重填令牌,存储桶就不会达到最大容量。
所有弹性负载均衡 API 操作都共享同一个账户级别的节流限制。该账户级别存储桶的容量为 40 个令牌,重填速率为每秒 10 个请求令牌。
请求令牌存储桶的容量与重填速率
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* |
40 | 10 |
| 变异 | 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 请求
您可以使用 Amazon CloudTrail 来监控您的 Elastic Load Balancing API 请求。有关更多信息,请参阅 使用记录 Elastic Load Balancing 的 API 调用 Amazon CloudTrail。