汪佳文, 王書培, 徐立波, 郭家軍, 俞成海
(浙江理工大學(xué) 信息學(xué)院,杭州 310018)
隨著電子商務(wù)的高速發(fā)展,網(wǎng)購已經(jīng)變的越來越普遍,用戶規(guī)模也在不斷增長,因此許多大的電商網(wǎng)站系統(tǒng)應(yīng)運(yùn)而生,伴隨網(wǎng)站架構(gòu)而來的是高并發(fā)[1]問題,例如淘寶的“雙十一”購物節(jié),并發(fā)量每秒高達(dá)幾百萬次,而傳統(tǒng)的單一系統(tǒng)模式并不能滿足這種要求,支撐龐大的高并發(fā)必須基于并行分布式技術(shù)[2]的服務(wù)集群.因此在面對大流量、高并發(fā)的沖擊下,如何更高效的展現(xiàn)出分布式服務(wù)集群中每臺服務(wù)器的性能成為技術(shù)關(guān)鍵. 當(dāng)前由于硬件性能發(fā)展的瓶頸,無法滿足人們對于高并發(fā)的要求,軟負(fù)載就成為人們?nèi)〉猛黄频闹攸c(diǎn).對于高并發(fā)高負(fù)載的大型網(wǎng)站架構(gòu)實(shí)現(xiàn)軟負(fù)載一般采用負(fù)載均衡技術(shù)[3]和緩存技術(shù),由于Nginx[4]代理服務(wù)器采用了負(fù)載均衡技術(shù)和緩存技術(shù)并且作為一款輕量級的Web服務(wù)器廣泛的受到網(wǎng)站開發(fā)者用戶的喜愛,而且Nginx的并發(fā)能力在同類型的Web服務(wù)集群中表現(xiàn)優(yōu)良,網(wǎng)站架構(gòu)中采用Nginx作為代理服務(wù)器的比例也逐年上升. 目前國內(nèi)外很多網(wǎng)站架構(gòu)都采用Nginx作為負(fù)載均衡和反向代理[5]的Web服務(wù)器,其中比較典型有淘寶、京東、新浪、網(wǎng)易等.
由于負(fù)載均衡算法在解決大型網(wǎng)站架構(gòu)中高并發(fā)問題的重要性,研究人員對于分布式計算系統(tǒng)中的負(fù)載均衡算法從動態(tài)和靜態(tài)兩個方面進(jìn)行了深入的研究.靜態(tài)負(fù)載均衡算法是事先給定分配策略,在以后的運(yùn)行的過程中不再改變服務(wù)器節(jié)點(diǎn)負(fù)載性能,一般的靜態(tài)負(fù)載均衡算法主要有:隨機(jī)、權(quán)重輪詢、一致Hash等. 但在實(shí)際情況下分布式服務(wù)集群中的服務(wù)器性能在不斷消耗變化,并且服務(wù)器節(jié)點(diǎn)數(shù)也在動態(tài)的變化之中(服務(wù)器宕機(jī)或增加新的節(jié)點(diǎn)等),所以預(yù)分配方案并不能實(shí)時保證服務(wù)集群處于最優(yōu)的負(fù)載均衡狀態(tài). 因此動態(tài)負(fù)載均衡應(yīng)運(yùn)而生,動態(tài)負(fù)載均衡算法最直觀的是將客戶請求實(shí)時分配給當(dāng)前負(fù)載能力最優(yōu)的服務(wù)器. 國內(nèi)外目前有很多學(xué)者在負(fù)載均衡算法也有過研究,并且提出了很多改進(jìn)之處. 比如國外的Singh等[6]研究發(fā)現(xiàn)了一種基于動態(tài)調(diào)度的負(fù)載平衡Web服務(wù)器系統(tǒng),Kaur等[7]研究發(fā)現(xiàn)了一種通過虛擬機(jī)用蟻群算法實(shí)現(xiàn)負(fù)載平衡的混合方法,Ding等[8]研究發(fā)現(xiàn)了一種在異構(gòu)網(wǎng)絡(luò)中的動態(tài)負(fù)載平衡算法,張堯等[9]研究發(fā)現(xiàn)了一種改進(jìn)的基于權(quán)值動態(tài)負(fù)載均衡算法,Li等[10]研究發(fā)現(xiàn)了一種基于動態(tài)時間步長反饋的負(fù)載均衡方法,這些算法都在一定程度上提升了集群的負(fù)載性能,然而其中基于權(quán)重輪詢算法在負(fù)載均衡算法是比較常見的. 由于現(xiàn)在一般的分布式服務(wù)集群都是基于異構(gòu)網(wǎng)絡(luò)[11],影響服務(wù)器節(jié)點(diǎn)性能的因素比較多,不能只從單一方面考慮,需要綜合去考慮服務(wù)集中影響節(jié)點(diǎn)性能的各個因素,根據(jù)節(jié)點(diǎn)的真實(shí)負(fù)載情況去動態(tài)的調(diào)整節(jié)點(diǎn)的性能.
基于以上原因本文對已有的權(quán)重輪詢負(fù)載均衡算法進(jìn)行了優(yōu)化,提出了一種動態(tài)自適應(yīng)權(quán)重輪詢隨機(jī)負(fù)載均衡算法(DAWRRRLB). 該算法主要考慮到影響節(jié)點(diǎn)的多重因素,根據(jù)服務(wù)集群中節(jié)點(diǎn)的實(shí)時負(fù)載性能動態(tài)的、自適應(yīng)的去調(diào)整當(dāng)前節(jié)點(diǎn)的負(fù)載性能,并且引進(jìn)了改進(jìn)的Pick-K算法,確保始終是最優(yōu)的服務(wù)器在提供服務(wù),同時避免一些節(jié)點(diǎn)由于接收到大量的請求或者因?yàn)槟硞€進(jìn)程過于龐大而出現(xiàn)過載的情況.而且在在集群系統(tǒng)中要想快速響應(yīng)客戶端的請求,只有始終保持是負(fù)載能力最優(yōu)的服務(wù)器在提供服務(wù),才能使整個集群負(fù)載處于最優(yōu)狀態(tài),從而提升負(fù)載均衡效率.
加權(quán)最小連接負(fù)載均衡[12]算法(WLC)是根據(jù)當(dāng)前節(jié)點(diǎn)連接數(shù)與當(dāng)前節(jié)點(diǎn)權(quán)重比來實(shí)現(xiàn)負(fù)載均衡,將請求分配給比值最小的節(jié)點(diǎn),并且連接數(shù)加1. 即:
其中,C(Ni)是表示該節(jié)點(diǎn)的鏈接總數(shù),W(Ni)表示當(dāng)前節(jié)點(diǎn)的權(quán)重值,Pi表示響應(yīng)請求的服務(wù)器節(jié)點(diǎn).
缺點(diǎn):由于集群中各節(jié)點(diǎn)的異構(gòu),連接數(shù)和權(quán)重比很難真實(shí)反映各節(jié)點(diǎn)的負(fù)載真實(shí)情況,并且節(jié)點(diǎn)的負(fù)載性能在運(yùn)行的過程中是不斷變化的,且權(quán)重需要根據(jù)管理員經(jīng)驗(yàn)去設(shè)置,不能動態(tài)自適應(yīng)去調(diào)整節(jié)點(diǎn),難以準(zhǔn)確確定.
加權(quán)輪詢[13]算法(WRR)適用性較強(qiáng),不依賴于客戶端的任何相關(guān)信息,僅僅依賴后端服務(wù)器節(jié)點(diǎn)的負(fù)載情況,根據(jù)后端服務(wù)器節(jié)點(diǎn)的權(quán)重比例輪流分配客戶端的請求. 該算法比較簡潔,不需要記錄當(dāng)前客戶端的所有連接,是一種無狀態(tài)的調(diào)度.
缺點(diǎn):WRR沒有考慮到集群中每臺服務(wù)器的當(dāng)前連接數(shù)以及響應(yīng)速度,而且在集群運(yùn)行過程中,服務(wù)器節(jié)點(diǎn)的性能也是在不斷消耗變化,不能及時對服務(wù)器端節(jié)點(diǎn)的動態(tài)負(fù)載做出準(zhǔn)確的判斷,當(dāng)節(jié)點(diǎn)負(fù)載不均時,極容易出現(xiàn)個別服務(wù)器負(fù)載過高等,從而影響集群的整體負(fù)載性能. 也有可能因?yàn)槟硞€連接請求響應(yīng)時延比較長,嚴(yán)重影響該節(jié)點(diǎn)對其他的連接請求響應(yīng),導(dǎo)致集群性能下降.
本文提出的動態(tài)負(fù)載均衡算法是實(shí)時獲取影響服務(wù)器性能的參數(shù),根據(jù)各節(jié)點(diǎn)性能參數(shù)的使用率實(shí)時的、動態(tài)的改變節(jié)點(diǎn)的負(fù)載性能. 因在實(shí)現(xiàn)動態(tài)負(fù)載均衡的過程中需要收集各個服務(wù)器的當(dāng)前負(fù)載信息需要一定的額外開銷,為了避免過于頻繁的去收集各個服務(wù)器的性能參數(shù)而導(dǎo)致一定的時延,通常是周期性的去收集當(dāng)前負(fù)載信息以盡可能的降低這些額外的開銷. 并且如果收集的信息不及時或誤差比較大在一定程度上也會影響負(fù)載均衡,為了盡可能降低此類情況的發(fā)生,本文均采用平均值的思想來減少這種誤差.
由于Web服務(wù)器的性能受到服務(wù)器節(jié)點(diǎn)KPI數(shù)據(jù)的影響,所以可以根據(jù)這些影響因素變化的情況,動態(tài)的修改服務(wù)器的權(quán)重. 本文主要根據(jù)節(jié)點(diǎn)的CPU、內(nèi)存、磁盤IO以及網(wǎng)絡(luò)帶寬的使用情況對節(jié)點(diǎn)性能動態(tài)的進(jìn)行調(diào)整. 又因?yàn)镹ginx是根據(jù)集群中各節(jié)點(diǎn)的權(quán)重比,權(quán)重越大分配的請求連接數(shù)越多,權(quán)重越小分配的客戶端請求連接數(shù)就越少,因此可動態(tài)修改服務(wù)器的權(quán)重大小來實(shí)現(xiàn)動態(tài)負(fù)載均衡.
現(xiàn)假設(shè)在周期時間T內(nèi)單個節(jié)點(diǎn)CPU的使用率為C(Ni),內(nèi)存的使用率為M(Ni),磁盤IO的使用率為D(Ni),網(wǎng)絡(luò)帶寬的使用率為B(Ni). 用Sc(Total)、Sm(Total)、Sd(Total)、Sb(Total)分別表示集群中CPU、內(nèi)存、磁盤IO、網(wǎng)絡(luò)帶寬的性能總和.
又因?yàn)楦鱾€因素對服務(wù)器性能依賴的程度不一樣,現(xiàn)假設(shè)CPU、內(nèi)存、磁盤IO、網(wǎng)絡(luò)帶寬的依賴比重分別為Kc、Km、Kd、Kb,并且
集群中每個服務(wù)器節(jié)點(diǎn)的性能真實(shí)比重為:
其中,Wp(Ni)表示服務(wù)集群中每個節(jié)點(diǎn)性能的真實(shí)比重.
由于服務(wù)集群中每個服務(wù)器的各個性能參數(shù)指標(biāo)不一樣,因此集群中每個服務(wù)器節(jié)點(diǎn)的性能比重也不一樣.
在實(shí)際運(yùn)行的過程中,集群中各節(jié)點(diǎn)性能是在不斷變化,權(quán)值也在動態(tài)的改變,因此每個節(jié)點(diǎn)在集群中性能比也在不斷變化. 現(xiàn)假設(shè)W(Ni)表示第i,i∈{1,…,n}個服務(wù)器節(jié)點(diǎn)的權(quán)重,則每個節(jié)點(diǎn)在集群中權(quán)重比例(即當(dāng)前節(jié)點(diǎn)在集群中的負(fù)載均衡性能)為:
其中,Ew(Ni)表示第i個節(jié)點(diǎn)的權(quán)重比例,其中i∈{1,…,n}.
網(wǎng)站的性能優(yōu)劣一般通過響應(yīng)時延[14]來衡量,平均響應(yīng)時延越短,則表明服務(wù)器性能越好. 假設(shè)第i個節(jié)點(diǎn)的平均響應(yīng)時間為T(Ni),假設(shè)集群的每個服務(wù)器節(jié)點(diǎn)平均響應(yīng)時間(其中每個節(jié)點(diǎn)平均響應(yīng)時間為該節(jié)點(diǎn)在周期T內(nèi)n次響應(yīng)的平均時延)為:
在周期T內(nèi)整個集群的平均響應(yīng)時延為:
其中,T(Ni)表示第i個服務(wù)器節(jié)點(diǎn)的平均響應(yīng)時間,表示整個集群平均響應(yīng)時延.
在實(shí)際運(yùn)行的過程中需要根據(jù)各節(jié)點(diǎn)的性能參數(shù)實(shí)時計算各節(jié)點(diǎn)的負(fù)載性能,因此需要獲取在運(yùn)行過程中影響各節(jié)點(diǎn)性能因素的真實(shí)使用率. 設(shè)Uc(Ni)、Um(Ni)、Ud(Ni)、Ub(Ni)分別表示第i個服務(wù)器節(jié)點(diǎn)的CPU、內(nèi)存、磁盤IO、網(wǎng)絡(luò)帶寬的實(shí)時使用率. 則第i個服務(wù)器節(jié)點(diǎn)實(shí)時性能為:
其中,U(Ni)表示第i個服務(wù)器節(jié)點(diǎn)實(shí)時性能利用率.
因?yàn)樵谥芷跁r間T內(nèi),每個節(jié)點(diǎn)由于權(quán)重的不同獲取到的請求連接數(shù)也不同,權(quán)重越大,說明請求到該節(jié)點(diǎn)的連接數(shù)越多,服務(wù)器節(jié)點(diǎn)使用率也就越大. 所以根據(jù)單個連接請求在集群中某個服務(wù)器節(jié)點(diǎn)所占平均性能比來反映當(dāng)前節(jié)點(diǎn)的負(fù)載均衡能力. 為了更好的反映集群中節(jié)點(diǎn)的實(shí)時性能,另引入單個節(jié)點(diǎn)平均響應(yīng)時延與整個集群的平均響應(yīng)時延的比來反映節(jié)點(diǎn)的負(fù)載均衡能力,因?yàn)轫憫?yīng)時延最能直觀的反應(yīng)服務(wù)器節(jié)點(diǎn)的負(fù)載性能,可以避免由于某個連接請求進(jìn)程過大導(dǎo)致當(dāng)前節(jié)點(diǎn)成為超載節(jié)點(diǎn). 根據(jù)上述分析以及反映Web集群負(fù)載均衡的條件建立以下分析模型:
其中,P(Ni)表示節(jié)點(diǎn)i實(shí)時負(fù)載均衡情況,T(Ni)為單個服務(wù)器平均響應(yīng)時延,為整個集群平均響應(yīng)時延.Ew(Ni)為第i個節(jié)點(diǎn)的在集群中負(fù)載比重,Wp(Ni)表示第i個節(jié)點(diǎn)的性能比重,U(Ni)為第i個節(jié)點(diǎn)的性能實(shí)時利用率.
由于單位時間內(nèi)請求服務(wù)器的連接數(shù)是隨機(jī)的,因此在這里引入泊松分布,即根據(jù)客戶端隨機(jī)請求連接數(shù)來確定所需要的服務(wù)器個數(shù),通過Pick-K算法[15]在Web服務(wù)集群中篩選所需服務(wù)器. Pick-K算法的原理是:在更新周期T內(nèi),當(dāng)有任務(wù)到來時,從n臺成員服務(wù)器中選擇k個服務(wù)器,比較每臺服務(wù)器的負(fù)載情況,從性能最優(yōu)的服務(wù)器依次選擇,將任務(wù)發(fā)送給它們.但在實(shí)際運(yùn)行過程中節(jié)點(diǎn)的性能是不斷變化的,當(dāng)某些節(jié)點(diǎn)由于運(yùn)行過程. 本文對該算法進(jìn)行了一些改進(jìn),在Pick-K算法的基礎(chǔ)上加入了一些約束性,引入改進(jìn)的Pick-K算法的目的是確保集群中性能優(yōu)的服務(wù)器始終提供服務(wù),同時避免由于某個訪問請求進(jìn)程過大而阻塞其它請求訪問的情況. 改進(jìn)的Pick-K算法基本原理如下:現(xiàn)假設(shè)有n臺服務(wù)器,從n臺服務(wù)器中選擇k臺,總共有種情況,選出其中性能變化最平穩(wěn)k臺服務(wù)器提供服務(wù),并通過引入標(biāo)準(zhǔn)差來衡量集群負(fù)載變化情況,當(dāng)選中的k臺服務(wù)器節(jié)點(diǎn)的負(fù)載性能標(biāo)準(zhǔn)差高于某個閾值(在上一個周期所求得的標(biāo)準(zhǔn)差),則動態(tài)的調(diào)整集群中相應(yīng)服務(wù)器節(jié)點(diǎn)的負(fù)載性能. 由公式(12)可知P(Ni)表示第i個節(jié)點(diǎn)當(dāng)前負(fù)載情況,現(xiàn)假設(shè)P表示集群中所有節(jié)點(diǎn)實(shí)時負(fù)載性能的向量集合,Pd表示集群中k個服務(wù)器節(jié)點(diǎn)性能變化情況,則:
其中,P表示集群中所有節(jié)點(diǎn)實(shí)時負(fù)載性能的向量集合,Pd表示集群中參與負(fù)載的服務(wù)器節(jié)點(diǎn)性能變化情況,表示選中的k個服務(wù)器實(shí)時負(fù)載性能的平均值.
分析:從公式(14)可以看出,當(dāng)前標(biāo)準(zhǔn)差Pd反映的是集群中參與了負(fù)載均衡相關(guān)節(jié)點(diǎn)的負(fù)載性能的離散程度,當(dāng)標(biāo)準(zhǔn)差越小則說明Web服務(wù)集群負(fù)載越均衡,反之負(fù)載越不均衡. 根據(jù)引入的Pick-K算法計算得出在集群中篩選參與負(fù)載均衡所需服務(wù)器個數(shù)時總共有種情況,其中標(biāo)準(zhǔn)差最小的即為滿足條件的k臺服務(wù)器,現(xiàn)假設(shè)Pd(min)表示所求最小標(biāo)準(zhǔn)差,Dp表示給定的閾值. 則:
下面通過對比最小標(biāo)準(zhǔn)差與閾值來判斷是否需要動態(tài)調(diào)整集群中節(jié)點(diǎn)的性能:
(1)如果Pd(min) (2)如果Pd(min)>Dp,則對集群服務(wù)器節(jié)點(diǎn)的性能進(jìn)行調(diào)整,通過修改權(quán)重. 修改的策略如下:求出集合P中離散程度大的節(jié)點(diǎn),然后對離散程度大的節(jié)點(diǎn)在集群中的負(fù)載權(quán)重進(jìn)行動態(tài)調(diào)整,具體調(diào)整策略根據(jù)公式(12): 1) 當(dāng)P(Ni)大于某個給定的值(上一次更新周期T所求的平均值則說明該節(jié)點(diǎn)負(fù)載過重,如果權(quán)重比較大,可能是由于服務(wù)器節(jié)點(diǎn)的實(shí)時使用率過大,可以減小當(dāng)前節(jié)點(diǎn)的權(quán)重. 如果當(dāng)前權(quán)重比較小,響應(yīng)時延比較長,此時有兩種情況:一是當(dāng)前節(jié)點(diǎn)負(fù)載能力差;二是因?yàn)槟承┰L問請求進(jìn)程過大而阻塞其它請求訪問,從而導(dǎo)致平均時延變長. 以上兩種情況都應(yīng)當(dāng)減小當(dāng)前節(jié)點(diǎn)的負(fù)載權(quán)重,以此來減少請求到當(dāng)前節(jié)點(diǎn)的訪問連接數(shù). 2) 當(dāng)P(Ni)小于給定的值(上一次更新周期T所求的平均值)說明服務(wù)器實(shí)時使用率比較低,此時可以動態(tài)增加相應(yīng)的權(quán)重,提高其負(fù)載均衡能力. 3) 當(dāng)P(Ni)過大(即在周期T內(nèi)請求該節(jié)點(diǎn)絕大多數(shù)請求超時),大于某個給定的值(初始給定),則認(rèn)為該服務(wù)器節(jié)點(diǎn)宕機(jī)不參與集群負(fù)載均衡,將該服務(wù)器節(jié)點(diǎn)置為不可用. 根據(jù)上訴分析可知該算法考慮到了反映服務(wù)器節(jié)點(diǎn)負(fù)載性能的雙重因素(響應(yīng)時間比和性能參數(shù)使用率),通過動態(tài)的調(diào)整節(jié)點(diǎn)在集群中負(fù)載均衡的權(quán)重來使集群達(dá)到均衡負(fù)載. 并且該算法確保始終是負(fù)載均衡能力最好的服務(wù)器節(jié)點(diǎn)在提供服務(wù),當(dāng)服務(wù)器節(jié)點(diǎn)宕機(jī)時也可以減少請求失敗的次數(shù),避免了由于請求宕機(jī)的服務(wù)器節(jié)點(diǎn)而長時間等待,降低了平均響應(yīng)時延. 而且不必頻繁的去修改權(quán)重,只有當(dāng)不滿足一定的條件時才會修改權(quán)重,同時也可以避免由于某個訪問請求進(jìn)程過大導(dǎo)致該節(jié)點(diǎn)成為超載節(jié)點(diǎn). 本實(shí)驗(yàn)采用Nginx搭建Web服務(wù)集群[16](如圖1所示),并使用成熟的Web測試工具Httperf+Autobench對Web服務(wù)集群進(jìn)行性能測試,該實(shí)驗(yàn)采用的是Http請求方式,實(shí)驗(yàn)環(huán)境配置如表1,其中一臺服務(wù)器用作負(fù)載均衡服務(wù)器,另五臺為后端服務(wù)器. 在搭建Nginx服務(wù)器時引入了Nginx+ngx_lua模塊[17],并且利用Lua腳本對nginx.conf配置文件進(jìn)行修改,動態(tài)改變集群中服務(wù)器節(jié)點(diǎn)的負(fù)載權(quán)重. 由于影響服務(wù)器節(jié)點(diǎn)的各個因素對服務(wù)器性能依賴的程度不一樣,本次實(shí)驗(yàn)主要依賴CPU和內(nèi)存,令CPU、內(nèi)存、磁盤IO以及網(wǎng)絡(luò)帶寬的依賴比重分別為:0.4、0.4、0.1、0.1,K=[0.4,0.4,0.1,0.1]. 通過調(diào)用Httperf執(zhí)行Autobench腳本,設(shè)置并發(fā)連接數(shù)增長,本次測試通過每次增加200(其中包含20龐大進(jìn)程并發(fā)數(shù))并發(fā)連接數(shù)進(jìn)行實(shí)驗(yàn),并根據(jù)并發(fā)響應(yīng)時延對加權(quán)連接最小數(shù)、內(nèi)置加權(quán)輪詢算法、和本論文改進(jìn)的DAWRRRLB三種算法的負(fù)載均衡性能進(jìn)行分析. 表1 實(shí)驗(yàn)環(huán)境配置 圖1 測試環(huán)境Web服務(wù)集群架構(gòu)示意圖 實(shí)驗(yàn)一. 假設(shè)在運(yùn)行的過程中集群中沒有服務(wù)器節(jié)點(diǎn)宕機(jī)或斷網(wǎng)等特殊情況. 根據(jù)實(shí)驗(yàn)一得到表2. 表2 三種算法的平均響應(yīng)時延如下 分析:根據(jù)表2得到的平均響應(yīng)時延并結(jié)合圖2可以看出當(dāng)并發(fā)量比較低的時候三者的平均時延相差不多,此時對服務(wù)器的性能影響比較小,3種情況下服務(wù)器都能快速響應(yīng)客戶的請求. 當(dāng)并發(fā)量逐漸變大并大于500的時候,加權(quán)最小連接數(shù)和動態(tài)自適應(yīng)權(quán)重輪詢隨機(jī)負(fù)載均衡算法負(fù)載均衡性能明顯高于加權(quán)輪詢算法,此時服務(wù)器節(jié)點(diǎn)的性能影響比較大,后兩種情況是根據(jù)服務(wù)器的實(shí)時性能動態(tài)調(diào)整服務(wù)器節(jié)點(diǎn)的權(quán)重實(shí)現(xiàn)負(fù)載均衡,動態(tài)的去調(diào)整始終保持性能優(yōu)的節(jié)點(diǎn)響應(yīng)更多請求. 當(dāng)并發(fā)量繼續(xù)增大并大于1100時,此時對服務(wù)器節(jié)點(diǎn)各個性能參數(shù)要求比較高,因此加權(quán)最小連接數(shù)響應(yīng)時延要大于改進(jìn)動態(tài)自適應(yīng)算法(DAWRRRLB)的響應(yīng)時延,因?yàn)楦倪M(jìn)的動態(tài)自適應(yīng)算法(DAWRRRLB)考慮到各個服務(wù)器節(jié)點(diǎn)的實(shí)時性能參數(shù)利用率,是根據(jù)集群中服務(wù)器節(jié)點(diǎn)實(shí)時性能進(jìn)行負(fù)載分配的. 由此可以看出當(dāng)節(jié)點(diǎn)不發(fā)生特殊情況(宕機(jī)或斷電)下符合我們的預(yù)期,通過平均響應(yīng)時延計算WLC算法比WRR算法性能性能提高了14.99%,DAWRRRLB負(fù)載均衡算法性能比WLC算法性能提高了10.61%. 實(shí)驗(yàn)二. 模擬集群在運(yùn)行過程中部分服務(wù)器節(jié)點(diǎn)存在短暫的宕機(jī)或斷網(wǎng)不可用的情況. 本實(shí)驗(yàn)當(dāng)并發(fā)用戶數(shù)為700的時候,讓集群中部分服務(wù)器斷網(wǎng)或宕機(jī)不可用后又恢復(fù). 根據(jù)實(shí)驗(yàn)二得到表3. 從表3實(shí)驗(yàn)數(shù)據(jù)和圖3可以看出滿足實(shí)驗(yàn)一的結(jié)果. 當(dāng)出現(xiàn)宕機(jī)情況下改進(jìn)的動態(tài)自適應(yīng)負(fù)載均衡算法要優(yōu)于其他兩種情況. 因?yàn)楫?dāng)出現(xiàn)宕機(jī)不可用時在下一個更新周期T內(nèi),不可用的兩臺服務(wù)器節(jié)點(diǎn)不參加負(fù)載均衡,從實(shí)驗(yàn)數(shù)據(jù)可以看出提高了成功響應(yīng)連接數(shù),并且也有效降低了整個集群的平均響應(yīng)時延,符合預(yù)期的結(jié)果. 通過響應(yīng)時延計算WLC算法比WRR算法性能提高了14.98%,DAWRRRLB算法負(fù)載性能比WLC算法負(fù)載性能性能提高了15.8%. 并且通過實(shí)驗(yàn)一和實(shí)驗(yàn)二數(shù)據(jù)對比,優(yōu)化后的DAWRRRLB算法在Web服務(wù)集群環(huán)境不穩(wěn)定(集群中服務(wù)器節(jié)點(diǎn)容易宕機(jī)或斷網(wǎng))的情況下負(fù)載性能比其它算法更加優(yōu)越. 表3 三種算法的平均響應(yīng)時延 圖2 響應(yīng)時延(縱坐標(biāo))和某一時刻并發(fā)量(橫坐標(biāo))的關(guān)系折線 圖3 響應(yīng)時延(縱坐標(biāo))和某一時刻并發(fā)量(橫坐標(biāo))的關(guān)系折線 本文提出的動態(tài)負(fù)載均衡算法(DAWRRRLB),能夠根據(jù)服務(wù)集群中各個服務(wù)器節(jié)點(diǎn)的實(shí)時性能去動態(tài)改變服務(wù)器節(jié)點(diǎn)負(fù)載能力,使集群中每個節(jié)點(diǎn)能夠?qū)崟r處于最優(yōu)負(fù)載狀態(tài),始終保證性能最優(yōu)的服務(wù)器節(jié)點(diǎn)提供服務(wù),而且不必頻繁的去修改權(quán)重,只有當(dāng)不滿足一定的條件時才會修改權(quán)重,同時也可以避免由于某個連接請求進(jìn)程過大導(dǎo)致該節(jié)點(diǎn)成為超載節(jié)點(diǎn),也降低了某些節(jié)點(diǎn)由于接收到大量請求出現(xiàn)過載的概率.并采用Nginx作為負(fù)載均衡和反向代理服務(wù)器,通過多次實(shí)驗(yàn)數(shù)據(jù)對比,負(fù)載均衡性能得到了較大的提升.但是此算法也存在一定的缺陷,比如更新周期時間T,如果周期T太大時,各服務(wù)器節(jié)點(diǎn)的負(fù)載情況變化太快,不能實(shí)時反映節(jié)點(diǎn)的性能; 反之,如果周期T太小則需要過于頻繁去獲取服務(wù)器節(jié)點(diǎn)性能參數(shù),反而會降低服務(wù)器節(jié)點(diǎn)的性能. 1 Huang JW,Wang JX,Zhang T,et al. Tuning the aggressive TCP behavior for highly concurrent HTTP connections in data center. Proceeedings of the 36th International Conference on Distributed Computing. Nara,Japan. 2016.98-107. 2 柳偉衛(wèi). 分布式系統(tǒng)常用技術(shù)及案例分析. 北京:電子工業(yè)出版社,2017:2. 3 Wang YZ,Jiang JR,Ye H,et al. A distributed load balancing algorithm for climate big data processing over a multi-core CPU cluster. Concurrency and Computation Practice and Experience,2016,28(15):4144-4160. [doi:10.1002/cpe.v28.v28.15] 4 苗澤. Nginx高性能Web服務(wù)器詳解. 北京:電子工業(yè)出版社,2013:10. 5 Lin H. Research on Nginx reverse proxy visual management scheme and the programming realization. Journal of Guizhou Normal College,2015,31(12):32-35. 6 Singh H,Kumar S. Dispatcher based dynamic load balancing on web server system. International Journal of Grid &Distributed Computing,2011,4(3):89-106. 7 Kaur K,Kaur A. A hybrid approach of load balancing through VMs using ACO,MinMax and genetic algorithm.Proceedings of the 2nd International Conference on Next Generation Computing Technologies (NGCT). Dehradun,India. 2016. 615-620. 8 Ding ZX,Wang XJ,Yang WM. A dynamic load balancing algorithm in heterogeneous network. Proceedings of the 7th International Conference on Intelligent Systems,Modelling and Simulation. Bangkok,Thailand. 2016. 337-342. 9 張堯. 基于Nginx高并發(fā)Web服務(wù)器的改進(jìn)與實(shí)現(xiàn)[碩士學(xué)位論文]. 長春:吉林大學(xué),2016:5. 10 Li HJ,Zhao YY,Zhu GF,et al. A load balancing method based on dynamic time step feedback. Proceedings of the 2nd IEEE International Conference on Computer and Communications (ICCC). Chengdu, China. 2016.2911-2916. 11 Gu Y,Wu CQ. Performance analysis and optimization of distributed workflows in heterogeneous network environ ments. IEEE Transactions on Computers,2016,65(4):1266-1282. [doi:10.1109/TC.2013.62] 12 高振斌,潘亞辰,華中,等. 改進(jìn)的基于加權(quán)最小連接數(shù)的負(fù)載均衡算法. 科學(xué)技術(shù)與工程,2016,16(6):81-85. 13 Li T,Baumberger D,Hahn S. Efficient and scalable multiprocessor fair scheduling using distributed weighted round-robin. Proceedings of the 14th ACM SIGPLAN Symposium on Principles and Practice of Parallel Programming. Raleigh,NC,USA. 2009. 65-74. 14 Elshater Y,Martin P,Hassanein E. Using design patterns to improve web service performance. Proceedings of 2015 IEEE International Conference on Services Computing. New York,NY,USA. 2015. 746-749. 15 王霜,修保新,肖衛(wèi)東. Web服務(wù)器集群的負(fù)載均衡算法研究 . 計 算 機(jī) 工 程 與 應(yīng) 用,2004,40(25):78-80. [doi:10.3321/j.issn:1002-8331.2004.25.024] 16 張開濤. 億級流量網(wǎng)站架構(gòu)核心技術(shù). 北京:電子工業(yè)出版社,2017. 17 陶輝. 深入理解Nginx:模塊開發(fā)與架構(gòu)解析. 2版. 北京:機(jī)械工業(yè)出版社,2016.3 實(shí)驗(yàn)
4 總結(jié)