摘要:介紹了Web服務器集群技術和負載均衡,針對靜態的加權輪詢算法和動態加權最小連接數算法的不足,提出一種基于動態反饋的加權最小連接數算法,該算法根據服務器的實時負載動態地改變權值的大小,再根據最小連接數算法來分配新的連接請求。通過網絡仿真軟件OPNET對這3種算法進行仿真、對比得出,新的算法能降低HTTP響應時間、提高負載均衡效率。
關鍵詞:Web服務器集群;負載均衡;動態反饋;OPNET
0引言
隨著互聯網的快速發展,用戶數量不斷增多,越來越多的網站在面對高并發數據請求時出現頁面加載過慢和頁面無響應的情況。對于服務器負載過大的情況有兩類解決方式,一種是單個服務器的硬件優化,一種是采用集群的方式來實現。硬件優化是提高服務器的配置,這種方式往往價格比較高昂。集群是一組相互獨立、通過高速網絡互連且以單一系統的模式加以管理的計算機。通過負載均衡來合理分配任務,提高網絡服務質量,充分利用服務器的各種資源[1]。
服務器集群下的負載均衡技術有多種實現算法,主要分為靜態算法和動態算法[2-3]。靜態算法主要是按固定的比例來分配任務,如加權輪詢(WRR)算法。動態算法根據服務器的當前狀態來分配任務,如加權最小連接數(WLC)算法[4]。
在實際場景中,服務器群組的性能差異比較大,靜態方法無法得到一個準確的比值來反映實時的服務器狀況。而且在負載變化較大時,動態方法用當前連接數來表示當前負載狀況并不準確[5]。對此文獻[6]提出了一種自適應權值的算法,當負載均衡器收到任務請求時動態更新節點權值,通過權值來反映實時負載,但是存在計算開銷太大的問題。文獻[7]提出了一種動態反饋算法,對實時負載量化,將量化的值與閾值比較,然后反饋新的權值,但是它的閾值是靜態的,造成反饋的權值誤差比較大。文獻[8]提出了一種預測算法,使用線性方程來預測實時負載,但是存在一定的滯后性。
本文結合靜態的權值輪詢算法和動態的最小連接數算法提出一種動態反饋的加權最小鏈接算法,通過對服務器的性能和實現負載來動態調整節點的權值,再結合節點當前連接數來合理分配任務。
1傳統算法
11加權輪詢算法
加權輪詢算法是對輪詢算法的一種改進,它針對服務器性能不一致的情況,按照性能的高低給各個服務器分配不同的權值。性能高的服務器它的權值相對比較高,能接收的請求就比較多;性能低的服務器它的權值相對比較低,能接收的請求就少。
假設這n個服務器集群的集合用S=(S1,S2…Sn)來表示,第i臺服務器的初始權值為W(Si) (1≤i≤n),記錄上一次負載均衡器接受到請求連接選擇的節點i和當前權值cw。當前服務器的最大權值為max(S)。gcd(S)表示的是所有服務器權值的最大公約數[9]。算法執行前先將變量i和cw初始化為-1和0,流程如圖1所示。
加權輪詢算法特點:在輪詢算法的基礎上加入了權值的概念,使用權值來表示每臺服務器之間的性能差異,但是沒有考慮當前連接數和當前的服務器狀態,不能實時反映服務器的狀態,屬于靜態的負載均衡算法,具有局限性。
12加權最小連接數算法
加權最小連接數算法使用權值表示各個服務器性能,當負載均衡器收到新的任務請求時,他會通過各個服務器當前的連接數和權值的比值大小來判斷,選擇比值最小的服務器來響應任務請求。
同加權輪詢算法一樣服務器集合為S=(S1,S2…Sn),第i臺服務器初始權值為W(Si) (1≤i≤n),加權最小連接數算法還記錄了各個節點的當前連接數C(Si)。
當負載均衡器收到一個新的連接請求時,它將根據以下規則選擇服務器Sm:
C(Sm)/W(Sm)=min{C(Si)/W(Si)}
其中i∈[1,2,…,n],W(Si)≠0。
考慮到除法所需的CPU周期比乘法多,所以判斷條件C(Sm)/W(Sm)>C(Si)/W(Si)可以進一步表示為C(Sm)*W(Si)>C(Si)*W(Sm),當服務器的權值為零時,服務器不被調度[10]。流程圖如圖2所示。
加權最小連接數算法特點:考慮了服務器的性能和負載均衡過程中各個服務器,充分利用了服務器資源。但是僅憑當前連接數來反映服務器的負載狀態顯得不夠合理,而且權值的設置是靜態的,不能通過實時的調整來反映當前的負載能力。
2算法改進
上述算法都沒有考慮服務器的實時負載狀態,存在權值設置過于主觀等問題。為此提出如下改進:
(1)收集服務器的當前負載,這里選擇了當前服務器的CPU利用率、內存利用率、網絡帶寬利用率這3個指標,在HTTP請求下服務器負載主要與這3個指標有關。
(2)計算出各個節點的實時負載,周期性地反饋到負載均衡器。
(3)將負載均衡器接收到的實時負載信息與閾值進行對比,然后動態地改變各個服務器的節點的權值,使更新的權值能準確地表示服務器的當前負載。
(4)將新的權值帶入到加權最小連接數算法中以確定選擇哪個服務器節點來接收新的任務請求。
21服務器負載的計算
在HTTP請求中,影響負載的主要因素是服務器的CPU利用率、內存利用率和網絡帶寬利用率。節點Si的負載L(Si)主要由服務器CPU利用率Ci、內存利用率Mi和網絡帶寬利用率Bi來決定。使用式(1)來計算當前負載:
L(Si)=k1Ci+k2Mi+k3Bi,k1+k2+k3=1(1)
其中k1,k2,k3分別表示了各自指標的所占權重,通過這種方式來更準確地反映服務器的當前負載。
22周期性反饋
通過負載均衡器周期性地接收到服務器的當前負載,根據負載的大小與閾值對比來改變權值的大小。在這里閾值隨著傳過來的負載大小的改變而改變。將閾值用當前所有負載的均值來表示:
當L(Si)≤L時,判斷該服務器當前的負載狀況為低負載,說明此服務器的負載相對較輕,這時應該增加它的權值。當L(Si)>L時,判斷該節點當前的負載狀況為高負載,說明此服務器的負載相對較重,這時應該減少它的權值。為了得到新的權值,本文中引入了一個修正變量σ,由式(3)計算得到:
(3)
其中W(Si)表示第i臺服務器的初始權值,C(Si)表示該臺服務器的當前連接數,而且權值W(Si)不能為零。
節點新的權值就可以表示為:
周期性地獲取節點的新權值W(i)′,選擇當前連接數與更新后的權值的比值最小的服務器來接受新的連接請求。即服務器S(m)接受新的請求,此時要滿足:
C(Sm)/W(Sm)′=min{C(Si)/W(Si)′}(5)
3通過OPNET軟件對三種算法性能進行分析
OPNET是一款應用與網絡仿真軟件,它支持大量的網絡通信協議和模擬系統分發,通過對離散事件的仿真來分析系統的行為和性能[11]。
OPNET網絡仿真可以分為網絡層、節點層、進程層[12]。集群負載均衡的3層建模設計如下:
圖3客戶端拓撲結構圖(1)網絡建模:為了測試加權輪詢算法(WRR)、加權最小連接數算法(WLC)、改進后的動態反饋算法(DF)這3種算法的效果,選擇了4臺服務器集群,分別是server1、server2、server3、server4,通過100M線路連接負載均衡器。由6個子網組成客戶端,cilent1~client5表示內部子網,client6表示外部子網,每個子網都包含45個用戶終端,客戶端拓撲結構如圖3,整個負載均衡系統的網絡拓撲結構如圖4。
(2)節點建模:這里最主要的是對負載均衡器建模,它遵循OSI的七層建模規則,從低到高分別是:物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層與應用層,由進程處理模型和隊列模型組成,采用全雙工的數據包進行連接,數據包傳送按照7層機制來封裝[13]。負載均衡器的節點模型如圖5。
(3)進程建模:進程層是最底層,它可以描述進程的邏輯,如通信協議、算法、統計量和操作系統等。通過狀態轉移圖來描述進程模型的邏輯,通過連線來表示狀態的轉移[14]。在節點編輯器中載入加權輪詢算法(WRR)、加權最小連接數算法(WLC)、改進的動態反饋算法(DF)。
為了檢驗算法在集群系統中的均衡效果,使用4臺性能不一樣的服務器組成集群,性能比例為4 ∶7 ∶10 ∶13。選擇仿真設置Application_Config中的HTTP應用,模擬客戶端向服務器發送HTTP請求[15]。選擇HTTP場景為HTTP_IMAGE,模擬一種HTTP圖片請求場景??蛻舳擞?70個節點組成,向負載均衡器發送相同請求。為了簡化運算,參數k1,k2,k3的取值分別為05,03,02,仿真時間為35 min,更新時間設置為10 s。選取HTTP響應時間、CPU利用率為衡量算法負載均衡效果的統計量[16]。實驗仿真效果如圖6~9?! ?/p>
從圖6可以看出在HTTP請求下,DF算法的HTTP平均響應時間在025 s左右,比WLC算法和WRR算法的效果好。
從圖6可以看出在HTTP請求下,DF算法的HTTP平均響應時間在025 s左右,比WLC算法和WRR算法的效果好。
從圖7~9可以看出,DF算法中4臺服務器的CPU利用率保持在38%左右,但是WRR和WLC算法的CPU利用率比較分散,這表現動態反饋的算法對系統資源的利用比較均衡。
綜上可看出DF算法相對于WRR算法和WLC算法,其負載均衡具有更好效果。
4結束語
Web服務器集群的核心是負載均衡算法。本文提出的基于動態反饋的負載均衡算法與加權輪詢算法和加權最小連接數算法相比,考慮了服務器實時負載對負載均衡的影響,引入了周期性反饋機制來動態地改變權值的大小,實時反映負載狀況,并根據實時負載情況將新的權值帶入最小連接數算法中來判斷選擇哪個服務器接受新的連接請求。根據仿真結果可以得到,該算法能有效地降低HTTP的響應時間,均衡各服務器的CPU利用率。
參考文獻
?。?] 張玉芳, 魏欽磊, 趙膺. 基于負載權值的負載均衡算法[J]. 計算機應用研究, 2012, 29(12): 4711-4713.
?。?] 胡志剛, 張艷平. 基于目標約束的分層動態負載均衡算法[J]. 計算機應用研究, 2011, 28(3): 1105-1107.
?。?] BRYHNI H. A comparison of load balancing techniques for scalable Web servers[J]. IEEE Network, 2000, 14(4): 58-64.
[4] 張前進, 齊美彬, 李莉. 基于應用層負載均衡策略的分析與研究[J]. 計算機工程與應用, 2007, 43(32): 138-142.
[5] 買京京, 龔紅艷, 宋純賀. 集群系統中的動態反饋負載均衡策略[J]. 計算機工程, 2008, 34(16): 114-115.
?。?] 耿強, 黃雪琴. 一種基于自適應權值的負載均衡算法[J]. 科學技術與工程, 2013, 13(14): 4079-4081.
?。?] LI W Z, SHI H Y. Dynamic load balancing algorithm based on FCFS[C]. 4th International Conference on Innovative Computing, Information and Control, IEEE, 2009, 10(2): 75-80.
?。?] Yu Ying, Yang Pin, Liang Gang. Load balancing algorithm based on prediction for parallel instrusion detection system[J]. Computer Engineering & Design, 2011, 32(8): 2565-2568.
?。?] 莊晏軒. 服務器集群中基于動態反饋的負載均衡算法[D]. 大連: 大連理工大學, 2014.
?。?0] 王春娟, 董麗麗, 賈麗. Web集群系統的負載均衡算法[J]. 計算機工程, 2010, 36(2): 102-104.
?。?1] 陳敏. OPNET網絡仿真[M]. 北京: 清華大學出版社, 2004.
?。?2] 陳海紅. OPNET網絡仿真及分析[J]. 赤峰學院學報, 2010, 26( 5): 23-25.
?。?3] 廖艷達. 基于Opnet的Web集群負載均衡仿真研究[D]. 桂林: 廣西師范大學, 2007.
?。?4] 史鴻雁, 李海生. 基于OPNET的集群負載均衡仿真[J]. 北京工商大學學報, 2010, 28(1): 79-82.
?。?5] 操驚雷, 周建國, 秦磊華. 基于OPNET的網絡壓力仿真[J]. 計算機工程, 2009, 35(23): 115-117.
[16] 張曉艷,扈羅全,汪一鳴,等.基于OPNET的自組織認知無線網絡建模[J].微型機與應用,2013,32(23):48-51,54.