English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

guest
1 / ?
back to lessons

進站與出站作為不同的集合

網路架構中的二部圖

二部圖將節點劃分為兩個集合,邊僅允許存在於集合之間(絕不允許在同一集合內)。

網路邊界具有自然的二部結構:

- 進站側:外部客戶端位於一側,內部服務位於另一側。邊:進入的外部請求,以及送出的內部回應。

- 出站端(Egress side):一側為內部服務,另一側為外部目的地。邊(Edges):內部服務發起的出站呼叫,以及返回的外部回應。

不對稱性(The asymmetry):

- 入站(Ingress):來源集合無界(網際網路上的任何人)。目的地集合很小(少數服務)。流量隨使用者數量擴展。

- 出站(Egress):來源集合很小(少數內部服務)。目的地集合有界(少數已知的合作夥伴)。流量隨內部活動擴展。

單盒設計(Single-box design) 透過單一節點合併了兩個二部圖半區。該節點同時具有來自外部的扇入(入站)和來自內部的扇入(出站的反向)。節點的負載 = 兩側負載之和。

分割設計(Split design) 在獨立的節點上保留了兩個二部圖半區。每個節點處理一個角色,並具有其適當的擴展軸。

二部圖入站與出站:獨立的節點集合,獨立的割點

為一個小型 SaaS 繪製二部圖:5 個外部客戶端點(發送請求進入)、3 個內部服務(後端)以及 4 個外部合作夥伴 API(出站呼叫)。識別哪些邊屬於入站二部圖半區,哪些屬於出站二部圖半區。預測如果其中一個內部服務失敗,圖的連通性會發生什麼變化。

分裂之前:無處不在的割點

單一框:一個頂點承載一切

在拆分之前,每一個外部/內部配對之間都只有一個代理方塊。以圖論術語來說,這是一個高階割點:移除它會使所有客戶端與所有後端斷開連線,同時也會使所有內部服務與所有外部合作夥伴斷開連線。

此節點的連通度為 1。任何擾亂此節點的事件(程序崩潰、網路故障、OOM 終止)都會中斷所有依賴路徑。

拆分後:割點被兩個較輕的節點取代

拆分為入站(ingress)與出站(egress)後,原本的一個圖節點變成了兩個。現在每個節點只位於二分圖的一半上:

- 入站節點:是「外部客戶端至內部服務」二分圖一半的割點

- 出站節點:是「內部服務至合作夥伴」二分圖一半的割點

髮夾彎迴路(hairpin loop)在幾何上消失了:在單一代理方塊的圖中,內部服務若嘗試透過公用位址存取面向外部的服務,需要兩次穿過同一個頂點(先以出站角色出去,再以入站角色進來)。在拆分後的圖中,該路徑會穿過兩個不同的頂點。

每一側的連通度仍維持為 1,但這兩個割點可以獨立地被取代。新增第二個入站代理可將入站側的連通度提升至 2,而不影響出站側。

每側的複製

生產環境的機群通常會運行 2 個以上的入口代理(HA)以及 2 個以上的出口代理(HA)。每一側都獨立地達到 2 的連通性。每側的容量可視需求水平擴展。

一個團隊目前運行一台代理伺服器(對雙向而言是單一切割頂點)。他們將其拆分為一台入口和一台出口,之後又新增了一台入口(形成 HA 對),但保留單台出口。請逐步說明每個步驟中圖的連通性如何變化,並識別在第 3 步之後仍為 1-連通的二分圖半邊(因此它仍是容錯能力最低的失效模式)。

網路分區容錯性

綜合應用

現在你可以將網路架構視為二部圖,識別割點,並追蹤每一半的連通性。

將此應用於網路分區。

網路分區是一種圖割:跨越分區的邊失效;兩側繼續運作但無法互相通訊。

一個地理分散的系統擁有兩個資料中心,由單一的資料中心間鏈路(inter-DC link)連接。入站流量透過 DC1 進入;出站流量透過 DC1 流向外部合作夥伴;部分內部服務位於 DC2,並呼叫回 DC1 以執行有狀態操作。

預測若資料中心間鏈路失效會發生什麼情況:(1) 每個資料中心內哪些二部圖半部保持連通,(2) 哪些流量流繼續、哪些停止,以及 (3) 提出一項架構變更,使系統能在此分區下以有限降級(bounded degradation)而非全面中斷的方式容錯。

配套筆記

配套筆記

這堂幾何學課程將入口與出口分離主課程重新詮釋為二部圖分析。

下一個配套課程 geometry_of_failure_modes_and_blast_radius 將推導介數中心度(識別瓶頸節點)與最小割(界定爆炸半徑)。

做得很好。