作者:蔡伸,單位:中國移動智慧家庭運營中心
在大力建設算力網(wǎng)絡的大背景下,隨著SDN思潮的深入推進、網(wǎng)絡集群的部署,負載均衡成為了一種不可或缺的技術,它在云,網(wǎng),邊都起了至關重要的作用。本文會對常見的幾種負載均衡技術進行介紹,同時對各種技術的不足之處進行思考。
Part 01●??ECMP?●
ECMP是一個逐跳的、基于流的負載均衡策略,當路由器發(fā)現(xiàn)同一目的地址出現(xiàn)多個最優(yōu)路徑時,會更新路由表,為此目的地址添加多條規(guī)則,對應于多個下一跳,且可同時利用這些路徑轉發(fā)數(shù)據(jù),增加帶寬。ECMP算法被多種路由協(xié)議支持,例如:OSPF、ISIS、EIGRP、BGP等。在數(shù)據(jù)中心架構VL2中也提到使用ECMP作為負載均衡算法[1]。
簡單來說,ECMP是基于路由層面實現(xiàn)的負載均衡,基于IP層進行負載有許多優(yōu)點,具體如下:
(1)部署配置簡單,可以基于很多協(xié)議自身特性實現(xiàn)負載,無需額外配置。
(2)提供多種流量調度算法方式,可以基于哈希也可以基于權重和輪詢方式。
簡單的方式同時意味著存在許多缺陷,具體如下:
(1)可能加劇鏈路堵塞。因為ECMP不會判斷原先鏈路是否已經(jīng)堵塞,都會將流量進行負載,這樣子會導致原先堵塞的鏈路更加堵塞。
(2)很多情況下負載效果不好。ECMP無法區(qū)分多條網(wǎng)絡后的流量空閑情況以及ECMP在流量差距大的情況下負載性能差。
這種基于網(wǎng)絡三層的負載方式雖然易于使用和部署,但是無法滿足業(yè)務層面的使用,無法保持會話,故下面筆者會介紹幾種網(wǎng)絡四層以上的負載方式。
Part 02●?LVS負載?●
LVS(Linux Virtual Server)即Linux虛擬服務器,是由章文嵩博士主導的開源負載均衡項目,目前LVS已經(jīng)被集成到Linux內核模塊中。該項目在Linux內核中實現(xiàn)了基于IP的數(shù)據(jù)請求負載均衡調度方案,終端互聯(lián)網(wǎng)用戶從外部訪問公司的外部負載均衡服務器,終端用戶的Web請求會發(fā)送給LVS調度器,調度器根據(jù)自己預設的算法決定將該請求發(fā)送給后端的某臺Web服務器,比如,輪詢算法可以將外部的請求平均分發(fā)給后端的所有服務器,終端用戶訪問LVS調度器雖然會被轉發(fā)到后端真實的服務器,但如果真實服務器連接的是相同的存儲,提供的服務也是相同的服務,最終用戶不管是訪問哪臺真實服務器,得到的服務內容都是一樣的,整個集群對用戶而言都是透明的。最后根據(jù)LVS工作模式的不同,真實服務器會選擇不同的方式將用戶需要的數(shù)據(jù)發(fā)送到終端用戶,LVS工作模式分為NAT模式、TUN模式、以及DR模式【2】。
圖1 LVS結構圖
與ECMP不同的是LVS是基于會話的四層負載均衡,LVS會基于上下行五元組對不同的流進行會話保持,再結合LVS的長期發(fā)展,LVS具有非常多的優(yōu)勢:
(1)抗負載能力強。LVS只在網(wǎng)絡四層做分發(fā),不會過多的消耗CPU和內存資源。
(2)配置要求低。簡單配置就能夠正常使用。
(3)健壯性強。發(fā)展時間長,業(yè)內的部署方案非常多,穩(wěn)定性高。
于此同時,LVS也存在許多不足:
(1)功能不夠豐富。配置簡單的同時導致LVS缺少更多的功能,缺少故障遷移,添加恢復等功能。
(2)NAT模式性能受限,當然這也是很多四層負載所面臨的問題,筆者會在后續(xù)提出思考。
Part 03●??NGINX負載?●
NIGINX除了作為一個高性能的HTTP服務器,同時能夠提供反向代理WBE服務器的功能,也就意味著部署NGINX作為一臺負載均衡服務器是可行的。當然,業(yè)內已經(jīng)非常廣泛的在使用NGINX作為負載均衡服務器,服務集群,主備鏈路等。
NGINX和LVS類似,都是基于四層以上的負載均衡,能夠保持會話。同時因為NGINX工作在網(wǎng)絡七層,相比LVS負載,NGINX對網(wǎng)絡的依賴會更小。
相比LVS負載均衡,NGINX具有如下優(yōu)勢:
(1)對網(wǎng)絡依賴小。只要網(wǎng)絡能通就能做負載,不像LVS部分模式需要特定的網(wǎng)絡環(huán)境。
(2)安裝簡單,配置部署快。
(3)NIGINX負載可以檢測到服務器內部故障。簡單來說,上傳文件時發(fā)生故障,NIGINX會自動將上傳切到另一臺負載設備處理,LVS無法如此使用。
同樣的,NGINX也存在一些缺點:
(1)缺少雙機熱備方案,多數(shù)情況下單機部署存在一定風險。(2)功能調整度高,變相導致它的維護成本和難度高于LVS。
Part 04●??思考和探究?●
綜合以上幾種常見的負載技術的優(yōu)缺點,其實不難發(fā)現(xiàn)各有各的好處,然而在實際使用過程中,筆者發(fā)現(xiàn)這幾種方式都很難滿足高性能跨網(wǎng)負載,即在做FULL-NAT的前提下實現(xiàn)跨城域網(wǎng)的負載,簡單來說,就是在實驗多節(jié)點云化部署時,這些方案都存在一定的性能貧瘠。
基于此,經(jīng)過查閱相關資料,筆者發(fā)現(xiàn)Cisco開源的VPP項目提供了一種高性能負載均衡器的方式,基于DPDK收發(fā)包,VPP的高性能處理,經(jīng)過二次開發(fā)可以實現(xiàn)跨網(wǎng)高性能負載,目前已經(jīng)取得一定成效。下一期將針對這種高性能四層跨網(wǎng)負載均衡技術展開介紹和討論。
未來,智慧家庭運營中心會在實現(xiàn)高性能跨網(wǎng)負載均衡器上進行更多的研究,歡迎更多的開發(fā)架構人員投入到高性能跨網(wǎng)負載均衡器的功能開發(fā)和場景探究之中來。
參考文獻
[1] 深入看ECMP(詳解其實現(xiàn)機制)https://blog.csdn.net/aiaiai010101/article/details/84673687,CSDN, 2018.
[2]??LVS負載均衡(LVS簡介、三種工作模式、十種調度算法)https://cloud.tencent.com/developer/article/2054205,騰訊云, 2022.