廣東工業(yè)大學(xué)自動化學(xué)院 汪文君
基于Nginx服務(wù)器集群負(fù)載均衡方案的研究和改進(jìn)
廣東工業(yè)大學(xué)自動化學(xué)院 汪文君
現(xiàn)實應(yīng)用中,某些負(fù)載均衡器的負(fù)載均衡分配策略的不足,往往會帶來系統(tǒng)吞吐量、資源利用率、響應(yīng)請求時間無法滿足需求。通過分析和研究Nginx內(nèi)置負(fù)載均衡算法,提出了一種動態(tài)自適應(yīng)負(fù)載均衡算法。通過性能測試實驗結(jié)果表明,本文提出的算法能夠提高集群整體性能。
Nginx;負(fù)載均衡;模糊集理論;指數(shù)平滑
隨著互聯(lián)網(wǎng)的普及和快速發(fā)展,用戶訪問的劇增對各大互聯(lián)網(wǎng)服務(wù)商帶來了嚴(yán)峻的挑戰(zhàn)。服務(wù)器集群技術(shù)和負(fù)載均衡分配策略的出現(xiàn)極大的解決了這些問題。負(fù)載均衡技術(shù)通過相應(yīng)的分發(fā)策略[1]將用戶的請求均衡的分配給集群中的服務(wù)器處理。
負(fù)載均衡的實現(xiàn)方式主要有軟件和硬件兩種。硬件負(fù)載均衡解決方案是直接在服務(wù)器和外部網(wǎng)絡(luò)間安裝負(fù)載均衡設(shè)備,具有獨立于操作系統(tǒng),負(fù)載均衡策略多樣化、流量管理智能化的特點,可提升整體性能和滿足負(fù)載均衡需求。目前市面上的此類產(chǎn)品主要有F5 BIG-IP、AD和思科系列等。軟件負(fù)載均衡通過在服務(wù)器上的附加軟件來實現(xiàn)負(fù)載均衡,具有基于特定環(huán)境、配置簡單、使用靈活,成本低廉的特點,主要有LVS、Nginx和HAProxy等。
負(fù)載均衡算法研究經(jīng)歷了靜態(tài)算法、動態(tài)算法到自適應(yīng)算法的發(fā)展歷程。目前常用的有static、hash、consistent hash、round robin、CARP等算法。這些算法易于實現(xiàn)但是在復(fù)雜和異構(gòu)環(huán)境下往往表現(xiàn)不佳。為了提升負(fù)載均衡效果研究人員提出了節(jié)點性能和負(fù)載情況耦合加權(quán)算法、遺傳模擬退火算法、模糊集理論,熱力學(xué)熵,多元回歸分析等算法。通過實驗測試,這些算法確實能夠更好的發(fā)揮節(jié)點的性能。但分別存在滯后性、沒有考慮異構(gòu)系統(tǒng)和故障檢測恢復(fù)等情況。本文在Nginx的加權(quán)輪詢算法和加權(quán)最小連接數(shù)算法的基礎(chǔ)上提出一種新的負(fù)載均衡算法。該算法考慮各節(jié)點異構(gòu)和負(fù)載情況,根據(jù)上游節(jié)點在處理不同請求內(nèi)容的性能差異性,自適應(yīng)的調(diào)整節(jié)點負(fù)載能力。
圖1 加權(quán)輪詢算法流程圖
2.1 加權(quán)輪詢算法
加權(quán)輪詢算法是Nginx服務(wù)器缺省的負(fù)載均衡算法。不同于早期的加權(quán)輪詢算法,現(xiàn)在采用的是一種平滑的加權(quán)輪詢算法。相對于早期的輪詢算法,現(xiàn)在采用的輪詢算法能夠較好的平滑上游服務(wù)器節(jié)點的負(fù)載。由于它一種開環(huán)控制模型,考慮到客戶端請求處理時間的不同以及節(jié)點權(quán)值的預(yù)設(shè)是一種經(jīng)驗處理,所以它依然不能很好的均衡上游節(jié)點的負(fù)載。算法的流程圖見圖1。
2.2 加權(quán)最小連接數(shù)算法
最小連接調(diào)度算法考慮到上游服務(wù)器節(jié)點的動態(tài)平衡性,卻不能給異構(gòu)服務(wù)器集群提供更優(yōu)的服務(wù)。加權(quán)最小連接數(shù)算法(WLC)的節(jié)點選取公式:
它的實現(xiàn)主體代碼如下:
在出現(xiàn)多個上游節(jié)點S1值相同時,采用加權(quán)輪詢算法做二次處理。加權(quán)最小連接算法考慮到了上游集群的異構(gòu)情況,又能動態(tài)的反映節(jié)點的負(fù)載狀態(tài),因此得到了廣泛的應(yīng)用。和加權(quán)輪詢算法相似它的節(jié)點權(quán)重依賴經(jīng)驗設(shè)定,同時僅僅只參考了連接數(shù)而忽略了cpu、I/O利用率,所以不能很好的均衡上游節(jié)點的負(fù)載。
動態(tài)負(fù)載均衡策略算法策略:
加權(quán)最小連接數(shù)算法只考慮連接數(shù)不能很好的反映上游服務(wù)器資源使用情況。研究人員引入了其它負(fù)載向量來標(biāo)記節(jié)點資源使用。常見的靜態(tài)向量有:CPU、磁盤I/O、內(nèi)存、網(wǎng)絡(luò)帶寬性能。用Si表示第i個節(jié)點。C(Si)、M(Si)、D(Si)、N(Si)分別表示i節(jié)點的CPU、I/O、內(nèi)存、網(wǎng)絡(luò)帶寬的性能,KC、KM、KD、KN表示節(jié)點向量占負(fù)載總向量的比重且KC+KM+KD+KN=1,T為可調(diào)常數(shù),分別表示i節(jié)點的CPU、I/O、內(nèi)存、網(wǎng)絡(luò)帶寬和連接數(shù)的性能占比率。它的計算公式如(2)、(3)、(4)、(5):
W(Si)表示每個節(jié)點的缺省權(quán)值,它的計算公式:
動態(tài)負(fù)載向量包括:CPU、I/O、內(nèi)存、網(wǎng)絡(luò)帶寬使用率。WL(Si)表示節(jié)點權(quán)重消耗量,分別表示節(jié)點CPU、I/O、內(nèi)存、網(wǎng)絡(luò)帶寬實時使用率。則消耗的權(quán)重有公式(8):
Nginx內(nèi)置的負(fù)載均衡算法并未考慮不同網(wǎng)絡(luò)應(yīng)用的連接對服務(wù)器負(fù)載的影響。考慮到集群節(jié)點異構(gòu)的現(xiàn)狀存在,因此對不同請求內(nèi)容的區(qū)別對待將作為本文算法考量的一個基準(zhǔn)。負(fù)載均衡模塊收到用戶的請求并分析其請求內(nèi)容,針對不同的請求采用不同的分發(fā)策略。我們對請求內(nèi)容的分析劃分有四種類型:
表1 請求內(nèi)容綜述
針對某種資源使用超過一定值系統(tǒng)的處理能力顯著下降,引入模糊集理論的乘積平均值法來處理這些問題。T(Si)表示為節(jié)點i的缺省權(quán)值, WC(Si)表示當(dāng)前權(quán)值,公式如下:
再此KC、KM、KD、KN可不再滿足和為1的限制,在某個時間片內(nèi)可依據(jù)請求內(nèi)容的不同適當(dāng)?shù)恼{(diào)整這四個可變參數(shù)。
自適應(yīng)估計模型
模糊集理論的乘積平均值法可以一定程度的提高異構(gòu)集群在處理不同業(yè)務(wù)的能力,但是KC、KM、KD、KN的參數(shù)設(shè)定仍然需要一個合理的自適應(yīng)估計模型。本文引入指數(shù)平滑算法做短期預(yù)測,指數(shù)平滑算法模型公式為:
在負(fù)載均衡模塊維護(hù)一個FIFO,將請求內(nèi)容的四種類型分別量化為二維矢量(1,0)、(-1,0)、(0,1)、(0,-1),根據(jù)請求的類別將矢量加入FIFO。將FIFO切割成若干等分的序列組,每個序列組二維求和得到y(tǒng)t單元,根據(jù)指數(shù)平滑算法得到平滑值St。平滑值即是趨勢的預(yù)測,它位于坐標(biāo)系的四區(qū)內(nèi)。
圖2 趨勢分布圖
對KC、KM、KD、KN四個參數(shù)我們給定一個初值t。每次更新權(quán)值會給予這些系數(shù)一個不大于1-t的激勵。Kx、Ky的對應(yīng)關(guān)系見表2:
表2 Kx、Ky對應(yīng)關(guān)系
本文通過Httperf 和 Autobench 對系統(tǒng)進(jìn)行性能測試, Httperf 不能自動增加 HTTP 負(fù)載且產(chǎn)生的測試數(shù)據(jù)以文字的形式呈現(xiàn),而 Autobench 是基于 Httperf 的開發(fā)的 perf 腳本,通過設(shè)置并發(fā)連接數(shù)增長的步長可以—次實現(xiàn)多輪的Httperf測試。
在本實驗分別對 Nginx 內(nèi)置加權(quán)輪詢算法(WRR)、加權(quán)最小連接數(shù)算法(WLC)以及本論文所提出的負(fù)載均衡算法(DDWRR)進(jìn)行測試,統(tǒng)計各算法下的的平均響應(yīng)時間以及并發(fā)連接數(shù)。
圖3 測試環(huán)境示意圖
對三種負(fù)載均衡算法請求響應(yīng)時間和實際并發(fā)連接數(shù)的測試數(shù)據(jù)如下所示:
表3 三種算法實際并發(fā)連接數(shù)
表4 三種算法響應(yīng)時間(ms)
圖4 三種算法的實際并發(fā)測試比對
圖5 三種算法響應(yīng)時間測試比對
通過實驗測試結(jié)果表明,隨著連接數(shù)的增加DDWRR算法在實際連接數(shù)和響應(yīng)時間上較之其他兩種算法更加穩(wěn)定,證明了本文提出的負(fù)載均衡算法能一定程度的提升服務(wù)器集群性能,是有效可行的。
[1]中國互聯(lián)網(wǎng)絡(luò)信息中心——中國互聯(lián)網(wǎng)絡(luò)發(fā)展?fàn)顩r統(tǒng)計報告[EB/OL].2012-01-16.
[2]朱振廣.面向內(nèi)容分發(fā)網(wǎng)絡(luò)的動態(tài)負(fù)載均衡技術(shù)研究[D].哈爾濱:哈爾濱工業(yè)大學(xué),2010.
[3]蘭翔.基于Nginx的負(fù)載均衡技術(shù)的研究與改進(jìn)[D].廣州:華南理工大學(xué)軟件學(xué)院,2011.
[4]胡利軍.Web集群服務(wù)器的負(fù)載均衡和性能優(yōu)化[D].北京:北京郵電大學(xué),2010.
[5]江南煙雨.Nginx學(xué)習(xí)之六——nginx核心進(jìn)程模型[EB/ OL].2013.
[6]王輝,李晉光.異構(gòu)網(wǎng)絡(luò)負(fù)載均衡算法[J].工業(yè)儀表與自動化裝,2014.
[7]陶輝.深入理解nginx:模塊開發(fā)與架構(gòu)解析[M].北京:機(jī)械工業(yè)出版社,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指紋定位法定位數(shù)據(jù)
實驗結(jié)果表明k-means指紋算法能在一定程度上提高定位精度并縮短定位時間。
參考文獻(xiàn)
[1]劉成.LBS定位技術(shù)研究與發(fā)展現(xiàn)狀[J].導(dǎo)航定位學(xué)報,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]顧聰,陳益強(qiáng),劉軍發(fā),周經(jīng)野.基于Android平臺的室內(nèi)LBS系統(tǒng)設(shè)計與實現(xiàn)[J].計算機(jī)工程與設(shè)計,2012,01:396-401.
[4]趙銳,鐘榜,朱祖禮,馬樂,姚金飛.室內(nèi)定位技術(shù)及應(yīng)用綜述[J].電子科技,2014,03:154-157.
[5]王沁,何杰,張前雄,劉冰峰,于彥偉.測距誤差分級的室內(nèi)TOA定位算法[J].儀器儀表學(xué)報,2011,12:2851-2856.
[6]王敬東,賁偉,王子瑞,馬駿.基于ZigBee技術(shù)的TDOA定位系統(tǒng)設(shè)計[J].測控技術(shù),2013,03:74-79.
[7]王琦.基于RSSI測距的室內(nèi)定位技術(shù)[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]李偉丹,郝秀娟,胡應(yīng)添.指紋定位方法研究[J].移動通信,2016,11:60-63+72.
[10]李娟娟,張金藝,張秉煜,周榮俊,唐夏.藍(lán)牙4.0標(biāo)準(zhǔn)規(guī)范下的模糊指紋定位算法[J].上海大學(xué)學(xué)報(自然科學(xué)版),2013,02:126-131.
汪文君(1989—),男,安徽安慶人,碩士研究生,主要研究方向:計算機(jī)網(wǎng)絡(luò)與信息處理,并行計算。