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