張 卓,張 上+,項(xiàng)天旭,李夢(mèng)思
(1.三峽大學(xué) 湖北省建筑質(zhì)量檢測(cè)裝備工程技術(shù)研究中心,湖北 宜昌 443002;2.三峽大學(xué) 計(jì)算機(jī)與信息學(xué)院,湖北 宜昌 443002)
近年來(lái)微服務(wù)憑借靈活的服務(wù)支持和優(yōu)秀的組織架構(gòu)得到了國(guó)內(nèi)外企業(yè)的廣泛青睞[1]。所謂的微服務(wù),是指將大型分布式系統(tǒng)按照不同的業(yè)務(wù)與功能解耦成若干微服務(wù),分別提供對(duì)應(yīng)業(yè)務(wù)處理功能,每個(gè)微服務(wù)相當(dāng)于一個(gè)獨(dú)立的小型服務(wù)系統(tǒng)。系統(tǒng)服務(wù)功能的單一性可以更加靈活地應(yīng)用流量限制技術(shù)和負(fù)載均衡算法使系統(tǒng)更好應(yīng)對(duì)高并發(fā)場(chǎng)景,保證系統(tǒng)的可靠性和高效性[2-4]。微服務(wù)作為當(dāng)前新興的分布式架構(gòu),帶來(lái)便捷高效的同時(shí)也對(duì)分布式系統(tǒng)中負(fù)載均衡的問(wèn)題提出了更高的要求[5]。
為了在分布式系統(tǒng)中實(shí)現(xiàn)更優(yōu)秀的負(fù)載均衡效果,本文基于當(dāng)前主流的加權(quán)最小連接數(shù)算法[6],提出一種基于改進(jìn)逼近理想及排序(technique for order preference by similarity to an ideal solution,TOPSIS)模型動(dòng)態(tài)確定權(quán)重進(jìn)行負(fù)載分發(fā)的算法,對(duì)用戶請(qǐng)求進(jìn)行動(dòng)態(tài)調(diào)度,充分利用服務(wù)器資源。所提算法的創(chuàng)新點(diǎn)總結(jié)如下:
(1)考慮集群系統(tǒng)負(fù)載狀況的實(shí)時(shí)性,引入動(dòng)態(tài)權(quán)重,將后端服務(wù)器作為評(píng)價(jià)對(duì)象,實(shí)時(shí)負(fù)載信息作為評(píng)價(jià)指標(biāo),建立計(jì)算模型將評(píng)價(jià)結(jié)果作為依據(jù)匹配出最優(yōu)對(duì)象處理請(qǐng)求,得到最佳分配方案。
(2)針對(duì)所提負(fù)載均衡方案的權(quán)重分配時(shí)效問(wèn)題,提出一種最少上報(bào)策略,后端服務(wù)器發(fā)送權(quán)重信息時(shí)對(duì)比判斷權(quán)重變化率,判斷是否發(fā)送自身權(quán)重,優(yōu)化負(fù)載均衡器與節(jié)點(diǎn)交互所占用資源。
(3)所提算法將網(wǎng)絡(luò)服務(wù)請(qǐng)求的均衡問(wèn)題建模為一個(gè)分配優(yōu)化問(wèn)題,利用改進(jìn)TOPSIS模型求解該問(wèn)題,充分利用集群系統(tǒng)資源,降低系統(tǒng)響應(yīng)時(shí)間,提升吞吐量。
目前負(fù)載均衡技術(shù)的研究主要分為:軟件負(fù)載均衡[7]和硬件負(fù)載均衡[8]。硬件負(fù)載均衡器處理網(wǎng)絡(luò)請(qǐng)求能力與負(fù)載性強(qiáng),負(fù)載均衡策略多樣化。但成本過(guò)高,配置冗余且無(wú)法有效監(jiān)控服務(wù)器使用狀態(tài)。軟件負(fù)載均衡器的成本低且可擴(kuò)展性強(qiáng),配置簡(jiǎn)單,使用靈活,可以改進(jìn)負(fù)載均衡算法來(lái)提高系統(tǒng)的負(fù)載分發(fā)能力。目前國(guó)內(nèi)許多學(xué)者外對(duì)負(fù)載均衡算法進(jìn)行了研究與改進(jìn),比如文獻(xiàn)[9]采用粒子群優(yōu)化算法分配任務(wù),解決有效任務(wù)調(diào)度問(wèn)題;利用動(dòng)態(tài)分組方式提交任務(wù)并結(jié)合資源使用狀態(tài),收集到分組的結(jié)果后,將集群的所有結(jié)果合并到一個(gè)分配圖,最后引入粒子群優(yōu)化算法調(diào)整負(fù)載方案。該方案具有優(yōu)秀的負(fù)載平衡性。文獻(xiàn)[10]提出了一種基于Nginx負(fù)載均衡的動(dòng)態(tài)分配算法,該算法根據(jù)后端服務(wù)器的負(fù)載性能指標(biāo)和處理請(qǐng)求的平均響應(yīng)時(shí)間,通過(guò)改進(jìn)熵值法等算法動(dòng)態(tài)地設(shè)置輪詢權(quán)重,并且對(duì)Nginx內(nèi)部模塊進(jìn)行改進(jìn),通過(guò)測(cè)試平均響應(yīng)時(shí)間和最高并發(fā)量,得到了比Nginx內(nèi)置算法更優(yōu)的結(jié)論。文獻(xiàn)[11]提出一種基于云中心虛擬機(jī)布局的多資源負(fù)載優(yōu)化算法,該算法減少資源碎片且限制虛擬機(jī)空余服務(wù)率,平衡各資源的使用,防止節(jié)點(diǎn)性能浪費(fèi)。但該算法存在節(jié)點(diǎn)資源利用率低的問(wèn)題。文獻(xiàn)[12]提出一種動(dòng)靜融合的負(fù)載均衡算法,針對(duì)服務(wù)器硬件配置和運(yùn)行時(shí)負(fù)載狀態(tài)變化設(shè)計(jì)靜態(tài)權(quán)重與動(dòng)態(tài)權(quán)重。該算法能夠?qū)崟r(shí)調(diào)整服務(wù)器權(quán)重,但沒(méi)有考慮后端服務(wù)器的權(quán)重上報(bào)策略,節(jié)點(diǎn)資源利用率還有進(jìn)一步提升的空間。文獻(xiàn)[13]提出一種動(dòng)態(tài)加權(quán)輪詢算法,引入多負(fù)載指標(biāo)層次分析法確定各性能指標(biāo)對(duì)服務(wù)器負(fù)載的影響程度,實(shí)現(xiàn)動(dòng)態(tài)負(fù)載均衡的算法。該算法判斷服務(wù)器負(fù)載指標(biāo)較全面,但是采用層次分析法主觀意識(shí)過(guò)大,通用性不強(qiáng)。
目前主流的軟件負(fù)載均衡器有Nginx、HAProxy[14]、Ribbon[15]和LVS[16]等。Nginx是一款輕量級(jí)高性能的Web服務(wù)器,其熱部署、代碼開源且可擴(kuò)展性強(qiáng),目前國(guó)內(nèi)外眾多企業(yè)系統(tǒng)架構(gòu)用其作為代理服務(wù)器。本文采用Nginx作為集群系統(tǒng)軟件負(fù)載均衡器,研究基于Nginx的動(dòng)態(tài)權(quán)重負(fù)載均衡算法。
常用負(fù)載均衡算法分析見(jiàn)表1,目前Nginx負(fù)載均衡算法研究中分為靜態(tài)和動(dòng)態(tài)兩大類型。前者是在集群系統(tǒng)初始化之前配置負(fù)載均衡策略,以固定方式分配請(qǐng)求,配置簡(jiǎn)單,在并發(fā)量較小時(shí)能發(fā)揮出優(yōu)秀的效果,也可以解決Session等問(wèn)題。但是當(dāng)并發(fā)量過(guò)大且各類請(qǐng)求資源消耗相差較大時(shí),會(huì)導(dǎo)致整個(gè)集群系統(tǒng)節(jié)點(diǎn)負(fù)載差異較大,平均請(qǐng)求響應(yīng)時(shí)間延長(zhǎng),甚至導(dǎo)致節(jié)點(diǎn)宕機(jī)。后者能夠?qū)崟r(shí)的與后端服務(wù)器進(jìn)行信息交互,根據(jù)服務(wù)器反饋的負(fù)載信息調(diào)整合適的負(fù)載策略,對(duì)比靜態(tài)算法能夠更加合理的將請(qǐng)求分發(fā)到各個(gè)后端服務(wù)器,但是由于負(fù)載均衡器頻繁的收集后臺(tái)節(jié)點(diǎn)負(fù)載信息,會(huì)增大集群系統(tǒng)的資源開銷,導(dǎo)致平均請(qǐng)求響應(yīng)時(shí)間增加,整個(gè)集群性能下降。
表1 常用負(fù)載均衡算法分析
針對(duì)于上述問(wèn)題,本文提出一種能夠根據(jù)后端服務(wù)器實(shí)時(shí)負(fù)載信息調(diào)整權(quán)重,彌補(bǔ)了靜態(tài)負(fù)載均衡算法不能根據(jù)集群系統(tǒng)實(shí)時(shí)負(fù)載情況進(jìn)行策略調(diào)整問(wèn)題的負(fù)載均衡策略,并且優(yōu)化后端服務(wù)器與負(fù)載均衡器之間的交互資源消耗和平均響應(yīng)時(shí)間,同時(shí)提高了集群系統(tǒng)吞吐量。
本節(jié)設(shè)計(jì)的負(fù)載均衡器系統(tǒng)模型如圖1所示。負(fù)載信息收集模塊與負(fù)載信息計(jì)算模塊部署在集群的每臺(tái)后端服務(wù)器上,負(fù)載均衡算法實(shí)現(xiàn)模塊部署在Nginx主機(jī)。
圖1 系統(tǒng)結(jié)構(gòu)
負(fù)載信息收集模塊周期T收集并計(jì)算后端服務(wù)器proc文件夾中CPU利用率(R_cpu)、內(nèi)存利用率(R_mem)、網(wǎng)絡(luò)利用率(R_net)、IO利用率(R_io)性能指標(biāo),使用Redis[17]數(shù)據(jù)庫(kù)作為全局?jǐn)?shù)據(jù)區(qū)域共享給負(fù)載信息計(jì)算模塊,負(fù)載信息收集模塊流程如圖2所示。
圖2 負(fù)載信息收集模塊流程
負(fù)載信息計(jì)算模塊主要是解決權(quán)重計(jì)算的相關(guān)問(wèn)題,主要實(shí)現(xiàn)如下兩個(gè)功能,負(fù)載信息計(jì)算模塊流程如圖3所示。
圖3 負(fù)載信息計(jì)算模塊流程
(1)該模塊周期T在全局?jǐn)?shù)據(jù)區(qū)域Redis中獲取所有后端服務(wù)器負(fù)載信息,建立本文設(shè)計(jì)的改進(jìn)TOPSIS模型計(jì)算后端服務(wù)器綜合權(quán)重。權(quán)重信息反映了該服務(wù)器當(dāng)前負(fù)載狀態(tài)。
(2)該模塊以HTTP請(qǐng)求中Post方法周期T發(fā)送權(quán)重JSON信息到負(fù)載均衡算法實(shí)現(xiàn)模塊,確保在下一個(gè)周期T內(nèi),權(quán)重最大的后端服務(wù)器能夠獲得更多的服務(wù)請(qǐng)求。該模塊每隔周期T檢測(cè)所得的權(quán)重大小,若新權(quán)重與上一次計(jì)算所得權(quán)重超過(guò)權(quán)重變化率Δt,則將新權(quán)重發(fā)送至負(fù)載均衡器。反之則不發(fā)送,只是將權(quán)重信息存儲(chǔ)到Redis中,繼續(xù)沿用上一次接收的權(quán)重信息。主動(dòng)方式發(fā)送權(quán)重信息可以減少由于集群系統(tǒng)頻繁發(fā)送數(shù)據(jù)而占用網(wǎng)絡(luò)資源。由于周期T和權(quán)重變化率Δt在實(shí)際的應(yīng)用場(chǎng)合都有所不同,本文通過(guò)Apache JMeter[18]壓測(cè)后得出周期T與權(quán)重變化率Δt。
負(fù)載均衡算法實(shí)現(xiàn)模塊包括Nginx和注冊(cè)中心Consul[19]。Nginx的Upsync[20]模塊周期T從Consul中的K/V服務(wù)中取出后端服務(wù)器列表和權(quán)重信息,并根據(jù)改寫的Nginx的Upstream[21]模塊使加權(quán)最小連接數(shù)算法的靜態(tài)權(quán)重變更為動(dòng)態(tài)權(quán)重,為后端服務(wù)器動(dòng)態(tài)調(diào)整權(quán)重,負(fù)載均衡算法實(shí)現(xiàn)模塊流程如圖4所示。
圖4 負(fù)載均衡算法實(shí)現(xiàn)模塊流程
TOPSIS是一種逼近理想解及排序算法,主要應(yīng)用在多目標(biāo)決策分析[22]?;驹硎峭ㄟ^(guò)歸一化后的數(shù)據(jù)建立規(guī)范化矩陣,找出其多個(gè)目標(biāo)集合中最劣目標(biāo)對(duì)象(反理想解)和最優(yōu)目標(biāo)對(duì)象(正理想解),計(jì)算評(píng)價(jià)目標(biāo)集合各數(shù)據(jù)與最劣目標(biāo)對(duì)象和最優(yōu)目標(biāo)對(duì)象的歐式距離,獲得各評(píng)價(jià)目標(biāo)對(duì)象與最優(yōu)目標(biāo)對(duì)象的貼近度作為理想貼近度,按理想解貼近度的值進(jìn)行排序作為評(píng)價(jià)目標(biāo)對(duì)象優(yōu)劣的依據(jù)。理想貼近度設(shè)計(jì)取值在0和1之間,該值越接近1,則相應(yīng)的目標(biāo)對(duì)象越接近最優(yōu)水平,反之,越接近0,則相應(yīng)的目標(biāo)對(duì)象越接近最劣水平。
在本文設(shè)計(jì)的算法中,將后端服務(wù)器的負(fù)載信息采集模塊收集的CPU利用率(R_cpu)、內(nèi)存利用率(R_mem)、網(wǎng)絡(luò)利用率(R_net)、IO利用率(R_io)作為評(píng)價(jià)目標(biāo),根據(jù)TOPSIS建模計(jì)算出理想貼近度作為權(quán)重發(fā)送給負(fù)載均衡器,故算法的權(quán)重取值范圍在0和1之間。負(fù)載均衡器根據(jù)各后端服務(wù)器的權(quán)重,選擇出最優(yōu)的后端服務(wù)器響應(yīng)處理用戶請(qǐng)求。本文定義用Li來(lái)表示各個(gè)后端服務(wù)器的權(quán)重,下標(biāo)i(i=1,2,3,…,n) 表示第i臺(tái)后端服務(wù)器,Ri_cpu,Ri_mem,Ri_net,Ri_io分別代表第i臺(tái)后端服務(wù)器的CPU利用率、內(nèi)存利用率、網(wǎng)絡(luò)利用率和IO利用率。
根據(jù)上文構(gòu)建的后端服務(wù)器指標(biāo)體系,建立本文算法TOPSIS模型的具體步驟與公式如下:
(1)為了消除負(fù)載信息指標(biāo)之間量綱的影響,需要對(duì)負(fù)載信息指標(biāo)進(jìn)行標(biāo)準(zhǔn)化處理。建立負(fù)載信息指標(biāo)的正向化矩陣R,rij為第i臺(tái)后端服務(wù)器的第j個(gè)評(píng)價(jià)指標(biāo)
(1)
(2)對(duì)其標(biāo)準(zhǔn)化的矩陣記為Z,Z中的每一個(gè)元素為
(2)
(3)由式(2)可得標(biāo)準(zhǔn)化負(fù)載信息指標(biāo)矩陣Z
(3)
(4)定義各項(xiàng)負(fù)載信息評(píng)價(jià)指標(biāo)最大值集合Z+
(4)
(5)定義負(fù)載信息各項(xiàng)評(píng)價(jià)指標(biāo)最小值集合Z-
(5)
(6)定義第i(i=1,2,3,…,n) 臺(tái)后端服務(wù)器各項(xiàng)負(fù)載信息評(píng)價(jià)指標(biāo)與其對(duì)應(yīng)評(píng)價(jià)指標(biāo)最大值的歐式距離
(6)
(7)定義第i(i=1,2,3,…,n) 臺(tái)后端服務(wù)器各項(xiàng)負(fù)載信息評(píng)價(jià)指標(biāo)與其對(duì)應(yīng)評(píng)價(jià)指標(biāo)最小值的歐式距離
(7)
(8)由式(6)和式(7)綜合計(jì)算得出第i(i=1,2,3,…,n) 臺(tái)后端服務(wù)器的理想貼近度作為權(quán)重
(8)
上述設(shè)計(jì)TOPSIS模型雖然可以計(jì)算出各個(gè)后端服務(wù)器的權(quán)重,但是該模型略顯片面性,因?yàn)槿鄙俨煌阅苤笜?biāo)之間的比較。雖然層次分析等方法可以確定不同性能指標(biāo)權(quán)重,但是其需要對(duì)指標(biāo)間的關(guān)系進(jìn)行刨析且其主觀意識(shí)過(guò)大。本文采取相對(duì)客觀的熵值賦權(quán)法[23]計(jì)算性能指標(biāo)權(quán)重并結(jié)合TOPSIS模型計(jì)算出后端服務(wù)器的最終權(quán)重。
由于各項(xiàng)性能指標(biāo)在計(jì)量單位上的不統(tǒng)一,故對(duì)這4項(xiàng)指標(biāo)進(jìn)行綜合計(jì)算前需要各項(xiàng)指標(biāo)進(jìn)行數(shù)據(jù)處理,以此來(lái)解決數(shù)據(jù)差異性問(wèn)題,此步驟已在式(1)~式(3)中完成,可以直接用以計(jì)算。負(fù)載性能指標(biāo)綜合計(jì)算步驟如下:
(1)計(jì)算第j項(xiàng)負(fù)載信息指標(biāo)下的第i臺(tái)后端服務(wù)器占該指標(biāo)總和比例
(9)
(2)計(jì)算第j項(xiàng)負(fù)載信息評(píng)價(jià)指標(biāo)的熵值
(10)
其中,ln為自然對(duì)數(shù),ej>0,k>0。
(3)計(jì)算第j項(xiàng)負(fù)載信息評(píng)價(jià)指標(biāo)的信息效用值
dj=1-ej
(11)
(4)計(jì)算第j項(xiàng)負(fù)載信息評(píng)價(jià)指標(biāo)的權(quán)重
(12)
基于式(12)可以改進(jìn)式(6)與式(7),為不同的負(fù)載信息指標(biāo)設(shè)置不同的權(quán)重,可以得到如下公式
(13)
(14)
負(fù)載信息計(jì)算模塊周期T的長(zhǎng)短會(huì)直接影響本文算法負(fù)載均衡效果。如果周期T選取過(guò)短,則負(fù)載信息計(jì)算模塊頻繁的發(fā)送權(quán)重信息會(huì)給負(fù)載均衡器帶來(lái)過(guò)多的資源開銷。如果周期T選取過(guò)長(zhǎng),負(fù)載均衡器不能實(shí)時(shí)的更新各后端服務(wù)器的權(quán)重,負(fù)載均衡的效果會(huì)受到影響。
本文引入權(quán)重變化率Δt并設(shè)計(jì)最少上報(bào)策略解決權(quán)重上報(bào)周期問(wèn)題。該策略使各后端服務(wù)器在周期T內(nèi)的權(quán)重變化幅度與預(yù)先壓測(cè)出的權(quán)重變化率Δt相比較,當(dāng)權(quán)重變化率大于Δt時(shí),將新權(quán)重發(fā)送至負(fù)載均衡器,當(dāng)小于Δt值時(shí),只在Redis中修改保存當(dāng)前的權(quán)重信息。如果負(fù)載均衡器在周期T內(nèi)沒(méi)有收到后端服務(wù)器提交的權(quán)重信息,則按照上一周期T接收的該后端服務(wù)器的權(quán)重信息進(jìn)行負(fù)載分發(fā)。權(quán)重變化率Δt計(jì)算公式如下所示
(15)
其中,Li(t1) 表示后端服務(wù)器i在t1時(shí)刻的權(quán)重,Li(t2) 表示該后端服務(wù)器i在t2時(shí)刻的權(quán)重,Δt表示該后端服務(wù)器在一個(gè)周期T內(nèi)的權(quán)重變化率,且t2>t1。
本節(jié)實(shí)驗(yàn)拓?fù)浼軜?gòu)包括一臺(tái)客戶端服務(wù)器和負(fù)載均衡器和3臺(tái)后端服務(wù)器組建模擬基于微服務(wù)架構(gòu)的后端服務(wù)器集群系統(tǒng)。
實(shí)驗(yàn)架構(gòu)如圖5所示,其中客戶端中安裝了Apache JMeter測(cè)壓工具,可以模擬大量并發(fā)請(qǐng)求,實(shí)驗(yàn)環(huán)境配置見(jiàn)表2。通過(guò)Apache JMeter模擬多個(gè)客戶端對(duì)集群系統(tǒng)進(jìn)行并發(fā)訪問(wèn)來(lái)測(cè)試負(fù)載均衡器的負(fù)載能力,根據(jù)吞吐量和平均響應(yīng)時(shí)間兩個(gè)方面的指標(biāo)與其它主流負(fù)載均衡算法的對(duì)比情況來(lái)檢驗(yàn)本文算法的效果。
表2 實(shí)驗(yàn)環(huán)境配置
在第3章對(duì)算法的分析中可知周期T是一個(gè)待定的參數(shù)。故先對(duì)周期T進(jìn)行測(cè)試選值,測(cè)試從4 s開始,11 s結(jié)束,每隔1 s測(cè)試一次,共選取10個(gè)時(shí)間節(jié)點(diǎn),使用Apache JMeter生成10組數(shù)據(jù)請(qǐng)求。每組用戶請(qǐng)求并發(fā)數(shù)為1100和1300,取10次實(shí)驗(yàn)結(jié)果的平均值。評(píng)價(jià)標(biāo)準(zhǔn)為請(qǐng)求返回的響應(yīng)時(shí)間,響應(yīng)時(shí)間越短,說(shuō)明服務(wù)器對(duì)用戶的請(qǐng)求處理越快,集群性能也越好。
平均響應(yīng)時(shí)間與周期T如圖6所示,在4 s到6 s階段,由于在周期較短且處于高并發(fā)場(chǎng)景,負(fù)載均衡器過(guò)于頻繁的獲取后端服務(wù)器權(quán)重信息,大量占用了集群資源開銷,平均響應(yīng)時(shí)間逐步下降。在6 s到11 s階段,由于負(fù)載均衡器獲取負(fù)載信息周期過(guò)長(zhǎng),對(duì)后端服務(wù)器權(quán)重調(diào)整不夠及時(shí),平均響應(yīng)時(shí)間逐步升高。當(dāng)周期T等于6 s時(shí)集群的性能最好,故本文實(shí)驗(yàn)選取周期T為6 s。
圖6 平均響應(yīng)時(shí)間與周期T關(guān)系
選出合適的周期T后,在該周期下分別選取權(quán)重變化率Δt為0.07,0.08,0.09,0.10,0.11,0.12,測(cè)試條件和評(píng)價(jià)標(biāo)準(zhǔn)與測(cè)試周期T時(shí)相同,同樣取10組測(cè)試結(jié)果的平均值。平均響應(yīng)時(shí)間與權(quán)重變化率如圖7所示,從測(cè)試結(jié)果可以得到,當(dāng)Δt為0.09時(shí)平均響應(yīng)時(shí)間最短,故本文實(shí)驗(yàn)選取Δt值為0.09。
圖7 平均響應(yīng)時(shí)間與權(quán)重變化率關(guān)系
為了測(cè)試本文動(dòng)態(tài)權(quán)重負(fù)載均衡算法合理分配資源的效果,使用Apache JMeter對(duì)整個(gè)集群系統(tǒng)性能進(jìn)行測(cè)試。主要測(cè)試內(nèi)容為:在不同的并發(fā)數(shù)下,分別對(duì)加權(quán)最小連接數(shù)算法(weighted least-connection scheduling,least-con)、加權(quán)輪詢算法(weight round robin,WRR)和本文提出算法的平均響應(yīng)時(shí)間、吞吐量進(jìn)行對(duì)比測(cè)試。實(shí)驗(yàn)進(jìn)行10次,并對(duì)實(shí)驗(yàn)記錄數(shù)據(jù)取平均值,得到各算法的平均響應(yīng)時(shí)間與吞吐量的對(duì)比圖。
平均響應(yīng)時(shí)間與并發(fā)數(shù)關(guān)系如圖8所示,整體可見(jiàn)3種算法的平均響應(yīng)時(shí)間都在隨著并發(fā)量的增加而提升。在并發(fā)量為500以下時(shí),3種不同算法的平均響應(yīng)時(shí)間旗鼓相當(dāng)并沒(méi)有明顯的差距。因?yàn)榇藭r(shí)并發(fā)量較小,集群系統(tǒng)處于低負(fù)荷狀態(tài)各后端服務(wù)器均有能力來(lái)處理請(qǐng)求,動(dòng)態(tài)負(fù)載均衡算法根據(jù)后端服務(wù)器運(yùn)行狀態(tài)進(jìn)行負(fù)載分發(fā)的優(yōu)勢(shì)并不能體現(xiàn)出來(lái),所以在集群系統(tǒng)并發(fā)量小的場(chǎng)景下更加推薦使用靜態(tài)負(fù)載均衡算法,配置簡(jiǎn)單且能節(jié)約網(wǎng)絡(luò)資源。當(dāng)并發(fā)量超過(guò)500后,此時(shí)集群系統(tǒng)已經(jīng)進(jìn)入中負(fù)荷狀態(tài),3種算法的平均響應(yīng)時(shí)間都有大幅度增加的趨勢(shì),但least-con算法對(duì)比其它兩種算法平均響應(yīng)時(shí)間稍低,因?yàn)樵撍惴梢愿鶕?jù)事先配置好的后端服務(wù)器權(quán)重,并結(jié)合選擇擁有最小連接數(shù)的后端服務(wù)器進(jìn)行請(qǐng)求轉(zhuǎn)發(fā),而靜態(tài)算法由于不能根據(jù)各后端服務(wù)器實(shí)時(shí)負(fù)載信息進(jìn)行調(diào)整,故平均響應(yīng)時(shí)間略高,本文算法由于會(huì)周期T獲取所有后端服務(wù)器詳細(xì)負(fù)載信息,所以平均響應(yīng)時(shí)間稍高于least-con算法。總體來(lái)說(shuō)3種算法負(fù)載分發(fā)能力勢(shì)均力敵,能滿足基本負(fù)載分發(fā)要求。但是當(dāng)并發(fā)量超過(guò)900后,集群系統(tǒng)進(jìn)入高負(fù)載狀態(tài),由于本文設(shè)計(jì)算法可以根據(jù)后端服務(wù)器負(fù)載情況動(dòng)態(tài)更新自身權(quán)重,在集群高負(fù)荷狀態(tài)下能夠選出最佳的后端服務(wù)器進(jìn)行請(qǐng)求轉(zhuǎn)發(fā),充分利用集群資源,優(yōu)勢(shì)逐漸顯現(xiàn)出來(lái),平均響應(yīng)時(shí)間與WRR算法和least-con算法拉開距離。在并發(fā)數(shù)處于較高的1500時(shí),本文動(dòng)態(tài)權(quán)重負(fù)載均衡算法平均響應(yīng)時(shí)間比least-con降低了15%,比WRR算法降低了13.1%。
圖8 平均響應(yīng)時(shí)間與并發(fā)數(shù)關(guān)系
吞吐量與并發(fā)數(shù)關(guān)系如圖9所示,在并發(fā)量達(dá)到500之前,集群系統(tǒng)處于低負(fù)荷狀態(tài),3種算法的吞吐量都隨著并發(fā)量的增加而增加,且比較穩(wěn)定,說(shuō)明3種算法在并發(fā)量較小的場(chǎng)景下都可以合理的完成負(fù)載分發(fā)。在并發(fā)量達(dá)到500之后,集群系統(tǒng)處于中負(fù)荷狀態(tài),本文算法與least-con算法吞吐量高于WRR算法,靜態(tài)負(fù)載均衡算法的缺陷開始顯露,由于不能動(dòng)態(tài)調(diào)整各后端服務(wù)器權(quán)重進(jìn)行負(fù)載分發(fā),導(dǎo)致并發(fā)連接數(shù)出現(xiàn)丟失的情況,吞吐量低于動(dòng)態(tài)負(fù)載均衡算法。并發(fā)數(shù)達(dá)到900之后,集群系統(tǒng)處于高負(fù)荷狀態(tài),3種算法吞吐量均開始大幅度下降,由于本文算法與least-con算法為動(dòng)態(tài)負(fù)載均衡算法能夠?qū)崟r(shí)調(diào)整負(fù)載分發(fā)對(duì)象,所以并發(fā)量基本持平吞吐量,能夠做到請(qǐng)求并發(fā)量基本持平于實(shí)際并發(fā)量,WRR算法由于在配置中固定的負(fù)載轉(zhuǎn)發(fā)對(duì)象權(quán)重,所以在高并發(fā)下吞吐量大幅下降。并發(fā)量為1200時(shí),集群系統(tǒng)處于中超高負(fù)荷狀態(tài),3種算法的吞吐量都大幅下降,但本文算法在超高并發(fā)下能夠根據(jù)整個(gè)集群系統(tǒng)狀態(tài)實(shí)時(shí)更新權(quán)重信息選擇出最佳的后端服務(wù)器進(jìn)行請(qǐng)求轉(zhuǎn)發(fā),所以本文算法減少的幅度較為穩(wěn)定且高于least-con算法與WRR算法。本文算法吞吐量比least-con算法高21 %,比WRR算法高24.9%;并發(fā)量為較高的1500時(shí),本文算法吞吐量比least-con算法高9%,比WRR算法高18.9%。從實(shí)驗(yàn)結(jié)果整體來(lái)看,在并發(fā)量超過(guò)950之后,3種算法的吞吐量都隨并發(fā)量的增加有大幅度的減少,但是,表明本文算法對(duì)比這兩種主流算法能夠更加合理利用服務(wù)器資源。
圖9 吞吐量與并發(fā)數(shù)關(guān)系
實(shí)驗(yàn)結(jié)果表明,本文提出的基于改進(jìn)TOPSIS的動(dòng)態(tài)權(quán)重負(fù)載均衡算法在高并發(fā)場(chǎng)景下對(duì)比其它兩種主流算法能更加有效合理進(jìn)行負(fù)載分發(fā),減少集群系統(tǒng)平均響應(yīng)時(shí)間,使整個(gè)集群系統(tǒng)性能得到了提升。
負(fù)載均衡算法是大型分布式系統(tǒng)的關(guān)鍵研究問(wèn)題。本文針對(duì)當(dāng)前流行的微服務(wù)架構(gòu)下后端服務(wù)器集群負(fù)載失衡的問(wèn)題,引入動(dòng)態(tài)權(quán)重概念,將后端服務(wù)器當(dāng)前剩余負(fù)載性能抽象為權(quán)重,設(shè)計(jì)了一種實(shí)時(shí)反饋調(diào)整權(quán)重的動(dòng)態(tài)負(fù)載均衡算法。在并發(fā)數(shù)較高情況下,本算法相較于其它常見(jiàn)主流負(fù)載均衡算法能夠以動(dòng)態(tài)權(quán)重為依據(jù)合理分配請(qǐng)求到后端服務(wù)器節(jié)點(diǎn),大幅度提升了集群系統(tǒng)的性能。
所提算法設(shè)計(jì)的負(fù)載均衡器為單體架構(gòu),所有請(qǐng)求都由負(fù)載均衡器進(jìn)行處理轉(zhuǎn)發(fā),在超高并發(fā)下存在宕機(jī)隱患。接下來(lái)將研究負(fù)載均衡器的服務(wù)流控技術(shù),并且全面結(jié)合關(guān)鍵請(qǐng)求調(diào)度,異常處理、流量限制算法等,從而實(shí)現(xiàn)資源利用率的最大化以及集群的高可用性。