胡逸飛,包梓群,包曉安
(浙江理工大學(xué) 信息學(xué)院,浙江 杭州 310018)
Nginx服務(wù)器集群的負(fù)載均衡技術(shù)領(lǐng)域已出現(xiàn)較多傳統(tǒng)靜態(tài)調(diào)度算法,例如,Nginx已自行支持的輪詢和加權(quán)輪詢算法、最小連接數(shù)算法、IP_Hash算法等[1]。這些算法能夠在簡(jiǎn)單的工作場(chǎng)景下發(fā)揮一定作用,但其在復(fù)雜的現(xiàn)代網(wǎng)絡(luò)環(huán)境下已凸顯各種問(wèn)題,例如,其無(wú)法根據(jù)具體網(wǎng)絡(luò)負(fù)載情況進(jìn)行實(shí)時(shí)的負(fù)載策略再調(diào)整[2],點(diǎn)到點(diǎn)式的靜態(tài)算法在實(shí)際網(wǎng)絡(luò)環(huán)境中常會(huì)產(chǎn)生大量錯(cuò)誤峰值點(diǎn)導(dǎo)致最佳結(jié)果的判定出錯(cuò),因此在靜態(tài)算法的基礎(chǔ)上出現(xiàn)了根據(jù)服務(wù)器反饋的實(shí)際負(fù)載信息。通過(guò)實(shí)時(shí)變動(dòng)負(fù)載的分配策略進(jìn)行負(fù)載均衡調(diào)度的動(dòng)態(tài)負(fù)載均衡算法[3]在一定程度上滿足了根據(jù)負(fù)載情況實(shí)時(shí)進(jìn)行算法調(diào)整的要求,但也存在一定程度的問(wèn)題,例如低負(fù)載情況下的低負(fù)載均衡效率、對(duì)網(wǎng)絡(luò)資源的占用和局部峰值導(dǎo)致整體分配未達(dá)到最佳情況等[4]。本文所提算法解決了動(dòng)靜態(tài)算法存在的問(wèn)題,同時(shí)通過(guò)引入遺傳算法解決了局部最優(yōu)問(wèn)題,具有一定的應(yīng)用價(jià)值和研究意義。
目前,負(fù)載均衡普遍可分為靜態(tài)算法和動(dòng)態(tài)算法兩個(gè)版本,動(dòng)態(tài)負(fù)載平衡技術(shù)更受研究人員青睞。文獻(xiàn)[5]對(duì)比了已有Web服務(wù)器集群的調(diào)度策略,包括隨機(jī)法、循環(huán)法、加權(quán)循環(huán)法、最短隊(duì)列算法以及擴(kuò)散負(fù)載平衡法等,并提出了協(xié)作性自適應(yīng)對(duì)稱發(fā)起擴(kuò)散策略。通過(guò)隊(duì)列長(zhǎng)度計(jì)算服務(wù)器的負(fù)載閾值并使得服務(wù)器通過(guò)廣播知曉彼此的狀態(tài),從而進(jìn)行負(fù)載均衡策略重定位,但該策略存在高并發(fā)狀態(tài)下相應(yīng)時(shí)間較長(zhǎng)、系統(tǒng)吞吐量提升不明顯等問(wèn)題。文獻(xiàn)[6]提出了基于約束測(cè)度的負(fù)載均衡技術(shù),定時(shí)計(jì)算每個(gè)服務(wù)器的容量和負(fù)載。如果服務(wù)器的負(fù)載大于平衡閾值,則使用負(fù)載平衡算法分配任務(wù),但該策略存在影響因子單一、提升效率不明顯等問(wèn)題。文獻(xiàn)[7]通過(guò)在兩個(gè)負(fù)載均衡服務(wù)器上分別對(duì)Nginx及HAProxy進(jìn)行改進(jìn)加權(quán)輪詢算法的對(duì)比實(shí)驗(yàn),獲得了相關(guān)算法的性能評(píng)價(jià)參數(shù),但其在低負(fù)載情況下的負(fù)載均衡效果不佳。
我國(guó)科研人員在負(fù)載均衡技術(shù)研究方面亦取得了不錯(cuò)的進(jìn)展。文獻(xiàn)[8]通過(guò)研究Nginx負(fù)載均衡的加權(quán)輪詢算法原理和實(shí)現(xiàn)過(guò)程,提出了一種基于后端服務(wù)器實(shí)時(shí)負(fù)載信息和相應(yīng)時(shí)間情況的動(dòng)態(tài)反饋負(fù)載均衡算法,并通過(guò)實(shí)驗(yàn)論證了該算法在抗并發(fā)能力上的優(yōu)勢(shì)。但該算法存在低負(fù)載下無(wú)提升甚至負(fù)提升等問(wèn)題,有待進(jìn)一步改進(jìn)優(yōu)化。文獻(xiàn)[9]提出了一種自適應(yīng)負(fù)載指標(biāo)權(quán)值的負(fù)載均衡算法,該算法在對(duì)服務(wù)器節(jié)點(diǎn)分類的基礎(chǔ)上利用節(jié)點(diǎn)性能和綜合負(fù)載信息分配任務(wù),從而避免負(fù)載傾斜問(wèn)題。但該算法僅在相同I/O和相近CPU服務(wù)器環(huán)境下進(jìn)行測(cè)試,不能有效地反應(yīng)復(fù)雜集群下的負(fù)載情況。文獻(xiàn)[10]提出了一種基于動(dòng)態(tài)反饋機(jī)制的負(fù)載均衡算法,通過(guò)自適應(yīng)加權(quán)最小負(fù)載方法獲取更優(yōu)秀的輔助均衡效果,但其在低負(fù)載下分配效率較低。文獻(xiàn)[11]提出了一種基于預(yù)測(cè)模型和獨(dú)立訓(xùn)練節(jié)點(diǎn)的負(fù)載均衡算法。采用機(jī)器學(xué)習(xí)算法、樸素貝葉斯方法、決策樹(shù)算法和支持向量機(jī)分別對(duì)實(shí)驗(yàn)數(shù)據(jù)進(jìn)行訓(xùn)練從而獲得響應(yīng)時(shí)間預(yù)測(cè)模型。然而,由于樸素貝葉斯算法的缺陷,可能出現(xiàn)局部最優(yōu)解的情況,從而影響算法整體的準(zhǔn)確性,在高并發(fā)環(huán)境下表現(xiàn)不佳。
上述文獻(xiàn)中的算法在實(shí)驗(yàn)環(huán)境的高負(fù)載情況大都有一定效率上的提升,但在低負(fù)載情況下,相比于傳統(tǒng)算法并沒(méi)有效率上的提升,甚至還會(huì)出現(xiàn)效率下降情況,同時(shí)亦存在由于局部負(fù)載計(jì)算最優(yōu)解導(dǎo)致的整體分配不均等問(wèn)題。為了推動(dòng)解決當(dāng)前負(fù)載均衡算法所存在的上述問(wèn)題,本文提出了一種基于改進(jìn)遺傳算法的動(dòng)靜態(tài)結(jié)合的負(fù)載均衡算法。
對(duì)于服務(wù)器集群的負(fù)載均衡來(lái)說(shuō),準(zhǔn)確評(píng)估服務(wù)器性能是問(wèn)題的關(guān)鍵所在,不同的指標(biāo)對(duì)于負(fù)載均衡調(diào)度選擇的判斷具有較大影響。本文結(jié)合文獻(xiàn)結(jié)論及實(shí)驗(yàn)反饋,采用各服務(wù)器節(jié)點(diǎn)CPU(C)、內(nèi)存(M)、磁盤(pán)I/O(I)和網(wǎng)絡(luò)帶寬(N)作為綜合性能評(píng)價(jià)指標(biāo)。
當(dāng)集群中存在n個(gè)節(jié)點(diǎn)時(shí),對(duì)于每個(gè)節(jié)點(diǎn)Si∈{S1,S2,S3,…,Sn},n>1,服務(wù)器性能評(píng)價(jià)指標(biāo)C(Si)∈{C(S1),C(S2),C(S3),…,C(Sn)},n>1,根據(jù)各項(xiàng)性能可設(shè)定評(píng)價(jià)指標(biāo)為
(1)
其中,σi為各個(gè)服務(wù)器性能的權(quán)值參數(shù),和值為1。本文根據(jù)文獻(xiàn)[12]及實(shí)驗(yàn)數(shù)據(jù)反饋,標(biāo)定服務(wù)器性能的評(píng)價(jià)指標(biāo)為
(2)
其中,每個(gè)服務(wù)器節(jié)點(diǎn)各性能評(píng)價(jià)權(quán)值為
(3)
其中,j∈{C,M,I,N},為各性能集合中的一項(xiàng);Wi(Si)為服務(wù)器集群中節(jié)點(diǎn)Si的一項(xiàng)初始性能數(shù)值。
本文通過(guò)改進(jìn)概率擇優(yōu)算法[13]提出了一種適用于高負(fù)載狀態(tài)下的新的自適應(yīng)動(dòng)態(tài)負(fù)載均衡算法,其算法流程描述如下:對(duì)不同的業(yè)務(wù)服務(wù)器集群進(jìn)行初始化。根據(jù)客戶端不同的請(qǐng)求類型或請(qǐng)求處理需求將服務(wù)器集群進(jìn)行分組,對(duì)于一些泛用節(jié)點(diǎn)或無(wú)法根據(jù)請(qǐng)求區(qū)分的服務(wù)器節(jié)點(diǎn)則先根據(jù)式(2)計(jì)算器初始性能評(píng)價(jià)指標(biāo),并對(duì)各服務(wù)器節(jié)點(diǎn)初始性能評(píng)價(jià)指標(biāo)進(jìn)行排序后再根據(jù)節(jié)點(diǎn)數(shù)量盡可能地進(jìn)行均勻分組。例如對(duì)于擁有N個(gè)服務(wù)器節(jié)點(diǎn)的服務(wù)器集群,在先根據(jù)請(qǐng)求類型將其中的M個(gè)節(jié)點(diǎn)(M 對(duì)于將請(qǐng)求分配至服務(wù)器組中某個(gè)節(jié)點(diǎn)的分配算法,需根據(jù)自適應(yīng)動(dòng)態(tài)負(fù)載均衡算法的特點(diǎn),基于各節(jié)點(diǎn)的實(shí)時(shí)負(fù)載情況進(jìn)行分配算法邏輯更新。本文采用服務(wù)器節(jié)點(diǎn)負(fù)載信息收集模塊來(lái)收集各節(jié)點(diǎn)的實(shí)時(shí)負(fù)載信息,但其為一種需要消耗網(wǎng)絡(luò)資源及傳輸時(shí)間的收集方法。當(dāng)后端服務(wù)器集群數(shù)量較大且某些服務(wù)器節(jié)點(diǎn)在時(shí)間段T內(nèi)的負(fù)載信息情況未發(fā)生明顯變化時(shí),為了節(jié)省集群網(wǎng)絡(luò)資源,本文根據(jù)負(fù)載評(píng)價(jià)指標(biāo)變化率ΔD來(lái)判斷某節(jié)點(diǎn)Si在t1~t2時(shí)間段內(nèi)的負(fù)載信息是否上傳,其計(jì)算式如式(4)所示。 (4) 其中,Di為根據(jù)式(2)計(jì)算的節(jié)點(diǎn)Si在對(duì)應(yīng)時(shí)間點(diǎn)的實(shí)時(shí)負(fù)載性能評(píng)價(jià)指標(biāo)。本文根據(jù)服務(wù)器集群的實(shí)際運(yùn)行環(huán)境對(duì)其設(shè)定一個(gè)預(yù)設(shè)上報(bào)閾值Δd,當(dāng)服務(wù)器本次計(jì)算的負(fù)載變化率ΔD小于該閾值時(shí),說(shuō)明該時(shí)間段內(nèi)該節(jié)點(diǎn)的負(fù)載信息變化過(guò)小,本次負(fù)載信息將不會(huì)上報(bào),只在本節(jié)點(diǎn)負(fù)載收集模塊中更新本次收集數(shù)據(jù),以用于下一次的本地負(fù)載變化率計(jì)算。而負(fù)載均衡服務(wù)器在時(shí)間段T內(nèi)未收到對(duì)應(yīng)節(jié)點(diǎn)的負(fù)載信息上報(bào),則沿用之前的負(fù)載信息,以此來(lái)節(jié)省節(jié)點(diǎn)負(fù)載信息的頻繁上報(bào)所導(dǎo)致的網(wǎng)絡(luò)資源消耗。 在收集到對(duì)應(yīng)服務(wù)器組的各節(jié)點(diǎn)的實(shí)時(shí)負(fù)載信息后,本文根據(jù)節(jié)點(diǎn)的性能使用率L進(jìn)行概率擇優(yōu)算法的動(dòng)態(tài)分配概率調(diào)節(jié),計(jì)算式如式(5)所示。 (5) 其中,Wi代表該節(jié)點(diǎn)某項(xiàng)性能的使用率,WC、WM、WI以及WN分別代表工作狀態(tài)下的CPU使用率、內(nèi)存利用率、磁盤(pán)I/O使用率和網(wǎng)絡(luò)帶寬使用率。性能使用率L準(zhǔn)確反映了節(jié)點(diǎn)在每一時(shí)刻的負(fù)載情況,但存在使用率L與節(jié)點(diǎn)處理能力相反的問(wèn)題,即使用率越高,當(dāng)前節(jié)點(diǎn)處理能力越低。因此,本文引入一個(gè)變量λ來(lái)反映當(dāng)前節(jié)點(diǎn)的負(fù)載情況,計(jì)算式如式(6)所示。 (6) 其中,λ(Si)代表當(dāng)前節(jié)點(diǎn)使用率與所有節(jié)點(diǎn)使用率平均值的比值。當(dāng)λ(Si)>1時(shí),代表當(dāng)前節(jié)點(diǎn)的使用率已超過(guò)平均值,需要適當(dāng)減小該節(jié)點(diǎn)的分配概率,提高那些未達(dá)到平均使用率的節(jié)點(diǎn)分配概率,以達(dá)到更好的負(fù)載均衡效果。而基于服務(wù)器節(jié)點(diǎn)性能評(píng)價(jià)指標(biāo)的概率擇優(yōu)算法,對(duì)于在服務(wù)器組中某節(jié)點(diǎn)Si的分配概率Pi的計(jì)算式如式(7)所示。 (7) 為了綜合考慮服務(wù)器節(jié)點(diǎn)的評(píng)價(jià)指標(biāo)及實(shí)時(shí)性能的使用率,本文將概率擇優(yōu)算法改進(jìn)為自適應(yīng)的動(dòng)態(tài)加權(quán)輪詢算法,將服務(wù)器組中的各節(jié)點(diǎn)分配概率改進(jìn)為基于擇優(yōu)分配概率的分配權(quán)重。如式(8)所示,Q(Si)為對(duì)應(yīng)服務(wù)器節(jié)點(diǎn)Si的分配權(quán)重。 (8) 其中,B為使得BP>1成立的權(quán)值常數(shù)。當(dāng)負(fù)載變量λ(Si)>1時(shí),表示當(dāng)前節(jié)點(diǎn)的性能負(fù)載較重,超出了集群整體的平均負(fù)載情況,需通過(guò)實(shí)時(shí)減小其分配權(quán)重來(lái)降低新的客戶端請(qǐng)求分配給該節(jié)點(diǎn)的概率;當(dāng)λ(Si)<1時(shí)則相反。這種在高負(fù)載情況下的負(fù)載均衡算法結(jié)合了當(dāng)前節(jié)點(diǎn)的性能評(píng)價(jià)指標(biāo)、實(shí)時(shí)性能使用率和分組概率擇優(yōu)的優(yōu)勢(shì),使得其負(fù)載分配更加合理。 本文經(jīng)過(guò)研究文獻(xiàn)[14]及進(jìn)行對(duì)比實(shí)驗(yàn)后得出結(jié)論,對(duì)于Nginx作為負(fù)載均衡服務(wù)器的后端服務(wù)器集群而言,在低負(fù)載狀態(tài)下靜態(tài)負(fù)載均衡算法因其簡(jiǎn)單的分配邏輯,對(duì)網(wǎng)絡(luò)資源消耗較少,因而具有良好的分配效果;而在高負(fù)載狀態(tài)下,動(dòng)態(tài)負(fù)載均衡算法的優(yōu)勢(shì)則逐漸顯著。找到由靜態(tài)算法優(yōu)勢(shì)區(qū)間轉(zhuǎn)為動(dòng)態(tài)算法優(yōu)勢(shì)區(qū)間的負(fù)載值即并發(fā)請(qǐng)求數(shù)量的閾值,是更好地進(jìn)行Nginx負(fù)載均衡算法研究的關(guān)鍵所在。本文在對(duì)標(biāo)準(zhǔn)遺傳算法流程[15-16]進(jìn)行研究分析后提出了一種改進(jìn)的自適應(yīng)遺傳算法,并將其用于動(dòng)靜態(tài)算法優(yōu)勢(shì)區(qū)間閾值,其流程和計(jì)算方式如下所示。 首先與標(biāo)準(zhǔn)遺傳算法相近,進(jìn)行編碼及產(chǎn)生初始種群,并通過(guò)適應(yīng)度函數(shù)計(jì)算各染色體個(gè)體的適應(yīng)度函數(shù)值,計(jì)算出平均適應(yīng)度值Favg及最大適應(yīng)度值Fmax。通過(guò)這兩種適應(yīng)度值計(jì)算本文算法的關(guān)鍵閾值即操作變換閾值,作為改變變異算子操作和交叉算子操作流程順序的計(jì)算閾值。計(jì)算結(jié)束后優(yōu)先判斷算法整體是否滿足終止條件,若不滿足算法的終止條件,則進(jìn)一步對(duì)算法設(shè)置的操作變換閾值進(jìn)行判斷,即判斷sin(Favg/Fmin×π/2)≥1/2是否成立。當(dāng)該條件滿足時(shí),說(shuō)明此時(shí)種群的平均適應(yīng)度值與最大適應(yīng)度值接近,染色體個(gè)體間差異較小,則先以一定概率PB進(jìn)行變異算子操作,再以概率PJ進(jìn)行交叉算子操作,最后進(jìn)行選擇算子操作,可減小上述問(wèn)題中變異操作所帶來(lái)的破壞種群優(yōu)異性的問(wèn)題。當(dāng)不滿足該閾值條件時(shí),則先以一定概率進(jìn)行交叉算子操作,再進(jìn)行變異算子操作,最后進(jìn)行選擇算子操作,可最大程度緩解算法進(jìn)行無(wú)區(qū)分度迭代的問(wèn)題,以加快收斂速度。其中,PJ和PB的計(jì)算式為如式(9)和式(10)所示。 (9) (10) 當(dāng)Favg/Fmin為較小值時(shí),表明當(dāng)前種群的染色體的適應(yīng)度平均值與最大適應(yīng)度值差值較大,種群適應(yīng)度值分布較為分散,此時(shí)PJ的值相對(duì)增大,即提高了交叉算子操作的概率。以更大的概率對(duì)具有較大差異基因位的染色體個(gè)體進(jìn)行交叉操作,進(jìn)化出新的下一代優(yōu)質(zhì)個(gè)體的概率更大。與之相對(duì)應(yīng)地,減小PB的值,即降低了變異算子操作的概率,使得優(yōu)秀的個(gè)體更容易被保留,并同時(shí)加快了收斂的速度。當(dāng)Favg/Fmin為較大值時(shí),表明當(dāng)前種群適應(yīng)值的差異較小,較為集中,交叉算子操作已難以得到新的優(yōu)質(zhì)染色體,因此降低了交叉算子操作的概率,同時(shí)也對(duì)應(yīng)地增加了變異算子操作的概率,使算法跳出局部最優(yōu)解具有更大的可能性,以達(dá)到獲得全局最優(yōu)解的目的。 在遺傳算法流程中,交叉算子操作和變異算子操作大都具有隨機(jī)性和無(wú)方向性的特點(diǎn),而選擇算子操作作為人為可控的操作,通過(guò)選擇合適的算子可使算法按照期望方向進(jìn)行演化,因此具有一定重要性。本文基于適應(yīng)度值非負(fù)的特點(diǎn)及對(duì)收斂性需求的考慮,選擇了一種基于三角函數(shù)的自適應(yīng)的選擇算子操作概率的計(jì)算方法。如式(11)和(12)所示,該選擇算子概率既滿足了適應(yīng)度值非負(fù)的要求,又避免了冗余參數(shù)的設(shè)置,在收斂性上也具有較好的效果。 (11) (12) 對(duì)于某個(gè)染色體個(gè)體的選擇概率Pi,其值由個(gè)體適應(yīng)度函數(shù)值Fi、種群的最大適應(yīng)度值Fmax和最小適應(yīng)度值Fmin決定。當(dāng)種群整體的適應(yīng)度差異極值較高時(shí),表明當(dāng)前種群的適應(yīng)度整體差異過(guò)大,則選擇降低單獨(dú)某個(gè)染色體個(gè)體的概率,整體選擇分布更加均勻,能夠提高選擇的算子基因位的范圍。同時(shí)選擇某染色體個(gè)體的概率與其適應(yīng)度值和最小適應(yīng)度值的差值成正比,則選擇適應(yīng)度優(yōu)秀的染色體個(gè)體,使得種群能夠較快地向優(yōu)秀進(jìn)化方向演化。而通過(guò)三角函數(shù)這種非線性變化的方式自適應(yīng)地調(diào)整選擇算子的概率,使得變化的速率按照差異期望進(jìn)行變化,在保持種群多樣性方面具有良好的效果,使算法能以較快的收斂速度更大概率地獲取全局最優(yōu)解。 根據(jù)負(fù)載均衡算法及改進(jìn)遺傳算法確定適應(yīng)度函數(shù)。本文采用章節(jié)3.1中的服務(wù)器節(jié)點(diǎn)性能評(píng)價(jià)指標(biāo)作為適應(yīng)度函數(shù)優(yōu)化的選擇標(biāo)準(zhǔn),使用章節(jié)2.2中的自適應(yīng)動(dòng)態(tài)負(fù)載均衡計(jì)算方法作為對(duì)區(qū)間閾值的計(jì)算方法之一,并根據(jù)文獻(xiàn)[17]引入基于最小熵增原理的適應(yīng)度函數(shù)計(jì)算方法,最終確定本文算法的適應(yīng)度函數(shù)如式(13)所示。 (13) 其中,Di為節(jié)點(diǎn)Si的節(jié)點(diǎn)性能評(píng)價(jià)指標(biāo);D0為服務(wù)器集群的初始硬件性能評(píng)價(jià)指標(biāo);k為熱力學(xué)常量;Q(Si)為自適應(yīng)動(dòng)態(tài)負(fù)載均衡算法中節(jié)點(diǎn)Si的分配權(quán)值。 本文采用基本的適應(yīng)度函數(shù)構(gòu)造方法,將目標(biāo)優(yōu)化函數(shù)作為適應(yīng)度函數(shù),通過(guò)尋找該目標(biāo)優(yōu)化函數(shù)的零值解,在搜索空間內(nèi)找到對(duì)應(yīng)服務(wù)器集群的動(dòng)靜態(tài)算法區(qū)間劃分的閾值。 本文通過(guò)改進(jìn)的遺傳算法對(duì)基于服務(wù)器性能指標(biāo)的適應(yīng)度函數(shù)值進(jìn)行研究計(jì)算及各種遺傳操作,不斷地使種群朝全局最優(yōu)解的方向演化,最終找到滿足要求的全局最優(yōu)解,即將所進(jìn)行計(jì)算的服務(wù)器集群的靜態(tài)負(fù)載均衡算法優(yōu)勢(shì)區(qū)轉(zhuǎn)變?yōu)閯?dòng)態(tài)負(fù)載均衡算法優(yōu)勢(shì)區(qū)的閾值。 以上述研究進(jìn)度及改進(jìn)算法為鋪墊,本文綜合了全部研究成果,提出了一種基于改進(jìn)遺傳算法的Nginx動(dòng)靜態(tài)結(jié)合的負(fù)載均衡算法。其核心思想為在計(jì)算出動(dòng)靜態(tài)算法劃分區(qū)間的閾值之后在負(fù)載均衡服務(wù)器上設(shè)置負(fù)載監(jiān)控模塊。當(dāng)監(jiān)控到當(dāng)前服務(wù)器集群負(fù)載在閾值以內(nèi)時(shí),采用基于節(jié)點(diǎn)性能指標(biāo)的靜態(tài)加權(quán)輪詢算法作為負(fù)載均衡策略,而當(dāng)集群負(fù)載超過(guò)閾值后,將負(fù)載均衡策略動(dòng)態(tài)調(diào)整為章節(jié)2.2中所提出的改進(jìn)自概率擇優(yōu)算法的自適應(yīng)動(dòng)態(tài)負(fù)載均衡算法,并開(kāi)始啟用安裝在各服務(wù)器節(jié)點(diǎn)上的負(fù)載信息收集模塊。通過(guò)收集的實(shí)時(shí)節(jié)點(diǎn)負(fù)載信息動(dòng)態(tài)調(diào)整算法中各節(jié)點(diǎn)分配的權(quán)值,以此獲得更優(yōu)秀的負(fù)載均衡效果。算法的整體流程如圖1所示。 圖1 算法整體流程 Figure 1. Overall flow of the proposed algorithm 本文實(shí)驗(yàn)環(huán)境由虛擬機(jī)搭建的9臺(tái)服務(wù)器組成。其中,1臺(tái)服務(wù)器作為測(cè)試客戶端,場(chǎng)景為某智慧宿管項(xiàng)目,1臺(tái)作為反向代理服務(wù)器,剩下的7臺(tái)作為后端服務(wù)器集群,分為3種不同請(qǐng)求的服務(wù)器集群。虛擬機(jī)操作系統(tǒng)均為CentOS7,其他參數(shù)如表1所示。 表1 實(shí)驗(yàn)環(huán)境參數(shù)Table 1. Experimental environment parameters 本文在實(shí)驗(yàn)過(guò)工程中設(shè)置了各后端服務(wù)器節(jié)點(diǎn)每隔3 s上傳一次節(jié)點(diǎn)性能使用率情況,并利用Siege工具模擬多用戶并發(fā)訪問(wèn)及數(shù)據(jù)實(shí)時(shí)收集。根據(jù)文獻(xiàn)及實(shí)驗(yàn)反饋結(jié)果,本文選取服務(wù)器平均響應(yīng)時(shí)間和實(shí)際并發(fā)連接數(shù)作為算法評(píng)價(jià)的性能指標(biāo)。 由于本文算法是基于結(jié)合靜態(tài)負(fù)載均衡算法和動(dòng)態(tài)負(fù)載均衡算法的優(yōu)勢(shì)所提出的,因此本文選取了靜態(tài)加權(quán)輪詢算法和動(dòng)態(tài)的概率擇優(yōu)算法作為對(duì)比實(shí)驗(yàn)的參考算法。為驗(yàn)證本文算法具有更優(yōu)秀的負(fù)載均衡效果,選取了文獻(xiàn)[18]的動(dòng)態(tài)負(fù)載均衡算法(dnfs_conn)進(jìn)行對(duì)比。通過(guò)將包含本文算法和上述算法的4種算法分別使用Nginx的第三方模塊寫(xiě)入作為其負(fù)載均衡策略算法均,在實(shí)驗(yàn)環(huán)境中通過(guò)不斷提高并發(fā)請(qǐng)求數(shù)量,每次運(yùn)行30 min,獲得對(duì)應(yīng)的平均響應(yīng)時(shí)間及實(shí)際并發(fā)連接數(shù),并生成對(duì)比結(jié)果,如圖2和圖3所示。 圖2 平均響應(yīng)時(shí)間比較Figure 2. Average response time comparison 圖3 實(shí)際并發(fā)連接數(shù)比較Figure 3. Comparison of the actual number of concurrent connections 由圖2和圖3可以看出,相比于Nginx自帶的加權(quán)輪詢算法、概率擇優(yōu)算法和dnfs_conn算法,本文提出的基于改進(jìn)遺傳算法的動(dòng)靜態(tài)負(fù)載均衡算法隨著并發(fā)數(shù)量的增加(即服務(wù)器集群整體負(fù)載增大),對(duì)于請(qǐng)求的平均響應(yīng)時(shí)間相對(duì)較短的優(yōu)勢(shì)越來(lái)越大,且在高并發(fā)情況下實(shí)際的并發(fā)連接數(shù)量?jī)?yōu)勢(shì)更加明顯。相比于dnfs_conn算法,本文算法在數(shù)值上具有15%左右的提升。這反映出在高并發(fā)環(huán)境下,本文算法相比于傳統(tǒng)算法在負(fù)載均衡方面有著一定優(yōu)勢(shì),能夠更好地分配請(qǐng)求和服務(wù)器資源,在低負(fù)載狀況下保留靜態(tài)算法優(yōu)勢(shì)的同時(shí)最大化利用服務(wù)器集群的性能,具有更加優(yōu)秀的負(fù)載均衡效果。 上述實(shí)驗(yàn)結(jié)果證明,本文提出的基于改進(jìn)遺傳算法的Nginx動(dòng)靜態(tài)負(fù)載均衡算法既保留了靜態(tài)算法在低負(fù)載環(huán)境下平均響應(yīng)時(shí)間較低的優(yōu)勢(shì),又在高負(fù)載環(huán)境下具有相對(duì)更優(yōu)秀的負(fù)載均衡效果,充分利用了服務(wù)器各節(jié)點(diǎn)的性能和資源,使得整個(gè)服務(wù)器集群的響應(yīng)速度和承載能力都得到了進(jìn)一步優(yōu)化。在本文的模擬服務(wù)器集群環(huán)境下,本文算法相比于靜態(tài)加權(quán)輪詢算法、概率擇優(yōu)算法和dnfs_conn算法具有更優(yōu)秀的負(fù)載均衡效果。 為了更好地在各種高并發(fā)情況下實(shí)現(xiàn)分布式服務(wù)器集群的負(fù)載均衡,本文基于綜合CPU性能、內(nèi)存性能、磁盤(pán)I/O和網(wǎng)絡(luò)帶寬等服務(wù)器性能的節(jié)點(diǎn)負(fù)載性能指標(biāo),結(jié)合靜態(tài)負(fù)載均衡算法及動(dòng)態(tài)負(fù)載均衡算法優(yōu)點(diǎn),并通過(guò)改進(jìn)遺傳算法解決閾值計(jì)算問(wèn)題,提出了一種基于改進(jìn)遺傳算法的動(dòng)靜態(tài)負(fù)載均衡算法。為驗(yàn)證本文算法的正確性和有效性,通過(guò)Siege工具設(shè)計(jì)了網(wǎng)絡(luò)集群的模擬實(shí)驗(yàn),對(duì)加權(quán)輪詢算法、概率擇優(yōu)算法、dnfs_conn算法和本文算法進(jìn)行了對(duì)比實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果證明了本文算法在性能上的優(yōu)勢(shì),對(duì)于推動(dòng)Nginx負(fù)載均衡算法的研究具有一定意義。2.3 基于改進(jìn)遺傳算法的閾值計(jì)算
2.4 動(dòng)靜態(tài)結(jié)合的負(fù)載均衡算法
3 算法分析與設(shè)計(jì)
3.1 實(shí)驗(yàn)環(huán)境
3.2 實(shí)驗(yàn)結(jié)果與分析
4 結(jié)束語(yǔ)