斷路
斷路是分散式系統的關鍵組件。盡快快速失敗並向下游施加回壓幾乎總是更好。Envoy 網格的主要好處之一是 Envoy 在網路層級強制執行斷路限制,而不是必須獨立設定和編碼每個應用程式。Envoy 支援各種完全分散式(非協調)的斷路類型
叢集最大連線數:Envoy 將建立到上游叢集中所有主機的最大連線數。如果此斷路器溢出,則叢集的 upstream_cx_overflow 計數器將會遞增。所有連線,無論是活動中還是正在排空,都會計入此限制。即使此斷路器已溢出,Envoy 也會確保叢集負載平衡所選取的主機至少分配一個連線。這表示叢集的 upstream_cx_active 計數可能高於叢集最大連線斷路器,上限為
叢集最大連線數 + (叢集中端點數) * (叢集連線池數)
。此上限適用於所有工作執行緒的連線總和。請參閱 連線池,了解叢集可能擁有的連線池數量詳情。叢集最大待處理請求數:在等待就緒連線池連線時,將會排隊的最大請求數。當沒有足夠的上游連線可立即調度請求時,請求會新增至待處理請求清單。對於 HTTP/2 連線,如果未設定 最大並行串流 和 每個連線的最大請求數,所有請求將在同一個連線上多工傳輸,因此只有在尚未建立連線時才會觸發此斷路器。如果此斷路器溢出,則叢集的 upstream_rq_pending_overflow 計數器將會遞增。對於 HTTP/3,與 HTTP/2 的 最大並行串流 等效的是 最大並行串流
叢集最大請求數:在任何給定時間,可以傳送至叢集中所有主機的最大請求數。如果此斷路器溢出,則叢集的 upstream_rq_pending_overflow 計數器將會遞增。
叢集最大活動重試次數:在任何給定時間,可以傳送至叢集中所有主機的最大重試次數。一般來說,我們建議使用 重試預算;但是,如果偏好靜態斷路,則應積極斷開重試。這是為了允許偶發性失敗的重試,但整體重試量不會爆炸並導致大規模的連鎖故障。如果此斷路器溢出,則叢集的 upstream_rq_retry_overflow 計數器將會遞增。
叢集最大並行連線池數:可以同時實例化的最大連線池數。某些功能,例如 原始來源監聽器篩選器,可以建立無限數量的連線池。當叢集耗盡其並行連線池時,它會嘗試回收閒置的連線池。如果無法回收,則斷路器會溢出。這與 叢集最大連線數 不同,因為連線池永遠不會逾時,而連線通常會逾時。連線會自動清除;連線池不會。請注意,為了使連線池正常運作,它至少需要一個上游連線,因此此值很可能不應大於 叢集最大連線數。如果此斷路器溢出,則叢集的 upstream_cx_pool_overflow 計數器將會遞增。
每個斷路限制都是 可設定的,並依上游叢集和優先順序來追蹤。這允許獨立調整分散式系統的不同組件,並設定不同的限制。這些斷路器的即時狀態,包括在斷路器開啟之前剩餘的資源數,可以透過 統計資料 來觀察。
工作執行緒會共用斷路器限制,也就是說,如果活動連線閾值為 500,工作執行緒 1 有 498 個活動連線,則工作執行緒 2 只能再分配 2 個連線。由於實作最終是一致的,因此執行緒之間的競爭可能會允許潛在超出限制的情況。
斷路器預設為啟用,並具有適度的預設值,例如每個叢集 1024 個連線。若要停用斷路器,請將 閾值 設定為允許的最高值。
請注意,如果 HTTP 請求發生斷路,路由器篩選器將會設定 x-envoy-overloaded 標頭。