廣東工業大學自動化學院 汪文君
基于Nginx服務器集群負載均衡方案的研究和改進
廣東工業大學自動化學院 汪文君
現實應用中,某些負載均衡器的負載均衡分配策略的不足,往往會帶來系統吞吐量、資源利用率、響應請求時間無法滿足需求。通過分析和研究Nginx內置負載均衡算法,提出了一種動態自適應負載均衡算法。通過性能測試實驗結果表明,本文提出的算法能夠提高集群整體性能。
Nginx;負載均衡;模糊集理論;指數平滑
隨著互聯網的普及和快速發展,用戶訪問的劇增對各大互聯網服務商帶來了嚴峻的挑戰。服務器集群技術和負載均衡分配策略的出現極大的解決了這些問題。負載均衡技術通過相應的分發策略[1]將用戶的請求均衡的分配給集群中的服務器處理。
負載均衡的實現方式主要有軟件和硬件兩種。硬件負載均衡解決方案是直接在服務器和外部網絡間安裝負載均衡設備,具有獨立于操作系統,負載均衡策略多樣化、流量管理智能化的特點,可提升整體性能和滿足負載均衡需求。目前市面上的此類產品主要有F5 BIG-IP、AD和思科系列等。軟件負載均衡通過在服務器上的附加軟件來實現負載均衡,具有基于特定環境、配置簡單、使用靈活,成本低廉的特點,主要有LVS、Nginx和HAProxy等。
負載均衡算法研究經歷了靜態算法、動態算法到自適應算法的發展歷程。目前常用的有static、hash、consistent hash、round robin、CARP等算法。這些算法易于實現但是在復雜和異構環境下往往表現不佳。為了提升負載均衡效果研究人員提出了節點性能和負載情況耦合加權算法、遺傳模擬退火算法、模糊集理論,熱力學熵,多元回歸分析等算法。通過實驗測試,這些算法確實能夠更好的發揮節點的性能。但分別存在滯后性、沒有考慮異構系統和故障檢測恢復等情況。本文在Nginx的加權輪詢算法和加權最小連接數算法的基礎上提出一種新的負載均衡算法。該算法考慮各節點異構和負載情況,根據上游節點在處理不同請求內容的性能差異性,自適應的調整節點負載能力。

圖1 加權輪詢算法流程圖
2.1 加權輪詢算法
加權輪詢算法是Nginx服務器缺省的負載均衡算法。不同于早期的加權輪詢算法,現在采用的是一種平滑的加權輪詢算法。相對于早期的輪詢算法,現在采用的輪詢算法能夠較好的平滑上游服務器節點的負載。由于它一種開環控制模型,考慮到客戶端請求處理時間的不同以及節點權值的預設是一種經驗處理,所以它依然不能很好的均衡上游節點的負載。算法的流程圖見圖1。
2.2 加權最小連接數算法
最小連接調度算法考慮到上游服務器節點的動態平衡性,卻不能給異構服務器集群提供更優的服務。加權最小連接數算法(WLC)的節點選取公式:

它的實現主體代碼如下:

在出現多個上游節點S1值相同時,采用加權輪詢算法做二次處理。加權最小連接算法考慮到了上游集群的異構情況,又能動態的反映節點的負載狀態,因此得到了廣泛的應用。和加權輪詢算法相似它的節點權重依賴經驗設定,同時僅僅只參考了連接數而忽略了cpu、I/O利用率,所以不能很好的均衡上游節點的負載。
動態負載均衡策略算法策略:
加權最小連接數算法只考慮連接數不能很好的反映上游服務器資源使用情況。研究人員引入了其它負載向量來標記節點資源使用。常見的靜態向量有:CPU、磁盤I/O、內存、網絡帶寬性能。用Si表示第i個節點。C(Si)、M(Si)、D(Si)、N(Si)分別表示i節點的CPU、I/O、內存、網絡帶寬的性能,KC、KM、KD、KN表示節點向量占負載總向量的比重且KC+KM+KD+KN=1,T為可調常數,分別表示i節點的CPU、I/O、內存、網絡帶寬和連接數的性能占比率。它的計算公式如(2)、(3)、(4)、(5):

W(Si)表示每個節點的缺省權值,它的計算公式:

動態負載向量包括:CPU、I/O、內存、網絡帶寬使用率。WL(Si)表示節點權重消耗量,分別表示節點CPU、I/O、內存、網絡帶寬實時使用率。則消耗的權重有公式(8):

Nginx內置的負載均衡算法并未考慮不同網絡應用的連接對服務器負載的影響。考慮到集群節點異構的現狀存在,因此對不同請求內容的區別對待將作為本文算法考量的一個基準。負載均衡模塊收到用戶的請求并分析其請求內容,針對不同的請求采用不同的分發策略。我們對請求內容的分析劃分有四種類型:

表1 請求內容綜述
針對某種資源使用超過一定值系統的處理能力顯著下降,引入模糊集理論的乘積平均值法來處理這些問題。T(Si)表示為節點i的缺省權值, WC(Si)表示當前權值,公式如下:

再此KC、KM、KD、KN可不再滿足和為1的限制,在某個時間片內可依據請求內容的不同適當的調整這四個可變參數。
自適應估計模型
模糊集理論的乘積平均值法可以一定程度的提高異構集群在處理不同業務的能力,但是KC、KM、KD、KN的參數設定仍然需要一個合理的自適應估計模型。本文引入指數平滑算法做短期預測,指數平滑算法模型公式為:

在負載均衡模塊維護一個FIFO,將請求內容的四種類型分別量化為二維矢量(1,0)、(-1,0)、(0,1)、(0,-1),根據請求的類別將矢量加入FIFO。將FIFO切割成若干等分的序列組,每個序列組二維求和得到yt單元,根據指數平滑算法得到平滑值St。平滑值即是趨勢的預測,它位于坐標系的四區內。

圖2 趨勢分布圖
對KC、KM、KD、KN四個參數我們給定一個初值t。每次更新權值會給予這些系數一個不大于1-t的激勵。Kx、Ky的對應關系見表2:

表2 Kx、Ky對應關系

本文通過Httperf 和 Autobench 對系統進行性能測試, Httperf 不能自動增加 HTTP 負載且產生的測試數據以文字的形式呈現,而 Autobench 是基于 Httperf 的開發的 perf 腳本,通過設置并發連接數增長的步長可以—次實現多輪的Httperf測試。
在本實驗分別對 Nginx 內置加權輪詢算法(WRR)、加權最小連接數算法(WLC)以及本論文所提出的負載均衡算法(DDWRR)進行測試,統計各算法下的的平均響應時間以及并發連接數。

圖3 測試環境示意圖
對三種負載均衡算法請求響應時間和實際并發連接數的測試數據如下所示:

表3 三種算法實際并發連接數

表4 三種算法響應時間(ms)

圖4 三種算法的實際并發測試比對

圖5 三種算法響應時間測試比對
通過實驗測試結果表明,隨著連接數的增加DDWRR算法在實際連接數和響應時間上較之其他兩種算法更加穩定,證明了本文提出的負載均衡算法能一定程度的提升服務器集群性能,是有效可行的。
[1]中國互聯網絡信息中心——中國互聯網絡發展狀況統計報告[EB/OL].2012-01-16.
[2]朱振廣.面向內容分發網絡的動態負載均衡技術研究[D].哈爾濱:哈爾濱工業大學,2010.
[3]蘭翔.基于Nginx的負載均衡技術的研究與改進[D].廣州:華南理工大學軟件學院,2011.
[4]胡利軍.Web集群服務器的負載均衡和性能優化[D].北京:北京郵電大學,2010.
[5]江南煙雨.Nginx學習之六——nginx核心進程模型[EB/ OL].2013.
[6]王輝,李晉光.異構網絡負載均衡算法[J].工業儀表與自動化裝,2014.
[7]陶輝.深入理解nginx:模塊開發與架構解析[M].北京:機械工業出版社,2013,3.
[8]A.Yousofi,M.Banitaba,S.Yazdanpanah.A Novel Method for Achieving Load Balancing in Web Clusters Based on Congestion Control and Cost Reduction[J].IEEE Symposium on Computers&inf ormatics,2011:374-378.

表1 knn算法和kmeans指紋定位法定位數據
實驗結果表明k-means指紋算法能在一定程度上提高定位精度并縮短定位時間。
參考文獻
[1]劉成.LBS定位技術研究與發展現狀[J].導航定位學報,2013,01: 78-83.
[2]Roba Abbas,Katina Michael,MG Michael.The regulatory considerations and ethical dilemmas of location-based services(LBS):A literature review[J].Information Technology & People,2014,271.
[3]顧聰,陳益強,劉軍發,周經野.基于Android平臺的室內LBS系統設計與實現[J].計算機工程與設計,2012,01:396-401.
[4]趙銳,鐘榜,朱祖禮,馬樂,姚金飛.室內定位技術及應用綜述[J].電子科技,2014,03:154-157.
[5]王沁,何杰,張前雄,劉冰峰,于彥偉.測距誤差分級的室內TOA定位算法[J].儀器儀表學報,2011,12:2851-2856.
[6]王敬東,賁偉,王子瑞,馬駿.基于ZigBee技術的TDOA定位系統設計[J].測控技術,2013,03:74-79.
[7]王琦.基于RSSI測距的室內定位技術[J].電子科技,2012,06: 64-66+78.
[8]Chien-Sheng Chen,Yi-Jen Chiu,Jium-Ming Lin.Hybrid TOA/ AOA Schemes for Mobile Location In Cellular Communications Systems[J].International Journal of Ad Hoc,Sensor & Ubiquitous Computing,2010,12.
[9]李偉丹,郝秀娟,胡應添.指紋定位方法研究[J].移動通信,2016,11:60-63+72.
[10]李娟娟,張金藝,張秉煜,周榮俊,唐夏.藍牙4.0標準規范下的模糊指紋定位算法[J].上海大學學報(自然科學版),2013,02:126-131.
汪文君(1989—),男,安徽安慶人,碩士研究生,主要研究方向:計算機網絡與信息處理,并行計算。