譚 暢,譚 歆,胡 磊,熊 煒
(1.重慶郵電大學(xué) 通信與信息工程學(xué)院,重慶 400065;2.中電科技集團(tuán) 重慶聲光電有限公司,重慶 401332;3.重慶市住房公積金管理中心,重慶 401121)
20世紀(jì)以來,互聯(lián)網(wǎng)技術(shù)開始高度發(fā)展普及,各行各業(yè)對計(jì)算機(jī)處理能力的要求也不斷提高。為了達(dá)到此目的,云計(jì)算中心得到快速發(fā)展[1]。所謂云計(jì)算中心,是指通過互聯(lián)網(wǎng)將共享的軟硬件資源和信息按需提供給用戶。云計(jì)算中心究其本質(zhì)是龐大的服務(wù)器集群。在巨大訪問量情況下,如何在服務(wù)器集群上解決負(fù)載失衡是必須解決的問題。
針對該問題,解決方案之一是采用性能和穩(wěn)定性更好的硬件負(fù)載均衡,如F5硬負(fù)載均衡[2]。但是硬負(fù)載均衡成本過高,對于預(yù)算有限的公司而言,軟負(fù)載均衡才是更好的選擇[3]。在軟負(fù)載均衡基礎(chǔ)上,R. R. Patel等[4]考慮虛擬節(jié)點(diǎn)的資源分配問題,提出了一種動態(tài)的負(fù)載均衡算法,該算法缺陷在于每次分配資源時(shí),需要掃描所有節(jié)點(diǎn)的負(fù)載信息,算法效率不高。M.J.S.Jane等[5]對分布式環(huán)境下的負(fù)載均衡策略進(jìn)行研究,提出了一種基于模糊概念思想的動態(tài)負(fù)載均衡算法,針對分布式系統(tǒng)的不確定性特征,使用模糊控制方法和模糊集理論,清楚地反映了決策過程中不確定性的影響。L. Chen等[6]經(jīng)過大量研究,發(fā)現(xiàn)負(fù)載均衡問題和熱力學(xué)熵的概念有相通之處,使用了熱力學(xué)熵的概念和最大熵方法(maximum entropy methods, MEM)的優(yōu)勢解決了集群中的負(fù)載均衡問題。鄭祺等[7]設(shè)計(jì)了一種基于內(nèi)容分類的集群負(fù)載均衡策略。該算法首先將用戶對服務(wù)器的請求進(jìn)行分類,然后再將分類后的請求均勻地分配至后端各個(gè)節(jié)點(diǎn)服務(wù)器,使得集群內(nèi)的各個(gè)節(jié)點(diǎn)服務(wù)器得到的請求數(shù)量大致相同。此外,該算法還考慮了對負(fù)載權(quán)值進(jìn)行等效變換,配合進(jìn)入臨界狀態(tài)后的動態(tài)權(quán)值調(diào)整策略,防止節(jié)點(diǎn)負(fù)載傾斜。王紅斌[8]提出了一種基于超文本傳輸協(xié)議(hypertext transfer protocol, HTTP)請求內(nèi)容的分配決策,將HTTP請求分類為靜態(tài)請求和動態(tài)請求2類。針對靜態(tài)請求,主要對請求的cache命中率進(jìn)行優(yōu)化提高,而針對動態(tài)請求,則主要考慮了對負(fù)載進(jìn)行均勻分配。同時(shí),此算法還添加了一種動態(tài)反饋機(jī)制,以對Web服務(wù)器集群的負(fù)載做出周期性地調(diào)整。杜晉芳[9]提出了一種動態(tài)的基于Nginx的負(fù)載均衡算法。該算法在加權(quán)輪詢算法的基礎(chǔ)上,添加了動態(tài)反饋機(jī)制,提高了服務(wù)器負(fù)載均衡能力與負(fù)載均衡策略的適應(yīng)性。
為了實(shí)現(xiàn)對服務(wù)器的合理任務(wù)分配,本文在Linux平臺上搭建服務(wù)器集群以模擬云中心,在基于Nginx內(nèi)置的加權(quán)輪詢負(fù)載均衡技術(shù),提出一種改進(jìn)的動態(tài)加權(quán)輪詢算法。首先,該算法考慮到后端節(jié)點(diǎn)硬件存在差異,各臺服務(wù)器的處理能力有所不同,提出靜態(tài)權(quán)重的概念,以反映硬件性能差異。靜態(tài)權(quán)重計(jì)算過程中,由于服務(wù)器中的不同硬件對處理請求的性能影響不同,引入了硬件權(quán)重系數(shù),權(quán)重越大表明此硬件對服務(wù)器性能影響越大。計(jì)算權(quán)重則使用了線性相關(guān)系數(shù)的方法,通過實(shí)驗(yàn)統(tǒng)計(jì)請求響應(yīng)時(shí)間與對應(yīng)硬件使用率,從而得到線性相關(guān)系數(shù),進(jìn)而計(jì)算出初始權(quán)重,即靜態(tài)權(quán)重。然后,考慮到隨著請求的處理,各個(gè)服務(wù)器節(jié)點(diǎn)的負(fù)載狀況會不停地變化,提出動態(tài)權(quán)重的概念,引入剩余負(fù)載來表征動態(tài)權(quán)重。最后,結(jié)合初始權(quán)重與動態(tài)權(quán)重,得到節(jié)點(diǎn)服務(wù)器最終權(quán)值。周期性收集后端服務(wù)器動態(tài)性能情況,將舊權(quán)值更新,有效達(dá)到負(fù)載均衡的目的。
服務(wù)器端的負(fù)載均衡表示若干臺服務(wù)器在后端同時(shí)與負(fù)載均衡器連接,當(dāng)某請求來到時(shí),負(fù)載均衡器通過所設(shè)置的負(fù)載均衡策略,根據(jù)策略計(jì)算選擇后端服務(wù)器中最合適處理該請求的一臺服務(wù)器。常用的負(fù)載均衡技術(shù)有以下幾點(diǎn)。
1)硬件負(fù)載均衡(后簡稱硬負(fù)載均衡)。從硬件途徑實(shí)現(xiàn)負(fù)載均衡的功能[10],常用的有F5負(fù)載均衡器等。硬負(fù)載均衡獨(dú)立性強(qiáng),有多樣化的均衡策略,能夠智能化管理流量,性能出色。但是缺點(diǎn)比較明顯,硬負(fù)載均衡價(jià)格昂貴,中小型企業(yè)難以承受。
2)軟件負(fù)載均衡(后簡稱軟負(fù)載均衡)。以軟件方式實(shí)現(xiàn)負(fù)載均衡的功能,在一臺或多臺服務(wù)器相應(yīng)的操作系統(tǒng)上安裝一個(gè)或多個(gè)附加軟件來實(shí)現(xiàn)負(fù)載均衡。其優(yōu)點(diǎn)是配置簡單,使用靈活且成本低廉。然而其缺點(diǎn)也很明顯,相對于硬負(fù)載均衡,軟負(fù)載均衡適用范圍更小,并且不支持通過統(tǒng)一資源定位符(uniform resource locator,URL)來檢測服務(wù)器內(nèi)部的故障,不支持Session的保持等[11]。
對于軟負(fù)載均衡,現(xiàn)在常見的有LVS[12]、Nginx[13]、HAProxy[14]和Ribbon等。Nginx是一款優(yōu)秀的軟件負(fù)載均衡器,具有并發(fā)量高、代碼開源等優(yōu)點(diǎn),因此,常常被用來作為服務(wù)器端的負(fù)載均衡器[15],本文主要研究基于Nginx的負(fù)載均衡系統(tǒng)。Nginx的常用負(fù)載均衡策略按照各自的特性,可以分為靜態(tài)負(fù)載均衡策略和動態(tài)負(fù)載均衡策略[16]。靜態(tài)負(fù)載均衡是指負(fù)載均衡策略固定不變,不隨輸入或者服務(wù)器狀態(tài)改變。動態(tài)負(fù)載均衡與靜態(tài)相反,在服務(wù)器狀態(tài)變化時(shí),根據(jù)某一個(gè)或多個(gè)服務(wù)器性能指標(biāo)調(diào)整負(fù)載均衡策略。表1分析了常見的Nginx負(fù)載均衡策略。
表1 常見Nginx負(fù)載均衡算法分析表
由表1可得,靜態(tài)負(fù)載均衡算法通常配置簡單,輕量,在系統(tǒng)請求量小時(shí)能夠發(fā)揮很好的功效。但當(dāng)請求量過大時(shí),由于服務(wù)器性能差異或請求對資源消耗的不同,使用靜態(tài)負(fù)載均衡將導(dǎo)致各個(gè)后端服務(wù)器節(jié)點(diǎn)的負(fù)載不平衡,使得整個(gè)系統(tǒng)性能降低。動態(tài)負(fù)載均衡算法都考慮到了后端服務(wù)器節(jié)點(diǎn)的實(shí)時(shí)負(fù)載情況,根據(jù)負(fù)載調(diào)整任務(wù)的分配。但是,在更新動態(tài)負(fù)載均衡算法時(shí),需要頻繁地采集后端服務(wù)器各節(jié)點(diǎn)的負(fù)載信息、計(jì)算服務(wù)器節(jié)點(diǎn)負(fù)載量,從而增大系統(tǒng)的通信開銷和計(jì)算開銷,導(dǎo)致響應(yīng)時(shí)間變長,系統(tǒng)性能下降。針對上述問題,本文基于Nginx提出一種改進(jìn)的加權(quán)輪詢算法,該算法根據(jù)后端服務(wù)器節(jié)點(diǎn)的負(fù)載情況動態(tài)地改變權(quán)重,彌補(bǔ)了靜態(tài)負(fù)載均衡算法未考慮后端服務(wù)器負(fù)載情況的缺陷,同時(shí)減少了后端服務(wù)器的通信開銷,達(dá)到了降低響應(yīng)時(shí)間、提高實(shí)際并發(fā)數(shù)的目的。
本文提出實(shí)現(xiàn)負(fù)載均衡的系統(tǒng)模型由3個(gè)模塊組成,分別為負(fù)載信息收集模塊、負(fù)載信息處理模塊和負(fù)載均衡算法實(shí)現(xiàn)模塊,如圖1。
負(fù)載信息收集模塊部署在后端的每臺服務(wù)器上,通過Linux系統(tǒng)下/proc文件夾周期性收集各臺服務(wù)器的硬件負(fù)載信息,通過Redis數(shù)據(jù)庫將數(shù)據(jù)傳遞負(fù)載信息處理模塊。采集周期不能隨意選取,周期過短會增加系統(tǒng)的通信開銷,加大負(fù)載均衡器的負(fù)載和資源消耗,周期過長則會使負(fù)載均衡器收集到的負(fù)載信息不準(zhǔn)確,從而影響負(fù)載均衡策略,導(dǎo)致系統(tǒng)性能下降。通過實(shí)驗(yàn),本算法選取采集周期T=9 s。
圖1 系統(tǒng)模型圖Fig.1 System model diagram
負(fù)載信息處理模塊和負(fù)載均衡算法實(shí)現(xiàn)模塊均部署在Nginx宿主機(jī)上。負(fù)載均衡算法模塊周期性地獲取后端服務(wù)器負(fù)載信息,根據(jù)優(yōu)化算法計(jì)算出節(jié)點(diǎn)周期內(nèi)的最終權(quán)值,并寫入Redis。負(fù)載均衡算法實(shí)現(xiàn)模塊取出最終權(quán)值,并根據(jù)改寫的Nginx的upstream模塊[18],使加權(quán)輪詢算法的固定權(quán)重變?yōu)閯討B(tài)權(quán)重,從而動態(tài)地改變用戶請求的目的服務(wù)器地址。
加權(quán)輪詢算法是Nginx自帶的負(fù)載均衡算法之一,與原始的輪詢算法相比,考慮到各后端服務(wù)器性能差異,加權(quán)輪詢算法對每一個(gè)后端服務(wù)器賦予了一個(gè)權(quán)重。在用戶發(fā)出請求時(shí),Nginx會根據(jù)權(quán)重分配請求到后端服務(wù)器,使性能較高的服務(wù)器處理更多的請求,避免了輪詢算法均勻分配請求的缺點(diǎn),從而達(dá)到成負(fù)載均衡的目的[19]。但是加權(quán)輪詢算法對于后端服務(wù)器權(quán)重的配置往往只能根據(jù)經(jīng)驗(yàn)設(shè)置,難以精確地衡量各個(gè)服務(wù)器的性能差異。并且由于服務(wù)器對每個(gè)請求的處理時(shí)間不同,當(dāng)一個(gè)大權(quán)值的服務(wù)器處理一個(gè)需要較長時(shí)間的請求時(shí),由于其權(quán)值大,后續(xù)進(jìn)來的請求又會被大概率分配到該服務(wù)器,造成該服務(wù)器過載。本文提出的算法中,靜態(tài)權(quán)值根據(jù)服務(wù)器各硬件性能計(jì)算得出,考慮到了服務(wù)器的性能差異,動態(tài)權(quán)值根據(jù)服務(wù)器的實(shí)時(shí)負(fù)載計(jì)算得出,考慮到了實(shí)時(shí)負(fù)載。靜態(tài)權(quán)值反映了服務(wù)器的處理能力,動態(tài)權(quán)值反映了實(shí)時(shí)負(fù)載,因此,初始權(quán)值的選取與動態(tài)權(quán)值的設(shè)計(jì)都很重要。
初始權(quán)值表征了服務(wù)器節(jié)點(diǎn)相對的硬件性能情況。設(shè)N表示后端服務(wù)器節(jié)點(diǎn)的性能指標(biāo),Nc(Total)、Nm(Total)、Ni(Total)、Nn(Total)分別代表集群所有服務(wù)器節(jié)點(diǎn)的CPU、內(nèi)存、磁盤I/O和網(wǎng)絡(luò)性能情況總和,C(j)、M(j)、I(j)、N(j)分別代表集群內(nèi)各個(gè)服務(wù)器節(jié)點(diǎn)的CPU、內(nèi)存、磁盤I/O和網(wǎng)絡(luò)性能,(1)—(4)式分別表示集群內(nèi)所有節(jié)點(diǎn)性能情況總和。
(1)
(2)
(3)
(4)
想要計(jì)算各個(gè)節(jié)點(diǎn)在集群中所占的靜態(tài)權(quán)重,需要將此節(jié)點(diǎn)的各硬件空載性能作為參考指標(biāo)。其中硬件性能包括CPU性能、內(nèi)存性能、磁盤I/O性能以及網(wǎng)絡(luò)帶寬性能。另外,由于各個(gè)硬件對于服務(wù)器性能影響大小不同,故需要對各硬件性能指標(biāo)進(jìn)行加權(quán)處理。單節(jié)點(diǎn)在某一個(gè)硬件方面的性能除以集群內(nèi)所有節(jié)點(diǎn)在這一方面硬件性能的總和,乘以各方面對服務(wù)器性能影響比重權(quán)重,即可求得節(jié)點(diǎn)占集群的靜態(tài)權(quán)值,即初始權(quán)值為
(5)
(5)式中:Nc(j)、Nm(j)、Ni(j)、Nn(j)分別表示節(jié)點(diǎn)的靜態(tài)CPU性能、靜態(tài)內(nèi)存性能、靜態(tài)磁盤I/O性能以及靜態(tài)網(wǎng)絡(luò)帶寬性能;Wc、Wm、Wi、Wn分別表示此節(jié)點(diǎn)的CPU、內(nèi)存、磁盤I/O、網(wǎng)絡(luò)帶寬的權(quán)重系數(shù);SW(j)代表節(jié)點(diǎn)j占集群內(nèi)所有節(jié)點(diǎn)的初始權(quán)重;A是調(diào)整常量,作用是使得SW(j)為一個(gè)整數(shù),使得舍棄的小數(shù)部分更小,造成的誤差更小。
對于權(quán)重Wc、Wm、Wi、Wn的計(jì)算,傳統(tǒng)方法是根據(jù)經(jīng)驗(yàn)取值,難以精確衡量各個(gè)硬件對服務(wù)器性能的影響。本文通過計(jì)算各方面硬件的使用率與節(jié)點(diǎn)響應(yīng)時(shí)間的相關(guān)系數(shù)對各權(quán)重進(jìn)行賦值。相關(guān)系數(shù)是研究變量之間線性相關(guān)程度的量,因此,該數(shù)值能一定程度上從側(cè)面反映出該硬件對于節(jié)點(diǎn)性能的影響。硬件初始權(quán)重為
(6)
(7)
(8)
(9)
(6)—(9)式中:Wcpu、Wmem、Wio、Wnet代表各方面硬件對節(jié)點(diǎn)性能影響的初權(quán)重;cov(A,B)為求A、B兩項(xiàng)的協(xié)方差:Xcpu、Xmem、Xio、Xnet分別表示若干個(gè)負(fù)載采集周期得到的CPU、內(nèi)存、磁盤I/O、網(wǎng)絡(luò)帶寬利用率組成的向量;Y表示響應(yīng)時(shí)間向量。由于權(quán)重Wc、Wm、Wi、Wn需要滿足
Wc+Wm+Wi+Wn=1
(10)
故對Wcpu,Wmem,Wio,Wnet進(jìn)行歸一化處理
(11)
(12)
(13)
(14)
確定服務(wù)器初始權(quán)重后,需要?jiǎng)討B(tài)調(diào)節(jié)集群內(nèi)各個(gè)節(jié)點(diǎn)的權(quán)重。權(quán)重的動態(tài)調(diào)節(jié)需要根據(jù)節(jié)點(diǎn)當(dāng)前的負(fù)載狀態(tài)來量化,對于負(fù)載過高的節(jié)點(diǎn),需要降低其集群內(nèi)權(quán)重;對于負(fù)載相對較低的節(jié)點(diǎn),則需要相應(yīng)提高權(quán)重。本文引入節(jié)點(diǎn)剩余負(fù)載的概念,表征此節(jié)點(diǎn)還能承受多少負(fù)載。剩余負(fù)載主要根據(jù)硬件使用率,本機(jī)硬件性能和節(jié)點(diǎn)平均硬件性能作為輸入指標(biāo),衡量了當(dāng)前節(jié)點(diǎn)還能夠承受多少負(fù)載,得到的結(jié)果是一個(gè)小數(shù)。計(jì)算公式為
(15)
(15)式中:Lc(j)、Lm(j)、Li(j)、Ln(j)分別表示了節(jié)點(diǎn)j的CPU、內(nèi)存、磁盤I/O速率、網(wǎng)絡(luò)帶寬4種指標(biāo)的剩余負(fù)載,其計(jì)算方法為
Lc(j)=Cj·[1-Cu(j)]
(16)
Lm(j)=Mj·[1-Mu(j)]
(17)
Lio(j)=IOj·[1-IOu(j)]
(18)
Ln(j)=Nj·[1-Nu(j)]
(19)
(16)—(19)式中:Cj代表節(jié)點(diǎn)j的CPU信息,為CPU主頻和核心數(shù)量的乘積;Mj表示節(jié)點(diǎn)j的內(nèi)存容量;IOj表示節(jié)點(diǎn)j的磁盤速率;Nj代表節(jié)點(diǎn)j網(wǎng)絡(luò)帶寬;Cu(j)、Mu(j)、IOu(j)、Nu(j)分別表示節(jié)點(diǎn)j上的CPU、內(nèi)存、磁盤和寬帶的使用率;Pc、Pm、Pi、Pn為節(jié)點(diǎn)j上的CPU、內(nèi)存、磁盤和寬帶的均值,表示各部分的性能基準(zhǔn)。
(20)
(21)
(22)
(23)
經(jīng)過上述各式的計(jì)算,得到節(jié)點(diǎn)j的剩余負(fù)載量L(j),可以側(cè)面反映該節(jié)點(diǎn)可以繼續(xù)承受負(fù)載的能力。再結(jié)合(5)式的節(jié)點(diǎn)初始權(quán)重,即可計(jì)算出節(jié)點(diǎn)的最終權(quán)重大小,即
DW(j)=B×SW(j)×L(j)
(24)
(24)式中:DW(j)表示節(jié)點(diǎn)j在集群中一個(gè)周期內(nèi)的最終權(quán)重大??;SW(j)由(5)式可得;L(j)則由(15)式計(jì)算可知;B是放大常數(shù),使結(jié)果放大若干倍,丟棄的小數(shù)部分減小,從而減少誤差。在計(jì)算完成集群內(nèi)各個(gè)服務(wù)器節(jié)點(diǎn)的動態(tài)權(quán)值DW(j)后,將各個(gè)最終權(quán)重更新到Nginx執(zhí)行的加權(quán)輪詢算法中,完成一輪算法流程。
以下給出動態(tài)權(quán)重負(fù)載均衡算法。
步驟1獲取各后端服務(wù)器節(jié)點(diǎn)的無負(fù)載狀態(tài)下的硬件性能情況;
步驟2根據(jù)各硬件對性能的影響大小計(jì)算出硬件影響權(quán)重,可使用參考值:[0.38,0.38,0.12,0.12],依次代表CPU、內(nèi)存、磁盤I/O、網(wǎng)絡(luò)帶寬權(quán)重;
步驟3根據(jù)獲取的硬件性能情況和計(jì)算出的硬件影響比重計(jì)算各后端服務(wù)器節(jié)點(diǎn)在無負(fù)載狀態(tài)下的權(quán)重,并將此權(quán)重作為動態(tài)權(quán)重負(fù)載均衡算法的初始權(quán)重;
步驟4定時(shí)獲取各后端服務(wù)器的負(fù)載信息,包括CPU、內(nèi)存、磁盤I/O、網(wǎng)絡(luò)帶寬負(fù)載;
步驟5根據(jù)獲取的負(fù)載信息計(jì)算出各硬件使用比率;
步驟6根據(jù)后端服務(wù)器節(jié)點(diǎn)的硬件性能計(jì)算出硬件平均性能基準(zhǔn)P;
步驟7根據(jù)各硬件使用比率和硬件平均性能基準(zhǔn)計(jì)算得出各節(jié)點(diǎn)剩余負(fù)載L(j);
步驟8根據(jù)初始權(quán)重和剩余負(fù)載計(jì)算出最終權(quán)重DW(j),并更新;
步驟9根據(jù)所述最終權(quán)值為服務(wù)器分配相應(yīng)的負(fù)載,在新的收集周期T來到時(shí),跳轉(zhuǎn)步驟4開始新一輪算法流程。
實(shí)驗(yàn)采取集群系統(tǒng)結(jié)構(gòu),如圖2。本文搭建本地服務(wù)器集群以模擬云中心的服務(wù)器集群。系統(tǒng)由一臺客戶端,一臺反向代理服務(wù)器(即負(fù)載均衡器),3臺后端服務(wù)器組成。客戶端通過性能測試軟件發(fā)送負(fù)載指令,反向代理服務(wù)器上部署Nginx及其相關(guān)組件。
圖2 實(shí)驗(yàn)集群系統(tǒng)結(jié)構(gòu)Fig.2 Experimental cluster system structure
為保證后端服務(wù)器有不同的請求處理能力,使3臺后端服務(wù)器硬件設(shè)施有所不同。系統(tǒng)所有設(shè)施軟硬件信息如表2。
表2 實(shí)驗(yàn)集群配置
本文使用了Httperf和Autobench對系統(tǒng)性能進(jìn)行測試,2個(gè)工具都運(yùn)行在Linux系統(tǒng)上,用于測試服務(wù)器性能情況。測試分為3個(gè)方面:①單一服務(wù)器與服務(wù)器集群在不同請求并發(fā)數(shù)下的響應(yīng)時(shí)間對比;②在不同的請求并發(fā)數(shù)下,分別對Nginx的加權(quán)輪詢算法(簡稱WRR算法)、最小連接數(shù)算法(簡稱least-con)和本文提出的改進(jìn)算法(簡稱動態(tài)權(quán)重算法) 的響應(yīng)時(shí)間進(jìn)行對比測試;③在不同的請求并發(fā)數(shù)下對上述3種算法的實(shí)際并發(fā)連接數(shù)進(jìn)行測試。實(shí)驗(yàn)進(jìn)行10次,并對記錄的實(shí)驗(yàn)數(shù)據(jù)取均值。得到的單一服務(wù)器與集群服務(wù)器響應(yīng)時(shí)間對比、集群內(nèi)各算法響應(yīng)時(shí)間與并發(fā)數(shù)關(guān)系、實(shí)際并發(fā)數(shù)與請求并發(fā)數(shù)關(guān)系如圖3—圖5。
圖3 單一服務(wù)器與服務(wù)器集群響應(yīng)時(shí)間Fig.3 Single server and server cluster response time
圖4 算法響應(yīng)時(shí)間與并發(fā)數(shù)關(guān)系圖Fig.4 Relationship between algorithm response time and the concurrent number
圖5 算法請求并發(fā)數(shù)與實(shí)際并發(fā)數(shù)關(guān)系圖Fig.5 Relationship between the number of algorithm requests and the actual number
從圖3可知,單服務(wù)器對并發(fā)連接的處理能力為150~200左右,并且響應(yīng)時(shí)間隨著請求并發(fā)數(shù)的增加而迅速上升;同時(shí)服務(wù)器集群對遞增的請求并發(fā)數(shù)的響應(yīng)時(shí)間則一直保持平穩(wěn),在400并發(fā)數(shù)下保持在4.1 ms左右。
從圖4可以看出,平均響應(yīng)時(shí)間總體而言是隨著并發(fā)數(shù)量的增加而增長的。在并發(fā)數(shù)為700之前,3種算法的響應(yīng)時(shí)間沒有明顯增長趨勢,均有足夠的能力處理。在并發(fā)數(shù)為700后,WRR算法的響應(yīng)時(shí)間開始大幅上升,高于least-con算法和本文提出的動態(tài)權(quán)重算法。在并發(fā)數(shù)為1 000后,動態(tài)權(quán)重算法響應(yīng)時(shí)間開始大幅上升,但仍然低于WRR算法和least-con算法。并發(fā)數(shù)1 100時(shí),動態(tài)權(quán)重算法與WRR算法相比,響應(yīng)時(shí)間降低了28.75%,與least-con相比降低了20.97%。在并發(fā)數(shù)較高的1 400時(shí),動態(tài)權(quán)重算法比WRR算法降低11.77%,比least-con降低13.4%??傮w來看,動態(tài)權(quán)重的平均響應(yīng)時(shí)間為3種算法中最短,表明本文提出的動態(tài)權(quán)重算法能夠有效地在高并發(fā)數(shù)情況下合理分配請求,從而減少服務(wù)器響應(yīng)時(shí)間,提升系統(tǒng)性能。
從圖5可以看出,在并發(fā)數(shù)達(dá)到700之前,3種算法的實(shí)際并發(fā)數(shù)與請求的并發(fā)數(shù)基本相同,說明3種算法在此并發(fā)數(shù)下都可以很好地達(dá)成負(fù)載均衡效果。在并發(fā)數(shù)為700后,WRR算法開始出現(xiàn)實(shí)際并發(fā)數(shù)丟失的情況。并發(fā)數(shù)為900后,least-con算法的實(shí)際并發(fā)數(shù)也開始丟失。在并發(fā)數(shù)達(dá)到1 000時(shí),動態(tài)權(quán)重算法的實(shí)際并發(fā)連接數(shù)才有丟失的情況。動態(tài)權(quán)重算法的實(shí)際并發(fā)數(shù)基本都要持平于請求并發(fā)數(shù),當(dāng)請求并發(fā)數(shù)達(dá)到1 000時(shí),動態(tài)權(quán)重算法的實(shí)際并發(fā)連接數(shù)才有丟失的情況。并發(fā)數(shù)1 100時(shí),動態(tài)權(quán)重算法比WRR算法實(shí)際響應(yīng)數(shù)高11.25%,比least-con高4.2%;并發(fā)數(shù)1 400時(shí),動態(tài)權(quán)重算法比WRR算法實(shí)際響應(yīng)數(shù)高22.85%,比least-con高10.65%。從整體來看,動態(tài)權(quán)重算法的實(shí)際并發(fā)數(shù)基本都要持平或高于其余2種算法,表明本文提出的動態(tài)權(quán)重算法優(yōu)于WRR算法和least-con算法。
本文針對云中心服務(wù)器負(fù)載失衡問題,提出了一種基于加權(quán)輪詢算法的動態(tài)權(quán)重算法。算法通過對節(jié)點(diǎn)的各個(gè)硬件指標(biāo)權(quán)重、集群中節(jié)點(diǎn)的初始權(quán)重和動態(tài)權(quán)重進(jìn)行建模,根據(jù)采集的服務(wù)器節(jié)點(diǎn)的實(shí)時(shí)負(fù)載情況,動態(tài)修改各個(gè)節(jié)點(diǎn)的權(quán)值,以達(dá)到實(shí)現(xiàn)請求的負(fù)載均衡目的。實(shí)驗(yàn)結(jié)果表明,在并發(fā)數(shù)較高情況下,本算法能夠合理地分配請求到后端服務(wù)器節(jié)點(diǎn),有效地提高處理請求的效率,提升負(fù)載均衡系統(tǒng)性能。