馬健 劉曉霞

摘 要:該文研究在運營商營業web服務器的特殊前提下,以負載均衡最優化為需求,以F5負載均攤服務器為研究平臺,分析常用的輪循、權重輪循、響應速度、連接數、處理能力五種負載均衡算法在這種特殊需求下的表現,找到實用性較強的處理能力均衡算法。最終打破負載均衡固有思維,在以IP地址為單位的均衡算法之外,提出了以JSESSION_ID為單位的新的負載均衡算法——JSESSION_ID算法。該算法在F5負載均衡服務器性能強大的情況下,表現遠遠優于任何算法。
關鍵詞:web服務器 負載均衡 處理能力均衡算法 JSESSION_ID算法
中圖分類號:TP368 文獻標識碼:A 文章編號:1672-3791(2014)12(a)-0011-02
目前各電信運營商營業網點的數量星羅棋布,提供的服務越來越多樣化。BS架構的web頁面登陸方式以其對終端要求低、無需安裝維護客戶端、操作界面友好,成為主流的營業服務系統基礎架構。合理利用web服務器,必須用到負載均衡算法。
1 負載均衡算法在電信運營商營業系統中的意義
負載均衡(LB Load Balance)建立在現有網絡結構之上。它提供了一種廉價有效透明的方法,擴展網絡設備和服務器的帶寬、增加吞吐量、加強網絡數據處理能力、提高網絡的靈活性和可用性。
營業web服務一般采用本地負載均衡(Local LB)。這種方案能有效地解決數據流量過大、網絡負荷過重的問題,并且即使是服務器擴充升級,也只是簡單地增加一個新的服務器到服務群中,而不需改變現有網絡結構、停止現有服務。
2 五種常用的LB算法在實際應用中的表現與選擇
在實際的應用過程中,選擇適合的LB算法有利于web服務器合理利用。
2.1 LB算法的基本原則
會話保持策略。即:訪問終端在一定時間(可在LB服務器上設定)內再次訪問的情況下,會優先于LB算法,將訪問終端直接指向上次訪問的web服務器。
2.2 營業web服務與網站web的差異
(1)服務器承載內容高度統一。營業web服務承載內容相對穩定,且內容高度一致,多服務器的目的僅是承載大量終端的訪問及數據交互。
(2)服務器面向人群相對固定。營業web服務僅允許營業人員通過固定終端進行訪問,持續登錄,對“會話保持”的要求較高。
(3)數據傳輸量大且集中。營業web提供的業務受理和查詢的功能。每臺訪問終端在短時間內瞬時產生大量的數據傳輸和鏈接請求。
2.3 各LB算法在營業web服務使用中的情況
(1)輪循均衡(Round Robin):將來自網絡的請求,從1至N循環分配給服務器組的服務器(N為服務器數量)。RR算法為最基本的均衡算法。
(2)權重輪循均衡(Weighted RR):在RR算法的基礎上,根據服務器的不同處理能力,給每個服務器分配不同的權值,使其能夠接受相應權值數的服務請求。WRR算法能確保高性能的服務器得到更高的使用率,避免低性能的服務器負載過重。
(3)響應速度均衡(Response Time):LB設備對內部各營業web服務器發出一個探測請求(例如登陸頁面檢測),根據響應時間來決定服務器響應客戶端服務請求的順序。
(4)最少連接數均衡(Least Connection):該算法根據當前該服務器正在處理的連接數量,把新請求分配給連接數最少的服務器。這種算法以一個瞬時值作為分配標準,顯然不是一個好的選擇。
(5)處理能力均衡(Predictive Observed):此種均衡算法將把服務請求分配給內部處理負荷(根據服務器CPU型號、CPU數量、內存大小及當前連接數等換算而成)最輕的服務器。
由于考慮到了內部服務器的處理能力及當前網絡運行狀況,所以PO算法相對來說更加精確。這種算法是最常用的,也是最有效率的。
3 提出新的LB算法——JSESSION_ID算法。
在實際工作中,我們發現了僅依靠以上五種算法無法完美解決問題。如當web服務器不穩定,發生宕機,重新啟動后,根據“會話保持”原則,目前的LB算法較難將負載壓力分配到重啟后的服務器上來。
3.1 JSESSION_ID算法的提出
根據每個web服務器的終端頁面有一個單獨的JSESSION_ID,我們嘗試使用它作為訪問的唯一特征值,取代原來的IP地址,我們稱之為“JSESSION_ID算法”,期望可以解決以上問題。同一IP的營業終端發起的鏈接,每個頁面發起鏈接訪問的JSESSION_ID是不同的,因此每個鏈接可作為獨立的訪問被分配,也就是說:
(1)同一終端打開的多個頁面,有可能被分配到不同web服務器上。而不是集中到同一web服務器上,對一臺服務器施加壓力。
(2)由于每次新打開頁面的JSESSION_ID都是重新生成的,所以不會受到“會話保持”原則的影響,按照目前各web服務器鏈接數量平均分配鏈接訪問壓力,對上面提到的宕機重啟的web服務器會在最短時間內分配合適數量的鏈接,達到負載均衡的目的。
3.2 JSESSION_ID算法代碼
在F5負載均衡服務器上試編寫算法如下:
when HTTP_REQUEST {
if{[HTTP::cookie exists "JSESSIONID"] }
{#log local0."[HTTP::cookie "JSESSIONID"]"
persist uie [string tolower [HTTP::cookie "JSESSIONID"]] 3600}
else { set jsess
[findstr [string tolower [HTTP::path]] "JSESSIONID=" 11]
if { $jsess != "" } { persist uie $jsess } } }
when HTTP_RESPONSE {
if { [HTTP::cookie exists "JSESSIONID"] }
{ persist add uie [string tolower [HTTP::cookie "JSESSIONID"]] 3600}}
3.3 實驗結果及分析
給出三類算法在實際應用中的鏈接LB效果,見表1。從表1可以看出,JSESSION_ID算法的負載分攤結果非常均衡,達到了理想的效果。
4 結語
在常用的五種LB算法中,處理能力均衡表現是最穩定的。而我們所提出的JSESSION_ID算法在負載均衡服務器性能強大的情況下,其表現遠遠優于任何算法。
參考文獻
[1] 張靖.Web服務器負載均衡研究[J].電子科技大學學報,2004(14):2-3.
[2] 趙成貴.互連網絡負載平衡理論與算法[M].北京:科學出版社,2011(5).
[3] tomcat集群與負載均衡.http://blog.chinaunix.net/u/19228/showart_171533.html,2006.endprint