資料中心與雲端網路

等價多路徑(equal-cost multipath)

假設有四條一樣短的高速公路把你的城鎮連到下一座城市。為了避免塞爆一條路、卻讓三條空著,明智的交通系統會把車分散到四條路上。但你也不希望同一車家人被拆到不同的路上、然後亂序抵達。訣竅是:讓每一車(每一段對話)整趟都走同一條路,但把不同的車分配到不同的路上。這正是等價多路徑在資料中心結構裡所做的事。

ECMP 是一種路由器行為:當轉送表顯示有好幾個下一跳都能以相同的最低成本到達目的地時(在胖樹或葉脊裡這時時都會發生,因為每個脊都提供一條等價路徑),路由器就把流量分散到它們之間,而不是只挑一個。為了讓每條 TCP 連線都待在單一路徑上——好讓它的封包保持順序、不觸發假性重送——路由器並不逐封包拆分。它改成對能辨識一條資料流的欄位(通常是五元組:來源 IP、目的 IP、來源埠、目的埠、協定)算一個雜湊值,並用這個雜湊值來挑下一跳。同一條流、同樣的雜湊、同一條路徑;不同的流則散佈到各個可用連結上。

為什麼重要:ECMP 是把胖樹或葉脊那許多並排路徑變成可用總頻寬的黏著劑——沒有它,那一堆佈線會閒置,而某一條連結卻超載。但它是統計式的負載平衡,並不完美。兩條大型「大象流」可能雜湊到同一條連結上而相撞、讓其他連結空著(雜湊碰撞),而且 ECMP 對實際負載毫無知覺——它是依流的數量分散,不是依位元組數。這也是為什麼營運者會在其上加上 flowlet 切換、自適應負載平衡或感知壅塞的方案,以及為什麼胖樹理論上的無阻塞頻寬,在實務上不會自動兌現。

一台葉交換器有四條上行通往四個脊。對一條新的資料流,它算出 hash(srcIP, dstIP, srcPort, dstPort, proto) mod 4 = 2,於是這條流的所有封包都從上行 2 送出。另一條流則雜湊到上行 0。兩條連線都保持順序,而四條上行各自大約承載四分之一的資料流。

把一條流雜湊到一條路徑;同一條流不動,不同的流散開。

ECMP 是依流、而非依負載來平衡。少數幾條巨大的資料流可能雜湊到同一條連結而相撞,其他等價連結卻空著,因此單靠 ECMP 在實務上並不保證能達到胖樹的完整對分頻寬。

又稱
ECMPequal-cost multi-path routing等價多路徑等價多路徑路由