請求 Elastic Load Balancing API 的限流 - Elastic Load Balancing

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

請求 Elastic Load Balancing API 的限流

Elastic Load Balancing 會根據區域調節每個 AWS 帳戶的 API 請求。我們這樣做是為了協助服務的效能和可用性。調節可確保對 Elastic Load Balancing API 的請求不超過允許的 API 請求限制上限。無論您呼叫 API 請求還是代您呼叫 API 請求 (例如,由 AWS Management Console 或第三方應用程式呼叫), API 請求都會受到請求限制的約束。

如果您超過 Elastic Load Balancing API 限流限制,您會收到ThrottlingException錯誤碼和Rate exceeded錯誤訊息。

我們建議您準備以正常方式處理限流。如需詳細資訊,請參閱逾時、重試和抖動退避。如果您遇到高度限流,您可以聯絡 AWS 支援 來協助您評估 API 用量和潛在的解決方案。每個案例都會個別評估。 支援 可能會提高您在系統安全限制內的限制,以維持高可用性和可預測的效能。

如何套用限流

Elastic Load Balancing 使用字符儲存貯體演算法來實作 API 限流。透過此演算法,您的帳戶會有一個儲存體,其中包含特定數量的字符。儲存貯體中的字符數量代表您在任何指定秒的限流限制。

Elastic Load Balancing 提供兩組 API 動作。ELB API 第 2 版支援下列類型的負載平衡器:Application Load Balancer、Network Load Balancer 和 Gateway Load Balancer。ELB API 第 1 版支援 Classic Load Balancer。每個 ELB API 版本都有自己的儲存貯體和字符。

代表您呼叫 Elastic Load Balancing API 的服務,例如 Amazon EC2、Amazon ECS、Amazon EC2 Auto Scaling,並 AWS CloudFormation 擁有自己的帳戶層級儲存貯體。這些服務不會從您的儲存貯體使用字符。

請求率限制

透過請求率限制,您可以對提出的 API 請求數量進行調節。您每提出一個請求,就會從儲存貯體中刪除一個字符。例如,非變動 API 動作的字符儲存貯體大小為 40 個字符。一秒內最多可以提出 40 個Describe*請求。如果您在一秒內超過 40 個Describe*請求,系統會調節您,而且該秒內剩餘的請求會失敗。

儲存貯體會自動以設定的速率重新填充。如果儲存貯體低於容量上限,則每秒會新增一組字符數量,直到儲存貯體達到容量上限為止。如果補充字符送達時儲存貯體已滿,則會將其捨棄。儲存貯體不能保留超過其字符數量上限。例如,非變動 API 動作的儲存貯體大小為 40 個字符,而重新填充速率為每秒 10 個字符。如果您在一秒內提出 40 個DescribeLoadBalancers請求,儲存貯體會減少為零 (0) 個字符。我們會每秒將 10 個重新填充字符新增至儲存貯體,直到達到其容量上限 40 個字符為止。這表示如果空儲存貯體在此期間沒有提出任何請求,則需要 4 秒才能達到其最大容量。

您不需要等待儲存貯體完全填滿,即可提出 API 請求。您可以在權杖新增至儲存貯體時使用權杖。如果您立即使用重新填充字符,則儲存貯體不會達到其容量上限。

在所有 Elastic Load Balancing 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, DescribeListenerCertificates, DescribeListeners, DescribeLoadBalancerAttributes, DescribeLoadBalancers, DescribeRules, DescribeSSLPolicies, DescribeTags, DescribeTargetGroupAttributes, DescribeTargetGroups, DescribeTargetHealth Describe* 40 10
變動 AddListenerCertificates, AddTags, CreateListener, CreateRule, CreateTargetGroup, DeleteListener, DeleteLoadBalancer, DeleteRule, DeleteTargetGroup, ModifyListener, 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
GetTrustStoreCaCertificatesBundle, GetTrustStoreRevocationContent 20 4
DescribeTrustStoreAssociations, DescribeTrustStoreRevocations, DescribeTrustStores 40 10

分量重新填充率需要幾秒鐘才能產生一個完整的字符。

監控 API 請求

您可以使用 AWS CloudTrail 來監控 Elastic Load Balancing API 請求。如需詳細資訊,請參閱使用 記錄 Elastic Load Balancing 的 API 呼叫 AWS CloudTrail