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