摘 要:負載均衡在集群系統中的作用日益重要,而現有算法的效率不高、部署復雜的原因限制了其更進一步發展。通過分析不同類型的服務請求對服務器造成不同負載,結合監測服務器的CPU和內存利用的即時性能,在克服了現有負載均衡算法的一些缺陷基礎上提出了一種簡單穩定的基于服務分類和性能監測算法,并通過Web壓力測試實驗比較了該算法在實際應用中的均衡性能。結果驗證了其在服務器集群系統有大的訪問請求量時有突出性能,能夠使集群系統達到良好的負載均衡。
關鍵詞:負載均衡;服務分類;性能監測;壓力測試
中圖分類號:TP302.1文獻標識碼:A
文章編號:1004-373X(2008)24-137-03
Load Balancing Based on Services Sort and Capability Surveillance
LIN Hongxiang,LIU Damao
(College of Physics and Information Engineering,Fuzhou University,Fuzhou,350002,China)
Abstract:The further development of load balancing is blocked by the low efficiency and high complexity of current algorithms,although the importance of load balancing in Server Cluster is increasing day by day.After considering that different serve request makes different load to server and monitoring the instant performance of sever (using rate of CPU and memory),a simple load balancing algorithm which gets over disadvantages of the current algorithms is proposed based on services sort and capability surveillance.The algorithm′s capability is excellence in the Web pressure test.It can make the Server Cluster load balancing usefully,especially when there is a large amount of request.
Keywords:load balancing;services sort;capability surveillance;pressure test
隨著計算機網絡的飛速發展,網絡成為大多數應用的平臺,因而對網絡服務器性能和穩定性的要求也越來越高[1]。正基于此,服務器集群技術得到了飛速發展,并成了實現高性能網絡服務器的有效途徑。可是由于任務分配和服務器的差異使得集群中各服務器的利用率不同,系統整體性能不高。本文提出了一種對集群系統中的服務請求的按照類型進行分類,做系數化分析,然后結合服務器內部實時的性能來判斷服務器的動態負載,最后通過實驗驗證了算法的性能。
1 服務器集群結構分析
1.1 服務器集群的結構
服務器集群系統(Server Cluster)由多臺同構或異構的服務器通過某種方式連接起來協同完成特定的服務或任務[2]。集群的系統結構如圖1所示。當客戶發起服務請求到達時,分配器根據各服務器的負載狀況選擇一臺服務器,將服務轉定向給該服務器,由其響應用戶請求。通過負載均衡,可以使多臺服務器同時為大量用戶提供服務。當某臺服務器出現故障時,負載均衡服務器會停止將服務請求分發至該服務器,轉而由其他服務器繼續提供服務。
圖1 服務器集群系統的體系結構圖
以前的算法大都是由分配器記錄各臺服務器的連接服務請求數量,然后在新的服務請求到來時將其發往連接數最少的服務器。這類算法在異構服務器集群中,由于沒有考慮各臺服務器的差異,系統性能的提高肯定有限[3]。
1.2 集群負載分析
不同類型的請求占用服務器的資源不同,服務器的處理速度、響應時間也不盡相同。Arlitt等人對 Waterloo大學[4]肯尼迪宇航中心等服務器的日志進行分析,分析過程中將日志文件中涉及到的請求文檔分為7種類型。各種文檔的文件類型和在日志文件中所占的比重如表1所示。
表1
顯然不同的服務請求,給服務器帶來的負擔是不相同的。分配器在對集群中各服務器負載分析時,僅根據服務器的連接數來進行判斷是不夠的。因此對不同的服務請求設定不同負載系數,然后統計服務器的最終負載是必要的。
2 基于服務分類和性能監測的負載均衡算法
2.1 算法基本思想
負載均衡是通過采集各服務器的負載信息,進行分析后將新的服務請求送到最適合的服務器,從而提高集群效率。為了能及時地收集負載信息,分配器不再主動查詢,改為被動接受。各服務器在有新的請求到來時,采集自身的負載信息,按照統一的量化標準統計。將新的結果與原來的比較,如果差值超過設定的閥值,就將新的負載結果送到分配器。采集、計算負載的任務由各服務器自身來完成,送到分配器的僅就是一個量化值。原本由分配器完成的任務,分散到集群各服務器。服務器傳給分配器只有一個負載值,從而大大減少了通信量。分配器除在接收到新的負載值時進行重新排序外,就專心完成任務轉交。
集群服務器在統計自身負載的時候,其中關鍵的一項就是服務連接數。如前述可知,不能僅根據連接數量,還應該考慮連接服務內容的不同。以表1的分析可知,可以分析服務器的訪問日志將請求服務分為多個類。將其中某類作為一個標準類,用該標準類測試各臺服務器的處理一個該類服務請求的能力。其他服務類的權值可由其負載比重與標準類的比值,然后進行統計。
集群系統中有n臺服務器,服務請求類別分為m類,則第i臺服務器的負載值為:
Loadi=∑mj=1rjcjεi
1≤i≤n,1≤j≤m;i,j∈N(1)
其中εi表示第i臺服務器處理單位標準類給服務器所添加的負擔,也即服務器i處理單位標準類效能;cj為j類服務請求的連接數,rj表示j類服務請求的權重,并且∑mj=1rj=1。
服務訪問請求對服務器帶來的負載充分反映到服務器的即時性能,即CPU和內存利用率上,但反之則不然。服務器除了響應服務請求外,也運行包括系統、安全、數據庫等多種軟件。這些軟件的運行具有很強的普遍性和隨機性,帶來的負載在其運行期間內是不應被忽略的。負載的計算僅按照連接數計算還是比較粗糙的。所以將反應服務器動態處理性能的CPU使用率和內存利用率同時計入負載值,雖然會帶來一部分的重復計算,但是卻可以更精確地得到動態負載值。由此可得到優化的負載值計算公式:
Loadi=(∑mj=1rjcjεi)λc+uiλu+viλv(2)
其中:
λu+λv+λc=1(3)
ui,vi分別表示服務器i的CPU使用率和內存利用率;λu和λv分別表示CPU使用率和內存利用率在計算服務器的負載值Load中所占比重;λc表示連接數在計算服務器的負載值Load中所占比重。
2.2 算法的實現策略
在集群正常工作前,要進行集群部署、檢測等一系列初始化工作。和負載平衡相關的是進行軟件部署,測試取得一些重要數據。實現的步驟如下:
(1)由分配器進行測算,取得集群中各服務器的單位標準類連接服務的負載值εi和負載更新閥值τi;
(2)進行服務器的日志統計,將服務請求分為m類,這個也可以由管理員設置得到,特別是在服務器開始工作沒有日志的情況下;
(3) 根據式(1)得到服務器負載值,送到分配器;
(4) 分配器維護一個Loadi列表,進行排序。
集群服務器系統開始工作后,分配器主要完成負載值排序和將服務請求轉交給負載值最小的服務器2項工作。服務器上的均衡軟件的算法流程圖如圖2所示。
由分配器進行Loadi列表排序,新的請求服務到來時將其轉到集群中負載值最低的服務器上,備用分配器上備份一個相同的負載列表;
服務器在接受新的服務請求后,重新計算負載值Loadi,將新負載值與原負載值比較,如果差值大于τi,則將新負載值送到分配器,否則僅用新負載值替代原值;
服務器在時間T內接受新的請求,則按照式(2)重新計算負載值,并送到分配器內。如果分配器在T時間內沒有收到新的負載值,則進行專門檢測,以確定該服務器是否出現故障。如果出現故障,則將該服務器上維持的服務進行轉移。
圖2 服務器i的工作流程圖
3 實驗結果分析
Web壓力測試是檢測負載均衡性能的一種有效實驗方法。通過外部對集群系統進行一系列訪問,測試出完成服務請求的時間作為衡量指標。實驗中采用Web-CT作為壓力測試工具對集群系統進行一系列的訪問,測試出系統完成任務所需要的最少時間。為了對算法的有效性進行比較驗證,同時測試了循環輪轉算法、最少連接算法。由實驗室自寫的實現本文算法的Web訪問插件(考慮到分配器列表維護的原因沒有包括故障檢測與處理部分)。實驗中對3種算法進行測試,研究各算法在Web壓力從小到大逐漸變時的平均響應時間。
3種算法為:
循環輪轉算法:分配器將服務請求輪流轉交給集群中的服務器;
最少連接算法:分配器僅僅統計集群系統中個服務器的連接數,將新到來的服務請求轉交給連接數最少的服務器;
實現的算法:如上文所討論的改進算法,λu,λv和λc分別取為10%,10%和80%。對實驗中的系數實驗的結果如圖3所示。負載均衡分別采用式(1)和式(2),并將服務器集群中的一些服務器進行殺毒檢測,播放視頻文件等應用服務,實驗結果如圖4所示。分析以上實驗分析可知:
訪問的服務請求量較少時,改進的算法性能反而比較差。因為在服務訪問請求量較少時,改進算法的動態檢測和復雜計算反而影響了負載的分配,降低了均衡效能。隨著訪問請求的增加,改進算法的性能就與最少連接算法相當,循環輪轉算法的性能就比較差了。當訪問請求達到一定程度后,改進算法的性能就明顯優于其他的兩種算法。實驗結果驗證了改進的均衡算法的性能較好,尤其是在服務器集群系統有很大訪問量時均衡效率更為突出。
圖3 三種算法的壓力測試結果比較
圖4的實驗結果說明在有較大的服務請求時,采用式(2)作為負載均衡的算法的比采用式(1)的更能高效。而式(2)正是考慮了對計算機系統性能進行了實時監測。但在服務請求量較小時,式(2)相對復雜計算和所需參數采集反而成為負擔。在實驗結果中,在壓力測試集密度較小時,式(2)的平均響應時間大于式(1)正說明了這一點。而且在λu,λv和λc取不同的值時對結果有不同的影響,這就需要一個動態分析得到最優解。所以在實際應用中應該根據實際情況,權衡復雜性和效能選用最適合的負載均衡算法。
圖4 兩種公式的壓力測試結果比較
4 結 語
隨著集群系統的應用越來越廣,為了提高集群的系統效率,負載均衡的重要性也更加突出。在此提出了一種基于服務請求分類和性能監測的負載均衡算法,并且充分考慮了服務器內部運行狀況,動態地測算計算機內部負載。實驗結果驗證了改進的算法有較好的性能,能較好地實現負載均衡,提高集群的系統效率。
參考文獻
[1]Andresen D,Yang T,Holmedahl V,et al.SWeb:Toward a Scalable World Wide Web Server on Multi-computers[A].In Proceeding of the 10th International Symposium on Parallel Processing (ISSP′96).1996:850-856.
[2]Devine,Karen D Boman,Erik G,et al.New Challenges in Dynamic Load Balancing[J].Applied Numerical Mathematics,SPEC.ISS.,2005,52(2):133-152.
[3]趙宏,林建,朱淼良.針對Web服務的動態負載平衡模型.計算機工程與設計,2006(21):4 108-4 110.
[4]Arlitt M,Williamson C.Web Server Workload Characterization:the Search for Invariants[A].In Proceedings of the ACM SIGMETRICS Conference.1996:126-137.
[5]林闖.隨機Petri網和系統性能評價[M].北京:清華大學出版社,2000.
[6]陳志剛,李登,曾志文.分布式系統中一種動態負載均衡策略相關模型及算法研究 [J].小型微型計算機系統,2002,23 (12):1 434-1 437.
[7]劉振英,方濱興,胡銘曾,等.一個有效的動態負載平衡方法[J].軟件學報,2001,12(4):563-569.
[8]廖羽,戴瑜興.基于內容的分布式Web服務器負載平衡算法[J].電子學報,2006,34(6):1 053-1 057.
[9]向建軍,白欣,左繼章.一種用于實時集群的多任務負載均衡算法[J].計算機工程,2003,29(12):36-38.
[10]王曉川,葉超群,金士堯.一種基于分布式調度機制的集群體系結構[J].計算機工程,2002,28(3):131-133.
[11]王玥,蔡皖東,段琪.一種自適應動態負載均衡算法[J].計算機工程與應用,2006,42(21):121-123.
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文