李?yuàn)檴?高 岑,王美吉,李冬梅,焦艷菲
1(中國科學(xué)院大學(xué) 計(jì)算機(jī)控制與工程學(xué)院,北京 100049)
2(中國科學(xué)院 沈陽計(jì)算技術(shù)研究所,沈陽 110168)
3(沈陽高精數(shù)控智能技術(shù)股份有限公司,沈陽 110168)
LVS 能夠很有效地提高云平臺(tái)的高可用性,其基于IP 技術(shù)和內(nèi)容請(qǐng)求分發(fā)的集群負(fù)載方案,能夠把多臺(tái)服務(wù)器構(gòu)成一個(gè)高可用、高可伸縮和高性能的虛擬服務(wù)器集群系統(tǒng).由于其開源優(yōu)勢和出色的穩(wěn)定性,LVS 受到了主流市場青睞.但隨著日益增長的多樣化的海量數(shù)據(jù)請(qǐng)求以及網(wǎng)絡(luò)請(qǐng)求中的高并發(fā)性,LVS 的調(diào)度策略逐漸無法滿足服務(wù)需求,改進(jìn)原來的策略來提升LVS 的負(fù)載均衡[1,2]能力,為網(wǎng)絡(luò)用戶提供更高質(zhì)量的服務(wù)成為當(dāng)前研究的一個(gè)熱點(diǎn).
負(fù)載均衡一直以來都是服務(wù)器集群一個(gè)熱門話題,為了提高集群的資源利用率,許多新策略和解決方案不斷地被提出,已經(jīng)由最初的只能進(jìn)行靜態(tài)調(diào)度資源到可以根據(jù)系統(tǒng)運(yùn)作情況進(jìn)行動(dòng)態(tài)資源分配,再到后來的自適應(yīng)分配.對(duì)此,已經(jīng)有很多國內(nèi)外相關(guān)的技術(shù)人員在該方面做出了突出的貢獻(xiàn).例如,IBM 公司提出的Web Sphere 相關(guān)的一套Web 服務(wù)器,其提供了有效的集群解決方案和優(yōu)秀的負(fù)載均衡能力.Microsoft 公司提出了具有高可用、高可伸縮性的網(wǎng)絡(luò)負(fù)載技術(shù)(NLB)[1]以及組件負(fù)載均衡技術(shù)(CLB)[2].在國內(nèi),諸多高校也致力于研究負(fù)載均衡策略。例如,國防科技大學(xué)章文嵩博士支持開發(fā)的Linux 虛擬服務(wù)器項(xiàng)目,清華大學(xué)研發(fā)的可伸展的Web 服務(wù)器集群系統(tǒng).
LVS[3]主要有負(fù)載調(diào)度器、服務(wù)器池、共享存儲(chǔ)組成.它們通過高速LAN 相互連接,構(gòu)成IPVS.當(dāng)系統(tǒng)升級(jí)時(shí),可以避免集群癱瘓.
圖1 LVS 集群架構(gòu)
LVS 有十種負(fù)載調(diào)度算法,其中,靜態(tài)調(diào)度算法不考慮服務(wù)器中負(fù)載狀況,動(dòng)態(tài)調(diào)度算法能根據(jù)負(fù)載的變化動(dòng)態(tài)的調(diào)整請(qǐng)求調(diào)度策略.
靜態(tài)調(diào)度算法:輪叫調(diào)度算法、加權(quán)輪叫調(diào)度算法、源地址散列算法、目標(biāo)地址散列算法.
動(dòng)態(tài)調(diào)度算法:最小連接數(shù)調(diào)度算法、加權(quán)最小連接調(diào)度算法、最短延遲調(diào)度調(diào)度算法、永不排隊(duì)調(diào)度算法、基于局部性的最小連接調(diào)度算法、帶復(fù)制的基于局部性最小連接調(diào)度算法.
加權(quán)最小連接算法(WLC)是目前負(fù)載效果較好,應(yīng)用極為廣泛的算法.所以根據(jù)WLC 的特性,進(jìn)行策略的改進(jìn).
WLC[4,5]算法根據(jù)RS 的處理能力,為RS 添加一個(gè)權(quán)值Wi來代表RS 的處理能力.當(dāng)有新請(qǐng)求到達(dá)時(shí),會(huì)從分派鏈表中找出連接數(shù)量與權(quán)重比值最小,且權(quán)重不為0 的RS.若找到滿足要求的RS,則返回該RS 的指針;否則返回空指針.
假設(shè)有一個(gè)集群s={s0,s1,···,sn-1},C(Si)代表節(jié)點(diǎn)Si的連接數(shù),W(Si)代表節(jié)點(diǎn)Si的權(quán)重.所有服務(wù)器當(dāng)前的總連接數(shù)為當(dāng)前新的任務(wù)被分配給節(jié)點(diǎn)Sm,只有當(dāng)節(jié)點(diǎn)C(Sm)×W(Si) (1)節(jié)點(diǎn)性能主要是與CPU、內(nèi)存、I/O 設(shè)備、外部存儲(chǔ)等狀況有關(guān).目前擴(kuò)充外部存儲(chǔ)器的容量較易實(shí)現(xiàn),而I/O 設(shè)備和網(wǎng)絡(luò)的帶寬受制于客觀條件;如果太多的這些信息計(jì)算權(quán)值,則節(jié)點(diǎn)的額外開銷會(huì)過多. (2)權(quán)值設(shè)置的科學(xué)性.服務(wù)器的權(quán)值是工作人員靠經(jīng)驗(yàn)大體估算出來的,權(quán)值設(shè)置不能很好地反映服務(wù)器的性能. (3)連接數(shù)不能準(zhǔn)確反映出服務(wù)器資源的真實(shí)使用情況,它只代表當(dāng)前服務(wù)器的請(qǐng)求訪問數(shù)量,不同任務(wù)對(duì)資源占用情況也不盡相同. 針對(duì)原始的負(fù)載均衡算法中人為設(shè)置的權(quán)值,負(fù)載因子越多,其對(duì)應(yīng)的權(quán)值則越多,則計(jì)算結(jié)果與實(shí)際情況產(chǎn)生的偏差越大的情況.在改進(jìn)的算法中,首先采取模擬退火算法[6,7]選擇一個(gè)最佳的負(fù)載因子來表示節(jié)點(diǎn)的實(shí)際負(fù)載狀態(tài),反應(yīng)節(jié)點(diǎn)的實(shí)際性能. 對(duì)于LVS 服務(wù)器來說,為了能達(dá)到負(fù)載均衡,首先選取CPU 使用率、內(nèi)存使用率和寬帶使用率動(dòng)態(tài)負(fù)載因子.通過實(shí)時(shí)采集節(jié)點(diǎn)的信息,選取建立節(jié)點(diǎn)資源模型和任務(wù)耗能模型. 節(jié)點(diǎn)資源模型Xi=[Xcpui,Xmemi,Xneti],其中,Xi表示第i個(gè)服務(wù)器可用的資源量,Xcpui表示CPU 能力,Xmemi表 示內(nèi)存容量大小,Xneti表示帶寬大小;任務(wù)耗能模型Yi=[Ycpui,Ymemi,Yneti],其中,Yi表 示第i個(gè)服務(wù)器單位時(shí)間內(nèi)能耗量,Ycpui表 示CPU 執(zhí)行數(shù)量,Ymemi表示內(nèi)存占用量,Yneti表示網(wǎng)絡(luò)數(shù)據(jù)傳輸量. 各個(gè)指標(biāo)的使用率如下:CPU 使用率為Ucpu=Xcpu/Ycpu,內(nèi)存使用率為Umem=Xmem/Ymem,寬帶使用率Unet=Xnet/Ynet. 計(jì)算各因子的權(quán)值向量: 算法思想:通過負(fù)載均衡器收集的節(jié)點(diǎn)信息,采用模擬退火算法選擇一個(gè)最佳負(fù)載因子.模擬退火算法可以較好的解決組合優(yōu)化問題,并且最終結(jié)果與初始狀態(tài)無關(guān),本文選用該算法來確定具體的權(quán)值向量.將結(jié)果放進(jìn)權(quán)值向量組: α1=(αcpu1,αcpu2,···,αcpun),α2=(αmem1,αmem2,···,αmemn),α3=(αnet1,αnet2,···,αnetn),α′=(α1T,α2T,α3T),定義Ui=(Ucpui,Umemi,···,Uneti),具體的服務(wù)器負(fù)載為Li=Ui?α′;定義模型T=(L,R,S),其中:T為響應(yīng)時(shí)間,L為負(fù)載情況,R為網(wǎng)絡(luò)請(qǐng)求,S為選擇函數(shù)來描述負(fù)載和請(qǐng)求的映射關(guān)系,目標(biāo)函數(shù)定義為根據(jù)模擬退火算法:S=S A(α′,T,O)收斂時(shí),目標(biāo)函數(shù)得到最小值.算法的迭代過程: Step1.對(duì)現(xiàn)有解集α′中的元素進(jìn)行替換,產(chǎn)生新解; Step2.將新解帶入目標(biāo)函數(shù),計(jì)算新的目標(biāo)函數(shù)O; Step4.降溫,確定t<0.1 為算法終止條件,停止后輸出的最優(yōu)解α 即為最佳負(fù)載因子的權(quán)值向量. 通過收集到的節(jié)點(diǎn)信息,計(jì)算每個(gè)服務(wù)器的最佳負(fù)載因子 α相對(duì)應(yīng)的負(fù)載率,并給他們設(shè)置一個(gè)中間閾值,負(fù)載率大于等于80% 為欲過載區(qū);負(fù)載率小于80%為適用區(qū).根據(jù)任務(wù)選擇適用區(qū),然后在適用區(qū)內(nèi)選用經(jīng)典WLC[8-10]算法選出一個(gè)最合適的節(jié)點(diǎn). 根據(jù)本文改進(jìn)的策略,結(jié)合實(shí)驗(yàn)室已搭建好的OpenStack 平臺(tái)進(jìn)行驗(yàn)證,并且資源配置如表1. 表1 云主機(jī)的資源配置 負(fù)載均衡算法優(yōu)劣一般是以集群的平均響應(yīng)時(shí)間及服務(wù)器實(shí)時(shí)負(fù)載量作為評(píng)價(jià)指標(biāo).響應(yīng)時(shí)間越短、負(fù)載量越穩(wěn)定,說明集群的負(fù)載能力越好.為了驗(yàn)證算法的有效性,本文選用WAS 壓力測試軟件,在以下兩種場景中對(duì)Linux 服務(wù)器集群進(jìn)行實(shí)驗(yàn)驗(yàn)證. (1)在測試集群瞬時(shí)壓力的場景中,設(shè)置多梯度的不同并發(fā)量向集群系統(tǒng)發(fā)送一定數(shù)量的請(qǐng)求數(shù)據(jù)包,并且將其平均響應(yīng)時(shí)間記錄下來.本文選取十個(gè)不同梯度的請(qǐng)求量(單位:個(gè))為:500、1000、1500、2000、2500、3000、3500、4000、4500、5000. (2)在測試持續(xù)高負(fù)載的場景中,使用WAS 軟件模擬用戶持續(xù)向集群系統(tǒng)發(fā)送一定數(shù)量的請(qǐng)求連接,測試在該時(shí)間段內(nèi)是否進(jìn)行負(fù)載調(diào)整保證真實(shí)服務(wù)器的相對(duì)穩(wěn)定.觀察并記錄服務(wù)器請(qǐng)求成功的情況.本文設(shè)置持續(xù)請(qǐng)求的時(shí)間為120 s. 本文采用改進(jìn)后的最佳負(fù)載因子策略與傳統(tǒng)的WRR 算法和WLC 算法進(jìn)行實(shí)驗(yàn)對(duì)比,從集群角度分析,響應(yīng)時(shí)間越短、服務(wù)器負(fù)載量越高,說明系統(tǒng)負(fù)載能力越強(qiáng),在相同時(shí)間內(nèi)接受和處理的請(qǐng)求就越多. 圖2測試結(jié)果顯示,當(dāng)集群請(qǐng)求量數(shù)量較少時(shí),本文改進(jìn)的策略和傳統(tǒng)的策略平均響應(yīng)時(shí)間相差不是很大.但是隨著請(qǐng)求量的增多、并發(fā)量的增大,本文改進(jìn)策略的平均響應(yīng)時(shí)間要短很多.當(dāng)請(qǐng)求量達(dá)到5000 個(gè)時(shí),本文策略的響應(yīng)時(shí)間要比WRR 算法和WLC 算法分別少約3.7 s、7.1 s,很大程度上優(yōu)化了集群系統(tǒng)對(duì)資源請(qǐng)求的處理速度,節(jié)省了響應(yīng)時(shí)間,大大提高了系統(tǒng)資源的利用率. 圖3測試結(jié)果顯示,本文改進(jìn)的算法,能夠使得服務(wù)器的在一段時(shí)間內(nèi)保持實(shí)時(shí)負(fù)載率在[57%,73%]之間,而其他兩種傳統(tǒng)策略的實(shí)時(shí)負(fù)載率分別在[50%,85%]、[55%,82%]之間.由此可以得出,在相同一段時(shí)間內(nèi),本文改進(jìn)策略更能使服務(wù)器的整體負(fù)載處于一個(gè)穩(wěn)定狀態(tài),可以將請(qǐng)求均衡的分配到各個(gè)服務(wù)器上,幾乎沒有出現(xiàn)某臺(tái)服務(wù)器負(fù)載傾斜的情況. 圖2 平均響應(yīng)時(shí)間對(duì)比圖 圖3 服務(wù)器負(fù)載情況對(duì)比 由以上結(jié)果可以得出,在高并發(fā)、數(shù)據(jù)請(qǐng)求量巨大的集群系統(tǒng)中,本算法在降低系統(tǒng)平均響應(yīng)時(shí)間和均衡各服務(wù)器節(jié)點(diǎn)性能上具有很大的優(yōu)勢. 本文通過分析現(xiàn)有的算法的優(yōu)點(diǎn)與不足,針對(duì)集群的負(fù)載因子越多對(duì)應(yīng)權(quán)值越多而導(dǎo)致負(fù)載偏差的問題,設(shè)計(jì)出一種將模擬退火算法和WLC 算法相結(jié)合的最佳因子負(fù)載策略.通過實(shí)驗(yàn)驗(yàn)證了本文改進(jìn)的策略能夠使得集群中的節(jié)點(diǎn)負(fù)載更加均衡,很大程度的提高了集群資源的利用率.該策略對(duì)于避免云平臺(tái)中服務(wù)器負(fù)載傾斜、提高其負(fù)載能力有著很大的使用價(jià)值,針對(duì)集群系統(tǒng)的高并發(fā)性、及負(fù)載量巨大的問題有著十分重要的意義.但是本文在集群系統(tǒng)出現(xiàn)負(fù)載傾斜時(shí)如何將系統(tǒng)快速的調(diào)節(jié)到均衡的狀態(tài)等方面的研究仍有不足,有待進(jìn)一步研究和優(yōu)化本算法.3.2 WLC 算法的影響因素
3.3 最佳負(fù)載因子調(diào)度策略
4 實(shí)驗(yàn)驗(yàn)證
4.1 實(shí)驗(yàn)方案
4.2 實(shí)驗(yàn)過程
4.3 實(shí)驗(yàn)結(jié)果及分析
5 結(jié)語