每個 PoP 擁有平面的一個單元
Voronoi 鑲嵌
在平面上放置 N 個點(PoP:存在點)。繪製區域邊界,使得平面上的每一點都分配給最近的 PoP。結果是一個 Voronoi 圖:平面被分割為 N 個單元,每個 PoP 對應一個單元,每個單元包含所有距離其 PoP 比距離任何其他 PoP 更近的點。
CDN 幾何學:每個使用者的請求路由至最近的 PoP。每個 PoP 服務地理平面的一個單元。單元邊界是相鄰 PoP 之間連線的垂直平分線。
幾何解讀:
- 新增一個 PoP 會縮小其相鄰節點的儲存格(並建立一個新的儲存格)
- 移除一個 PoP 會迫使該儲存格重新分配給相鄰節點(相鄰節點出現容量激增)
- 位於儲存格邊界附近的用戶,可能因負載平衡的調整而在不同 PoP 之間切換
- 任一 PoP 的故障,都會在故障期間擴大所有相鄰節點的有效儲存格範圍
運維影響:當一個 PoP 故障時,其負載並不會消失,而是會遷移至相鄰的 PoP。如果相鄰節點僅按正常儲存格規模進行配置,此次激增將導致它們隨後也發生故障(PoP 級聯故障)。成熟的 CDN 供應商在規劃每個 PoP 容量時,都會將相鄰節點故障時的激增負載納入考量。
你無法欺騙的三角形不等式
物理設定底限
光在真空中的速度約為 300,000 公里/秒。在光纖中,由於折射率,速度約為 200,000 公里/秒。這意味著:
- 約 1,000 公里的光纖 = 單向約 5 毫秒 = 往返約 10 毫秒
- 美國橫貫東西海岸(約 5,000 公里)= 往返時間(RTT)最低約 50 毫秒
- 美國到歐洲(約 8,000 公里)= 往返時間(RTT)最低約 80 毫秒
- 地球對跖點(繞地球半圈)= 往返時間(RTT)最低約 200 毫秒
這是一個下限。 實際的往返時間(RTT)總是更大(路由器跳數、交換、排隊、擁塞)。沒有任何應用程式能比物理定律允許的速度更快。
三角不等式
對於三個節點 A、B、C,三角不等式指出 d(A,C) <= d(A,B) + d(B,C):直接路徑比任何間接路徑短(或相等)。
網路解讀:如果您的服務將 A -> B -> C 的路由,而不是直接 A -> C,延遲至少是兩段延遲的總和。通常會更高,因為在 B 處有處理時間。
架構層面解讀:每一層間接處理(代理、負載平衡器、CDN 節點)都會為使用者感知的延遲增加至少一個往返行程。CDN 的好處在於縮短使用者端的行程(邊緣節點比源站更靠近使用者),即使總跳數增加了。
多區域陷阱:一個從 A 區域讀取但寫入 B 區域的服務,在每次寫入時都會產生 A 到 B 的延遲。如果 A 與 B 相距 100 ms,則每次寫入至少需要 100 ms。跨區域資料庫每次都要支付這個延遲底線。
支付底線成本
一個服務運行在兩個區域:美國東部(us-east-1)與歐洲西部(eu-west-1)。這兩個區域相距約 5,500 公里。該服務的主資料庫位於美國東部。歐洲使用者的請求由歐洲西部的後端處理,但每次寫入都需要呼叫美國東部的主資料庫。
地理容量設計
綜合
您現在可以將 Voronoi 單元視為 PoP 的集客區,計算光速延遲下限,並應用代理層(proxy tier)的排隊曲線。
應用這三項。
一個團隊為一項服務規劃 CDN 覆蓋範圍,該服務的用戶分佈在三個大洲:北美(佔用戶總數的 60%)、歐洲(30%)和亞洲(10%)。他們的預算可支持 6 個 PoP(點對點節點)。每個 PoP 可以在 70% 的利用率下穩定服務一個單元,而不會超過排隊曲線的拐點。
結語:伴讀課程
結語:伴讀課程
您已完成所有五堂「幾何之*」系列課程:
- 代理與源頭:有向圖、跳數(hop count)、扇入/扇出(fan-in / fan-out)、間接引用
- 無狀態水平擴展:利特尔法則(Little's Law)作為面積、排隊曲線及其膝點(knee)
- 入口與出口分離:二部圖結構、割點消除、分區容忍性
- 故障模式與爆炸半徑:介數中心性(betweenness centrality)、最小割(min-cut)、直徑(diameter)
- 可觀測性與容量(本課):沃羅諾伊 PoP 單元、延遲三角形下限、地理容量設計
貫穿全篇的主線:分散式系統具有幾何結構。每個架構都是一張圖。每個延遲下限都是一個三角不等式。每個容量決策都是一條曲線與一個膝點。一旦您看見這層幾何結構,運維決策便自然隨之而得。
結合五堂主課程(cs_distsys_*),您已建立一個關於 Web 規模分散式系統的可運作心智模型,以及用以推理該系統的圖論紀律。
做得好。