超額認購(oversubscription)
想像一家健身房賣出 1,000 張會員證,但同時只容得下 100 人。它行得通,是因為不會所有人同時出現——但在人潮洶湧的假日,會員會被擋在門口。超額認購就是把這種賭注用在網路容量上:一台交換器或一個層級,被佈線成能處理的總頻寬,少於接在它上面的一切「同一瞬間」理論上可能需要的量,賭的是它們很少一起達到尖峰。
具體來說,超額認購通常以「潛在下游需求」對「可用上游容量」的比值來表示。如果一台機架頂端交換器接了 40 台伺服器、每台能以 10 Gbps 送出(可能需求 400 Gbps),但往結構其餘部分的上行只有 100 Gbps,那就是 4:1 的超額認購比:最多只有伺服器全速送出量的四分之一能同時離開機架。1:1 的比值代表沒有超額認購(完整、無阻塞的容量);比值越高代表硬體越便宜、但潛在競用越多。設計者刻意選擇這個比值,在成本與壅塞風險之間取捨。
為什麼重要:超額認購是資料中心(以及接取)網路設計中、成本對效能的核心旋鈕。舊的三層拓樸被嚴重超額認購,因為設計者假設流量是輕量、突發、主要南北向的;當東西向流量爆增時這個假設就破了,造成狹窄上層的壅塞。胖樹與葉脊結構之所以被創造出來,正是為了能負擔得起地把超額認購壓向 1:1。誠實的重點:超額認購本身不必然是壞事——合理的比值能省下真金白銀——但你必須讓它配合你實際的流量,否則你會在最承受不起的時候,恰好碰上 incast、微爆發與佇列延遲。
兩個機架只在上行上有差別。機架 A 是 1:1(伺服器總送出容量等於它的上行),所以一個備份工作能以全速串流出去。機架 B 是 4:1,所以同樣的備份若由所有伺服器一起執行就會卡住:四分之三的資料堆在瓶頸上行後面排隊,增加延遲、也冒著遺失的風險。
同樣的工作負載,在 1:1 機架上飛快,在 4:1 機架上卻卡住。
超額認購是設計選擇,不是缺陷。錯誤在於讓比值與真實流量不匹配:一個為輕量南北向流量調的比值,一旦遇上繁重的東西向流量,就會變成令人動彈不得的瓶頸。