背景
數據中心的網絡拓撲通常采用CLOS結構,主機之間常存在多條路徑。數據中心為滿足吞吐量敏感型流量的需求會提供大量的帶寬資源。那么利用數據中心這種網絡拓撲已知,路徑資源、帶寬資源豐富的特性,可以更好的實現負載均衡,將數據流分布到不同路徑上進行數據傳輸,避免擁塞,提高數據中心內的資源利用率。
ECMP(Equal-cost multi-path)
ECMP是一個逐跳的基于流的負載均衡策略,當路由器發現同一目的地址出現多個最優路徑時,會更新路由表,為此目的地址添加多條規則,對應于多個下一跳。可同時利用這些路徑轉發數據,增加帶寬。ECMP算法被多種路由協議支持,例如:OSPF、ISIS、EIGRP、BGP等。在數據中心架構VL2中也提到使用ECMP作為負載均衡算法。
對于未開啟ECMP的網絡來說,無法充分利用路徑資源。如圖1所示,假設從S0到Server的為S0-S1-S2-S4即圖中橘色路徑,那么即便存在另一條等價路徑,藍色路徑,路由器仍然會每次選擇第一條橘色路徑轉發數據。除非此條路徑發生擁塞,才會重新選擇路徑。
當開啟ECMP功能時,便可同時利用兩條路徑,進行基于流的負載均衡,例如主機A到Server的數據流選擇橘色路徑,主機B到Server的數據流選擇藍色路徑。
ECMP的路徑選擇策略有多種方法:
哈希,例如根據源IP地址的哈希為流選擇路徑。
輪詢,各個流在多條路徑之間輪詢傳輸。
基于路徑權重,根據路徑的權重分配流,權重大的路徑分配的流數量更多。
ECMP面臨的問題
然而ECMP是一種較為簡單的負載均衡策略,其在實際使用中面臨的問題也不容忽視。
1.可能增加鏈路的擁塞
ECMP并沒有擁塞感知的機制,只是將流分散到不同的路徑上轉發。對于已經產生擁塞的路徑來說,很可能加劇路徑的擁塞。而使用哈希的方法,產生哈希碰撞也會增加鏈路的擁塞可能。
2.非對稱網絡使用效果不好
例如圖2中,A與h3之間的通信,ECMP只是均勻的將流通過B,D兩條路徑分別轉發,但實際上,在B處可以承擔更多的流量。因為B后面還有兩條路徑可以到達h3.
3.基于流的負載均衡效果不好
ECMP對于流大小相差不多的情況效果更好,而對于流大小差異較大,例如大象流和老鼠流并存的情況下,效果不好。如圖2,主機h1到A的流量為15,h2到A的流量為5.那么無論為h1的流量選擇哪條路徑都會發生擁塞。但若將h1的流拆分成兩部分傳輸,可以避免擁塞的情況。
以上,為使用ECMP算法進行負載均衡的分析,在數據中心這種突發性流量多,大象流與老鼠流并存的環境中,需要慎重考慮選擇的負載均衡策略,ECMP簡單易部署但也存在較多問題需要注意。