史鴻雁, 李海生
(北京工商大學(xué) 計(jì)算機(jī)與信息工程學(xué)院, 北京 100048)
因特網(wǎng)的快速發(fā)展,要求服務(wù)器提供高質(zhì)量、高效率的服務(wù). 目前提高服務(wù)器性能較流行的技術(shù)是采用負(fù)載均衡集群(load balance cluster)技術(shù)[1]. 負(fù)載均衡集群運(yùn)行時(shí)一般通過一個(gè)或者多個(gè)前端負(fù)載均衡器,將工作負(fù)載分發(fā)到后端的一組服務(wù)器上,從而達(dá)到整個(gè)集群系統(tǒng)的高性能和高可用性.
負(fù)載均衡只有通過某種負(fù)載分配技術(shù),才能將外部發(fā)送來的請(qǐng)求均勻分配到集群中某一組服務(wù)器上,并使收到外部請(qǐng)求的服務(wù)器能各自獨(dú)立地響應(yīng)客戶的請(qǐng)求. 因此,負(fù)載分配是集群系統(tǒng)工作的關(guān)鍵部分,它保證了集群系統(tǒng)對(duì)外提供最大的數(shù)據(jù)處理速度和服務(wù)能力.
設(shè)計(jì)負(fù)載均衡算法的目的是為了更好地解決集群的負(fù)載分配問題,它的好壞直接影響了集群向外提供服務(wù)能力的大小. 不好的算法,會(huì)導(dǎo)致集群的負(fù)載失衡,從而降低集群的工作效率[2]. 負(fù)載均衡算法的主要任務(wù)是決定如何選擇下一個(gè)集群結(jié)點(diǎn),將一個(gè)用戶的服務(wù)請(qǐng)求轉(zhuǎn)發(fā)給它. 當(dāng)前,主要的負(fù)載均衡算法有隨機(jī)算法、輪轉(zhuǎn)算法、加權(quán)輪轉(zhuǎn)算法等.
隨機(jī)分配算法(random allocation)依賴于相應(yīng)的隨機(jī)函數(shù),在一個(gè)服務(wù)器負(fù)載成員隊(duì)列里,隊(duì)列的每個(gè)負(fù)載成員都具有相同的地位,網(wǎng)絡(luò)用戶請(qǐng)求通過隨機(jī)函數(shù)在這組成員中隨機(jī)地選擇進(jìn)行任務(wù)分配. 隨機(jī)算法在一定程度上具有盲目性,在某一時(shí)刻選中的結(jié)點(diǎn)恰好是重載結(jié)點(diǎn),而其余輕載結(jié)點(diǎn)卻可能處于空閑中,但平均而言,由于所有服務(wù)器共同接受隨機(jī)分配,所以它們也能共享網(wǎng)絡(luò)用戶的服務(wù)請(qǐng)求.
輪轉(zhuǎn)算法(round-robin allocation)是在一個(gè)任務(wù)隊(duì)列里,隊(duì)列的每個(gè)負(fù)載成員節(jié)點(diǎn)都具有相同的地位,輪轉(zhuǎn)法簡單地在這組成員中順序輪轉(zhuǎn)選擇,當(dāng)一個(gè)成員被分配后它就會(huì)移到隊(duì)列的最后. 在負(fù)載均衡環(huán)境中,均衡器將新的服務(wù)請(qǐng)求輪流發(fā)給節(jié)點(diǎn)隊(duì)列中的下一節(jié)點(diǎn),如此連續(xù)、周而復(fù)始,每個(gè)集群的節(jié)點(diǎn)都在相等的地位下被輪流選擇.
加權(quán)輪轉(zhuǎn)算法(weighted round-robin allocation)是在一組負(fù)載成員中,每個(gè)成員被指定一個(gè)權(quán)值,用以表示這個(gè)成員的數(shù)據(jù)處理能力. 權(quán)值高的服務(wù)器要比權(quán)值低的優(yōu)先獲得服務(wù)請(qǐng)求,并且服務(wù)請(qǐng)示量要多于權(quán)值低的服務(wù)器. 同等權(quán)值的服務(wù)器具有相同處理等級(jí),同一個(gè)處理等級(jí)里按照前面的輪轉(zhuǎn)法進(jìn)行均衡.
優(yōu)化網(wǎng)絡(luò)工程工具 (optimized network engineering tool,OPNET)是目前最常用的商用網(wǎng)絡(luò)仿真軟件之一. 它支持各類通信網(wǎng)絡(luò)和分發(fā)系統(tǒng)的模擬與仿真,可通過離散事件仿真分析模型化系統(tǒng)的行為和性能,幫助用戶進(jìn)行網(wǎng)絡(luò)結(jié)構(gòu)的分析、設(shè)計(jì)、建設(shè)和管理. 它涉及到仿真研究的各階段,如模型設(shè)計(jì)、仿真、數(shù)據(jù)搜集和數(shù)據(jù)分析[3].
OPNET采用面向?qū)ο蟮慕7椒▉矸从硨?shí)際的網(wǎng)絡(luò)和網(wǎng)絡(luò)組件結(jié)構(gòu),實(shí)際的系統(tǒng)可以直觀地映射到模型中. 仿真模型分為網(wǎng)絡(luò)、節(jié)點(diǎn)和進(jìn)程3個(gè)層次. 利用OPNET進(jìn)行網(wǎng)絡(luò)建模可以分為以下3個(gè)層次.
1) 進(jìn)程層次. 在進(jìn)程層次中模擬單個(gè)對(duì)象的行為,使用有限狀態(tài)機(jī)(FSM)來對(duì)協(xié)議進(jìn)行建模. OPNET內(nèi)建的400多個(gè)庫函數(shù)可以對(duì)各個(gè)層次的標(biāo)準(zhǔn)網(wǎng)絡(luò)協(xié)議進(jìn)行全面的支持,并且 Modeler中源碼完全開放,用戶可以根據(jù)自己的需要添加或者修改.
2) 節(jié)點(diǎn)層次. 建立由相應(yīng)協(xié)議模型構(gòu)成的節(jié)點(diǎn)模型,把進(jìn)程層次中的各個(gè)進(jìn)程互連成設(shè)備,并反映設(shè)備的特性.
3) 網(wǎng)絡(luò)層次. 網(wǎng)絡(luò)層次負(fù)責(zé)將節(jié)點(diǎn)層次中建立起來的設(shè)備互連成網(wǎng)絡(luò),它反映了現(xiàn)實(shí)網(wǎng)絡(luò)結(jié)構(gòu)的拓?fù)?
通過OPNET的3層建模機(jī)制建立起來的3層模型和實(shí)際的網(wǎng)絡(luò)、設(shè)備、協(xié)議層次完全對(duì)應(yīng),全面反映了網(wǎng)絡(luò)的相關(guān)特性[4].
OPNET仿真主要可以分為以下幾個(gè)步驟.
1) 理解系統(tǒng)和仿真目的.
2) 確定系統(tǒng)模型. 通過OPNET提供的相關(guān)工具,建立場景,選擇所需要的設(shè)備和連接方式,建立網(wǎng)絡(luò)拓?fù)?,并檢查整個(gè)網(wǎng)絡(luò)是否連通.
3) 配制運(yùn)行參數(shù). 選擇在該網(wǎng)絡(luò)上運(yùn)行的服務(wù),并配制這些服務(wù)的運(yùn)行參數(shù). 這樣就完成了系統(tǒng)流量的建模.
4) 選擇要查看的結(jié)果. 選擇所需要的結(jié)果報(bào)告,可以是某個(gè)設(shè)備上運(yùn)行的某服務(wù)的參數(shù)之一,也可以是某些全局性的參數(shù).
5) 運(yùn)行仿真. 通過以上步驟,仿真環(huán)境已經(jīng)搭建起來. 通過運(yùn)行仿真可以得到需要的數(shù)據(jù).
這幾個(gè)步驟實(shí)際上是一個(gè)循環(huán),運(yùn)行以后得到的數(shù)據(jù)很可能因?yàn)閰?shù)配置等因素還不能讓我們滿意,這時(shí)候就可能需要再調(diào)整拓?fù)浠蛘咝薷膮?shù),再次運(yùn)行仿真,直到得到滿意的結(jié)果. 具體的仿真流程如圖1[5].
圖1 仿真流程Fig.1 Process of network simulation
集群負(fù)載均衡的建模服從OPNET的3層建模規(guī)則,在網(wǎng)絡(luò)層、節(jié)點(diǎn)層、進(jìn)程層都可以充分利用OPNET的庫文件,并根據(jù)實(shí)際需求做以設(shè)計(jì).
1)網(wǎng)絡(luò)建模. 由于本文是為了測試隨機(jī)算法(RND)、輪轉(zhuǎn)算法(RR)、加權(quán)輪轉(zhuǎn)算法(WRR)3種算法的負(fù)載分配效果,因此我們模型仿真一個(gè)100M帶寬的校級(jí)局域網(wǎng)的服務(wù)器集群,以防止由于帶寬小時(shí)鏈路問題引起仿真結(jié)果出現(xiàn)誤差. 我們采用集中式的負(fù)載均衡網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),負(fù)載均衡技術(shù)采用網(wǎng)絡(luò)地址轉(zhuǎn)換. 在集群中有3臺(tái)性能不一的服務(wù)器server1、server2、server3,性能分別設(shè)為低、中、高的硬件配置. 服務(wù)器與負(fù)載均衡器balancer之間的信息交換通過集線器實(shí)現(xiàn),均衡器與7個(gè)子網(wǎng)(每個(gè)子網(wǎng)配有15個(gè)終端用戶)之間以及子網(wǎng)內(nèi)部的線路都通過100M雙絞線相連接. 建立的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)如圖2.
在模塊application和profile中我們添加數(shù)據(jù)庫查詢業(yè)務(wù),并網(wǎng)絡(luò)流量設(shè)為中等,并分別在server1、server2、server3中設(shè)置不同的硬件參數(shù).
圖2 網(wǎng)絡(luò)仿真拓?fù)銯ig.2 Topology of network simulation
2) 節(jié)點(diǎn)建模. 本層中最重要的是負(fù)載均衡器(load balancer),它的設(shè)計(jì)遵循OSI的7層建模規(guī)則,由底至上分別是:MAC、ARP、IP、IPencap、TCP(UDP)、tpal、application. 各層由相應(yīng)的隊(duì)列模型和進(jìn)程處理模型組成,并用全雙工的包數(shù)據(jù)流連接,數(shù)據(jù)包的傳送仍按7層機(jī)制封裝. 服務(wù)器和其它設(shè)備的設(shè)計(jì)均衡器類似.
3) 進(jìn)程建模是載入負(fù)載均衡算法的部分. 在節(jié)點(diǎn)層的IP進(jìn)程處理程序是負(fù)載均衡的工作核心,在進(jìn)程編輯器中分別載入隨機(jī)算法(RND)、輪轉(zhuǎn)算法(RR)、加權(quán)輪轉(zhuǎn)算法(WRR)3種算法,并依據(jù)服務(wù)器的硬件配置在算法中指定相應(yīng)的負(fù)載權(quán)值.
最后,在3臺(tái)服務(wù)器上依次選擇服務(wù)器負(fù)荷作為仿真統(tǒng)計(jì)量. 模型仿真中,利用了OPNET Modeler特有的不同場景仿真結(jié)果可以進(jìn)行比較的特點(diǎn),可以對(duì)場景進(jìn)行備份,備份后的場景所有的配置及結(jié)果都相同,通過改變其中一個(gè)場景的參數(shù)或網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),查看參數(shù)改變后對(duì)仿真結(jié)果的影響.
圖3 Server 1的負(fù)載Fig.3 Load states of server 1
圖3至圖5分別給出了3種算法在3臺(tái)服務(wù)器上的負(fù)載分配仿真結(jié)果.
由圖中可以看出,3種算法都基本可以實(shí)現(xiàn)負(fù)載的均衡分配. 同時(shí)注意到集群系統(tǒng)中的負(fù)載總量約為7 800 bit/s,則平均每臺(tái)服務(wù)器負(fù)載為2 600 bit/s. 觀察圖中每種算法對(duì)應(yīng)的實(shí)際工作負(fù)載變化范圍對(duì)應(yīng)情況為:RND為2 000~3 200 bit/s,RR為2 400~2 900 bit/s,WRR為1 700~4 200 bit/s. RR的負(fù)載分布變化范圍最小,WRR最大.
圖4 Server 2的負(fù)載Fig.4 Load states of server 2
圖5 Server 3 的負(fù)載Fig.5 Load states of server 3
顯然,就負(fù)載的平均分配的效果而言,RR為最好. 綜合考慮到集群系統(tǒng)中各服務(wù)器的實(shí)際性能上的差異,由于服務(wù)器server3的性能最高,而服務(wù)器server1性能較差,因此以負(fù)載與權(quán)值比進(jìn)行分析計(jì)算,可見WRR明顯好于上述兩種算法. WRR能充分發(fā)揮服務(wù)器自身的性能,對(duì)性能高的服務(wù)器,它能相對(duì)提高其相應(yīng)的工作負(fù)載量,反之則減小其工作負(fù)載量. 由此,我們得出以下結(jié)論.
1)隨機(jī)調(diào)度算法的優(yōu)點(diǎn)是簡單易實(shí)現(xiàn),缺點(diǎn)是由于其分配的隨機(jī)性,很可能導(dǎo)致分配上的傾斜,造成某些服務(wù)器的過載.
2)輪轉(zhuǎn)算法是基于均可能性分配的算法,因此它的優(yōu)點(diǎn)是使集群中各服務(wù)器能平均收到同量的連接請(qǐng)求,使各服務(wù)器的負(fù)載量趨于平均,這在同構(gòu)體或服務(wù)器性能差異不大的集群中無疑會(huì)有好的負(fù)載均衡效果,但它的缺點(diǎn)是在異構(gòu)的集群中由于各服務(wù)器處理能力的差異仍會(huì)造成負(fù)載的不平衡.
3)加權(quán)輪轉(zhuǎn)算法的優(yōu)點(diǎn)是考慮到了各服務(wù)器的處理能力的差異,因而充分利用了服務(wù)器自身資源,在異構(gòu)的集群中或集群系統(tǒng)中各服務(wù)器的工作性能相差較大時(shí),仍能使系統(tǒng)有較好的負(fù)載均衡效果,但不足之處是權(quán)值是人為地依據(jù)經(jīng)驗(yàn)設(shè)置,容易造成系統(tǒng)負(fù)載分配上的誤差.
本文中介紹了使用仿真工具OPNET進(jìn)行集群負(fù)載均衡的層次和步驟,并按照這個(gè)步驟對(duì)一個(gè)集群環(huán)境進(jìn)行了仿真,測出隨機(jī)調(diào)度算法、輪轉(zhuǎn)算法、加權(quán)輪轉(zhuǎn)算法在負(fù)載分配上的仿真結(jié)果,并從實(shí)驗(yàn)驗(yàn)證的角度對(duì)3種算法做評(píng)析. 這為研究現(xiàn)實(shí)網(wǎng)絡(luò)中的集群負(fù)載均衡系統(tǒng)提供了一種可行的方法和依據(jù),仿真實(shí)驗(yàn)數(shù)據(jù)也為集群負(fù)載均衡的研究提供了一定的技術(shù)參考 . 因此,利用網(wǎng)絡(luò)仿真軟件 OPNET去研究通信網(wǎng)絡(luò)、設(shè)備、協(xié)議和應(yīng)用有著重要的意義.