
Part 01、ECMP
簡單來說,ECMP是基于路由層面實現的負載均衡,基于IP層進行負載有許多優點,具體如下:
(1)部署配置簡單,可以基于很多協議自身特性實現負載,無需額外配置。
(2)提供多種流量調度算法方式,可以基于哈希也可以基于權重和輪詢方式。
簡單的方式同時意味著存在許多缺陷,具體如下:
(1)可能加劇鏈路堵塞。因為ECMP不會判斷原先鏈路是否已經堵塞,都會將流量進行負載,這樣子會導致原先堵塞的鏈路更加堵塞。
(2)很多情況下負載效果不好。ECMP無法區分多條網絡后的流量空閑情況以及ECMP在流量差距大的情況下負載性能差。
這種基于網絡三層的負載方式雖然易于使用和部署,但是無法滿足業務層面的使用,無法保持會話,故下面筆者會介紹幾種網絡四層以上的負載方式。
Part02、LVS負載
LVS(LinuxVirtualServer)即Linux虛擬服務器,是由章文嵩博士主導的開源負載均衡項目,目前LVS已經被集成到Linux內核模塊中。該項目在Linux內核中實現了基于IP的數據請求負載均衡調度方案,終端互聯網用戶從外部訪問公司的外部負載均衡服務器,終端用戶的Web請求會發送給LVS調度器,調度器根據自己預設的算法決定將該請求發送給后端的某臺Web服務器,比如,輪詢算法可以將外部的請求平均分發給后端的所有服務器,終端用戶訪問LVS調度器雖然會被轉發到后端真實的服務器,但如果真實服務器連接的是相同的存儲,提供的服務也是相同的服務,最終用戶不管是訪問哪臺真實服務器,得到的服務內容都是一樣的,整個集群對用戶而言都是透明的。最后根據LVS工作模式的不同,真實服務器會選擇不同的方式將用戶需要的數據發送到終端用戶,LVS工作模式分為NAT模式、TUN模式、以及DR模式【2】。

圖1LVS結構圖
與ECMP不同的是LVS是基于會話的四層負載均衡,LVS會基于上下行五元組對不同的流進行會話保持,再結合LVS的長期發展,LVS具有非常多的優勢:
(1)抗負載能力強。LVS只在網絡四層做分發,不會過多的消耗CPU和內存資源。
(2)配置要求低。簡單配置就能夠正常使用。
(3)健壯性強。發展時間長,業內的部署方案非常多,穩定性高。
于此同時,LVS也存在許多不足:
(1)功能不夠豐富。配置簡單的同時導致LVS缺少更多的功能,缺少故障遷移,添加恢復等功能。
(2)NAT模式性能受限,當然這也是很多四層負載所面臨的問題,筆者會在后續提出思考。
Part03、NGINX負載
NIGINX除了作為一個高性能的HTTP服務器,同時能夠提供反向代理WBE服務器的功能,也就意味著部署NGINX作為一臺負載均衡服務器是可行的。當然,業內已經非常廣泛的在使用NGINX作為負載均衡服務器,服務集群,主備鏈路等。
NGINX和LVS類似,都是基于四層以上的負載均衡,能夠保持會話。同時因為NGINX工作在網絡七層,相比LVS負載,NGINX對網絡的依賴會更小。
相比LVS負載均衡,NGINX具有如下優勢:
(1)對網絡依賴小。只要網絡能通就能做負載,不像LVS部分模式需要特定的網絡環境。
(2)安裝簡單,配置部署快。
(3)NIGINX負載可以檢測到服務器內部故障。簡單來說,上傳文件時發生故障,NIGINX會自動將上傳切到另一臺負載設備處理,LVS無法如此使用。
同樣的,NGINX也存在一些缺點:
(1)缺少雙機熱備方案,多數情況下單機部署存在一定風險。(2)功能調整度高,變相導致它的維護成本和難度高于LVS。
Part04、思考和探究
綜合以上幾種常見的負載技術的優缺點,其實不難發現各有各的好處,然而在實際使用過程中,筆者發現這幾種方式都很難滿足高性能跨網負載,即在做FULL-NAT的前提下實現跨城域網的負載,簡單來說,就是在實驗多節點云化部署時,這些方案都存在一定的性能貧瘠。
基于此,經過查閱相關資料,筆者發現Cisco開源的VPP項目提供了一種高性能負載均衡器的方式,基于DPDK收發包,VPP的高性能處理,經過二次開發可以實現跨網高性能負載,目前已經取得一定成效。下一期將針對這種高性能四層跨網負載均衡技術展開介紹和討論。
未來,智慧家庭運營中心會在實現高性能跨網負載均衡器上進行更多的研究,歡迎更多的開發架構人員投入到高性能跨網負載均衡器的功能開發和場景探究之中來。