View a markdown version of this page

速率限制強制執行 - Amazon Bedrock AgentCore

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

速率限制強制執行

本主題說明閘道如何在執行時間評估和強制執行速率限制,包括與其他閘道功能的互動、限流回應格式和可觀測性。

與閘道規則的互動

閘道會在閘道規則之前評估速率限制。如果速率限制調節請求,請求永遠不會到達規則評估階段。

堆疊語意

當請求套用多個速率限制時,閘道會使用 AND 邏輯 — 所有速率限制都必須通過才能繼續請求。如果任何單一速率限制拒絕請求,閘道會調節請求。

項目比對和特異性

當速率限制有多個項目時,閘道會為解析的維度值選取最特定的相符項目:

  • 精確的值比對優先於*項目。

  • * 值表示「將此速率套用至此維度的所有值」,它充當預設項目。

  • 對於多維度速率限制,閘道會使用漸進式結尾退避:它會先嘗試完全相符,然後一次以*一個維度取代結尾維度,直到找到相符項目為止。

下列範例顯示解析值為 dimensionKeys: ["targetName", "toolName"]時,項目如何與 比對速率限制["my-target", "readData"]:

項目維度 相符項目? 為什麼

{"targetName": "my-target", "toolName": "readData"}

是 (先勾選)

兩個維度完全相符。最具體。

{"targetName": "my-target", "toolName": "*"}

是 (檢查秒數)

第一個維度的完全相符,第二個維*度的完全相符。

{"targetName": "", "toolName": ""}

是 (最後勾選)

預設項目。最不具體。

第一個相符的項目獲勝。如果沒有符合的項目 (且不存在*預設值),則會略過該請求的速率限制。

評估順序

閘道會依下列順序評估速率限制:

  1. 閘道會先使用更多維度索引鍵評估速率限制 (更具體的限制優先)。

  2. 在相同數量的維度內,閘道會先以更緊密 (較低) 的速率評估速率限制。

  3. 第一次拒絕時評估短路 — 閘道不會評估剩餘速率限制。

與服務受管限制的互動

閘道會強制執行客戶定義的費率限制和服務受管限制。任何請求的有效速率都是兩者的最低值:

  • 閘道會先評估客戶定義的速率限制。

  • 如果請求通過客戶限制,則會評估服務受管限制。

  • 從任一來源拒絕會導致限流。

調節回應

調節請求時,閘道會傳回通訊協定特定的錯誤回應,其中包含回應內文中的retryAfter值。

HTTP 通訊協定:

{ "error": "Rate limit exceeded", "success": false, "limitKey": "rl-abc123/targetName=my-target", "metric": "requests", "retryAfter": 1 }

MCP 通訊協定 (JSON-RPC):

{ "jsonrpc": "2.0", "id": "request-1", "error": { "code": -32003, "message": "Rate limit exceeded", "data": { "limitKey": "rl-abc123/targetName=my-target", "metric": "requests", "retryAfter": 1 } } }

OpenAI 相容通訊協定:

{ "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "429", "limitKey": "rl-abc123/qualifiedModelId=anthropic.claude-3-sonnet", "metric": "tokens", "retryAfter": 60 } }

人類相容通訊協定:

{ "type": "error", "error": { "type": "rate_limit_error", "message": "Rate limit exceeded", "limitKey": "rl-abc123/qualifiedModelId=anthropic.claude-3-sonnet", "metric": "tokens", "retryAfter": 60 } }

retryAfter 欄位指出發起人在重試之前應該等待多少秒。直接在用戶端重試邏輯中使用此值。

傳播時間

速率限制變更 (建立、更新、刪除) 會在 30 秒內傳播到資料平面。在傳播期間:

  • 在傳播完成之前,不會強制執行新的速率限制。

  • 更新速率限制會繼續強制執行先前的組態,直到更新傳播為止。

  • 刪除的速率限制會繼續強制執行,直到刪除傳播為止。

強制執行準確性和最終一致性

速率限制強制執行最終是一致的,而不是確切的。強制執行準確性是在限制開始接收流量後大約的時刻,並且會隨著流量的持續而改善。因此,您觀察到的準確性取決於您的流量模式。

預期會發生下列行為:

  • 冷限制一開始會過度允許。冷限制是新建立或沒有最近流量的冷限制。在短暫的初始期間內,閘道可能會在強制執行收斂之前過度認可 (允許比設定速率更多的請求)。一旦限制低於連續流量,準確度就會提高,並且觀察到的調節速率會趨近於設定的速率。

  • 持續的流量會準確強制執行,但短暫爆量可能不會強制執行。針對冷限制的短暫暴增可以通過,而不會受到調節。系統會強制執行與持續流量相同的傳送速率,因為準確度會隨著限制暖機而提高。若要觀察或示範強制執行,請將持續流量傳送至限制幾分鐘,而不是單一短暫高載。例如,對於每秒 4 個請求的限制,閘道可能不會調節第一秒的第 5 個請求。如果您持續每秒傳送 5 個請求,您會在限制暖機後持續看到額外請求受到調節。

  • 非常低的速率不太準確。低於每秒大約 1 個請求的速率 (例如,requests-per-minute限制) 較難以精確強制執行,且會顯示更多可變性。偏好精確強制執行很重要的較高速率,並將非常低的限制視為近似值。

  • 字符限制收斂速度較慢。只有在模型回應之後,Token-per-minute限制才會更新 (協調) 追蹤的用量總計。正在進行數秒或幾分鐘的請求只會保留預算的預估成本,直到完成為止。這會擴展閘道相對於請求限制可能會過度認可請求的時段。如需詳細資訊,請參閱字符速率限制常見問答集。

設計有關公平使用和後端保護的限制。這表示在持續的時段平滑爆增並保護目標免受雜訊鄰近,而不是在超過閾值時封鎖確切的請求號碼。速率限制不是精確的請求精確閘道。速率限制也不是安全界限,如下節所述。

故障開啟行為

閘道使用故障開啟語意進行速率限制評估。下表說明當速率限制系統發生錯誤時的行為:

案例 決策 理由

速率限制服務逾時

允許

可用性優先於強制執行。

維度索引鍵無法從請求中解析

略過 (允許)

速率限制不適用於此請求類型。

速率限制快取重新整理失敗

使用過時的資料重試

使用上次已知組態,直到快取復原為止。

重要

由於故障開啟行為,請勿僅依賴速率限制做為安全界限。使用流量管理和服務品質的速率限制,並使用身分驗證、授權和 WAF 規則進行安全強制執行。

使用 OpenTelemetry 追蹤範圍

閘道會針對評估客戶費率限制的每個請求,在伺服器跨度上發出 OpenTelemetry (OTEL) 跨度屬性。使用這些屬性進行偵錯和監控。

屬性 說明 範例

aws.agentcore.gateway.throttle.customer.decision

此請求的強制執行決策。

allowed 或 throttled

aws.agentcore.gateway.throttle.customer.limit_key

拒絕請求的速率限制rateLimitId的 。只有在決策為 時才會出現throttled。

per-target-rps

aws.agentcore.gateway.throttle.customer.metric

已耗盡的指標類型。只有在決策為 時才會出現throttled。

requests

aws.agentcore.gateway.throttle.customer.matched_entry

觸發調節之項目的逗號分隔已解析維度值。只有在決策為 時才會出現throttled。

my-target,alice

aws.agentcore.gateway.throttle.customer.evaluated

為此請求檢查的所有速率限制儲存貯體的排序清單。每個項目會顯示速率限制 ID、指標和已解析的維度值。同時代表 allowed和 throttled決策。

["per-target-rps:requests:my-target", "per-caller-rpm:requests:alice"]

evaluated 即使允許, 屬性也有助於了解套用至請求的速率限制。清單中的每個項目都遵循格式 {rateLimitId}:{metric}:{resolvedDimVal1,dimVal2,…​}。