胖樹拓樸(fat-tree topology)
想像一般的家族樹:往單一樹根爬上去時,樹枝越來越細,所以樹根成了任何通過它的東西的瓶頸。現在想像一棵樹,往上爬時樹枝反而越來越「粗」,於是頂端的承載能力跟底端一樣大。這就是胖樹背後的點子:沒有一根細瘦的樹根會掐住流量。在資料中心裡達成這點的訣竅,是用「很多」並排的交換器取代一台大樹根,於是那根「粗」枝其實是一束分散在許多裝置上的等價連結。
胖樹(Clos 網路的一種特定排列)完全由小而相同、便宜的交換器分層組成——通常底層是邊緣交換器(連接伺服器)、中間是匯聚交換器、頂端是核心交換器,佈線方式讓每台伺服器都能透過許多等長路徑到達其他任何伺服器。在經典的 k 元胖樹中,使用具 k 個埠的交換器,整個結構能以完整、無阻塞的頻寬支援 k 的三次方除以 4 台伺服器:原則上,無論還有誰在說話,任一伺服器都能以全線速跟任何其他伺服器交談。兩台伺服器之間的眾多路徑,靠等價多路徑(ECMP)路由把資料流分散其上來加以利用。
為什麼重要:胖樹(在一篇著名的 2008 年論文中被提出用於資料中心)證明了你可以用商用交換器、而非少數幾台龐大昂貴的核心機器,便宜地取得巨大的對分頻寬。它直接解決了三層式設計的超額認購問題,讓倉庫規模的東西向流量變得負擔得起。一個誠實的提醒:「無阻塞」是拓樸容量的性質,不是實務上的保證——真實效能仍取決於流量分散到各路徑的好壞(ECMP 可能把多條資料流撞到同一條連結上)、取決於故障、也取決於傳輸層。多數營運者實際部署的葉脊設計,本質上就是一個兩層的「對折胖樹」。
用 48 埠交換器蓋一棵胖樹。當 k = 48,這個結構可以連接約 48^3 / 4 = 27,648 台伺服器,全部用同一款便宜的交換器型號佈線,而且原則上每台伺服器都能以全線速送給任何其他伺服器——不需要又大又貴的核心機器。
許多便宜的相同交換器,取代了少數幾台昂貴的巨型交換器。
「無阻塞」描述的是佈線的理論容量,不是交付的保證。基於雜湊的 ECMP 仍可能把兩條大資料流堆到同一條連結上、讓其他連結閒置,因此實務上要達到胖樹的完整對分頻寬,需要良好的負載分散與感知壅塞的傳輸協定。