全域速率限制
雖然分散式斷路器在控制分散式系統的吞吐量方面通常非常有效,但有時它並不是很有效,而需要全域速率限制。最常見的情況是大量主機轉發到少量主機,且平均請求延遲較低(例如,與資料庫伺服器的連線/請求)。如果目標主機開始備份,下游主機會壓垮上游叢集。在這種情況下,很難在每個下游主機上設定足夠嚴格的斷路器限制,以使系統在典型請求模式下正常運作,但仍能防止系統開始故障時的連鎖故障。全域速率限制是解決此問題的好方法。
Envoy 提供兩種全域速率限制實作:
每個連線或每個 HTTP 請求速率限制檢查。
基於配額,並定期回報負載,允許在多個 Envoy 執行個體之間公平共享全域速率限制。此實作適用於每秒請求負載較高、可能無法在所有 Envoy 執行個體之間均勻平衡的大型 Envoy 部署。
每個連線或每個 HTTP 請求速率限制
Envoy 直接與全域 gRPC 速率限制服務整合。雖然可以使用任何實作已定義的 RPC/IDL 協定的服務,但 Envoy 提供了一個以 Go 編寫、使用 Redis 後端的參考實作。Envoy 的速率限制整合具有以下功能:
網路層級速率限制篩選器:對於安裝篩選器的監聽器上的每個新連線,Envoy 都會呼叫速率限制服務。設定指定要執行速率限制的特定網域和描述符集。這最終會影響每個監聽器傳輸的每秒連線數的速率限制。設定參考。
HTTP 層級速率限制篩選器:對於安裝篩選器且路由表指定應呼叫全域速率限制服務的監聽器上的每個新請求,Envoy 都會呼叫速率限制服務。可以對所有到目標上游叢集的請求以及從起始叢集到目標叢集的所有請求執行速率限制。設定參考
速率限制服務設定。
請注意,Envoy 也支援本機速率限制。本機速率限制可以與全域速率限制結合使用,以減少全域速率限制服務上的負載。例如,本機權杖桶速率限制可以吸收非常大的負載突發,否則可能會壓垮全域速率限制服務。因此,速率限制會分兩個階段套用。初始粗略限制由權杖桶限制執行,然後細粒度的全域限制完成作業。
基於配額的速率限制
目前無法使用速率限制服務的開源參考實作。速率限制配額擴充目前可以與 Google Cloud 速率限制服務搭配使用。
基於配額的全域速率限制只能套用至 HTTP 請求。Envoy 將使用 HTTP 篩選器設定,將請求和請求配額指派整理成桶狀並從速率限制配額服務請求。
速率限制配額服務設定。