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

圖1 加權(quán)輪詢算法流程圖
2.1 加權(quán)輪詢算法
加權(quán)輪詢算法是Nginx服務(wù)器缺省的負(fù)載均衡算法。不同于早期的加權(quán)輪詢算法,現(xiàn)在采用的是一種平滑的加權(quán)輪詢算法。相對(duì)于早期的輪詢算法,現(xiàn)在采用的輪詢算法能夠較好的平滑上游服務(wù)器節(jié)點(diǎn)的負(fù)載。由于它一種開環(huán)控制模型,考慮到客戶端請(qǐng)求處理時(shí)間的不同以及節(jié)點(diǎn)權(quán)值的預(yù)設(shè)是一種經(jīng)驗(yàn)處理,所以它依然不能很好的均衡上游節(jié)點(diǎn)的負(fù)載。算法的流程圖見圖1。
2.2 加權(quán)最小連接數(shù)算法
最小連接調(diào)度算法考慮到上游服務(wù)器節(jié)點(diǎn)的動(dòng)態(tài)平衡性,卻不能給異構(gòu)服務(wù)器集群提供更優(yōu)的服務(wù)。加權(quán)最小連接數(shù)算法(WLC)的節(jié)點(diǎn)選取公式:

它的實(shí)現(xiàn)主體代碼如下:

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

W(Si)表示每個(gè)節(jié)點(diǎn)的缺省權(quán)值,它的計(jì)算公式:

動(dòng)態(tài)負(fù)載向量包括:CPU、I/O、內(nèi)存、網(wǎng)絡(luò)帶寬使用率。WL(Si)表示節(jié)點(diǎn)權(quán)重消耗量,分別表示節(jié)點(diǎn)CPU、I/O、內(nèi)存、網(wǎng)絡(luò)帶寬實(shí)時(shí)使用率。則消耗的權(quán)重有公式(8):

Nginx內(nèi)置的負(fù)載均衡算法并未考慮不同網(wǎng)絡(luò)應(yīng)用的連接對(duì)服務(wù)器負(fù)載的影響。考慮到集群節(jié)點(diǎn)異構(gòu)的現(xiàn)狀存在,因此對(duì)不同請(qǐng)求內(nèi)容的區(qū)別對(duì)待將作為本文算法考量的一個(gè)基準(zhǔn)。負(fù)載均衡模塊收到用戶的請(qǐng)求并分析其請(qǐng)求內(nèi)容,針對(duì)不同的請(qǐng)求采用不同的分發(fā)策略。我們對(duì)請(qǐng)求內(nèi)容的分析劃分有四種類型:

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

再此KC、KM、KD、KN可不再滿足和為1的限制,在某個(gè)時(shí)間片內(nèi)可依據(jù)請(qǐng)求內(nèi)容的不同適當(dāng)?shù)恼{(diào)整這四個(gè)可變參數(shù)。
自適應(yīng)估計(jì)模型
模糊集理論的乘積平均值法可以一定程度的提高異構(gòu)集群在處理不同業(yè)務(wù)的能力,但是KC、KM、KD、KN的參數(shù)設(shè)定仍然需要一個(gè)合理的自適應(yīng)估計(jì)模型。本文引入指數(shù)平滑算法做短期預(yù)測(cè),指數(shù)平滑算法模型公式為:

在負(fù)載均衡模塊維護(hù)一個(gè)FIFO,將請(qǐng)求內(nèi)容的四種類型分別量化為二維矢量(1,0)、(-1,0)、(0,1)、(0,-1),根據(jù)請(qǐng)求的類別將矢量加入FIFO。將FIFO切割成若干等分的序列組,每個(gè)序列組二維求和得到y(tǒng)t單元,根據(jù)指數(shù)平滑算法得到平滑值St。平滑值即是趨勢(shì)的預(yù)測(cè),它位于坐標(biāo)系的四區(qū)內(nèi)。

圖2 趨勢(shì)分布圖
對(duì)KC、KM、KD、KN四個(gè)參數(shù)我們給定一個(gè)初值t。每次更新權(quán)值會(huì)給予這些系數(shù)一個(gè)不大于1-t的激勵(lì)。Kx、Ky的對(duì)應(yīng)關(guān)系見表2:

表2 Kx、Ky對(duì)應(yīng)關(guān)系

本文通過Httperf 和 Autobench 對(duì)系統(tǒng)進(jìn)行性能測(cè)試, Httperf 不能自動(dòng)增加 HTTP 負(fù)載且產(chǎn)生的測(cè)試數(shù)據(jù)以文字的形式呈現(xiàn),而 Autobench 是基于 Httperf 的開發(fā)的 perf 腳本,通過設(shè)置并發(fā)連接數(shù)增長的步長可以—次實(shí)現(xiàn)多輪的Httperf測(cè)試。
在本實(shí)驗(yàn)分別對(duì) Nginx 內(nèi)置加權(quán)輪詢算法(WRR)、加權(quán)最小連接數(shù)算法(WLC)以及本論文所提出的負(fù)載均衡算法(DDWRR)進(jìn)行測(cè)試,統(tǒng)計(jì)各算法下的的平均響應(yīng)時(shí)間以及并發(fā)連接數(shù)。

圖3 測(cè)試環(huán)境示意圖
對(duì)三種負(fù)載均衡算法請(qǐng)求響應(yīng)時(shí)間和實(shí)際并發(fā)連接數(shù)的測(cè)試數(shù)據(jù)如下所示:

表3 三種算法實(shí)際并發(fā)連接數(shù)

表4 三種算法響應(yīng)時(shí)間(ms)

圖4 三種算法的實(shí)際并發(fā)測(cè)試比對(duì)

圖5 三種算法響應(yīng)時(shí)間測(cè)試比對(duì)
通過實(shí)驗(yàn)測(cè)試結(jié)果表明,隨著連接數(shù)的增加DDWRR算法在實(shí)際連接數(shù)和響應(yīng)時(shí)間上較之其他兩種算法更加穩(wěn)定,證明了本文提出的負(fù)載均衡算法能一定程度的提升服務(wù)器集群性能,是有效可行的。
[1]中國互聯(lián)網(wǎng)絡(luò)信息中心——中國互聯(lián)網(wǎng)絡(luò)發(fā)展?fàn)顩r統(tǒng)計(jì)報(bào)告[EB/OL].2012-01-16.
[2]朱振廣.面向內(nèi)容分發(fā)網(wǎng)絡(luò)的動(dòng)態(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è)儀表與自動(dòng)化裝,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ù)
實(shí)驗(yàn)結(jié)果表明k-means指紋算法能在一定程度上提高定位精度并縮短定位時(shí)間。
參考文獻(xiàn)
[1]劉成.LBS定位技術(shù)研究與發(fā)展現(xiàn)狀[J].導(dǎo)航定位學(xué)報(bào),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平臺(tái)的室內(nèi)LBS系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2012,01:396-401.
[4]趙銳,鐘榜,朱祖禮,馬樂,姚金飛.室內(nèi)定位技術(shù)及應(yīng)用綜述[J].電子科技,2014,03:154-157.
[5]王沁,何杰,張前雄,劉冰峰,于彥偉.測(cè)距誤差分級(jí)的室內(nèi)TOA定位算法[J].儀器儀表學(xué)報(bào),2011,12:2851-2856.
[6]王敬東,賁偉,王子瑞,馬駿.基于ZigBee技術(shù)的TDOA定位系統(tǒng)設(shè)計(jì)[J].測(cè)控技術(shù),2013,03:74-79.
[7]王琦.基于RSSI測(cè)距的室內(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].移動(dòng)通信,2016,11:60-63+72.
[10]李娟娟,張金藝,張秉煜,周榮俊,唐夏.藍(lán)牙4.0標(biāo)準(zhǔn)規(guī)范下的模糊指紋定位算法[J].上海大學(xué)學(xué)報(bào)(自然科學(xué)版),2013,02:126-131.
汪文君(1989—),男,安徽安慶人,碩士研究生,主要研究方向:計(jì)算機(jī)網(wǎng)絡(luò)與信息處理,并行計(jì)算。