韓朋花,葉青,姜曉明,陳占芳
(長春理工大學(xué) 計算機科學(xué)技術(shù)學(xué)院,長春 130022)
在云計算環(huán)境下,出現(xiàn)了云存儲安全[1]、數(shù)據(jù)挖掘[2,3]、負載均衡[4]等技術(shù)。因為負載均衡技術(shù)能夠滿足人們對計算機處理速度的要求,負載均衡算法是影響負載均衡技術(shù)的重要因素之一,所以對負載均衡算法的相關(guān)研究非常重要。負載均衡算法有很多,常見的負載均衡算法可以分為兩種,一種是靜態(tài)的負載均衡算法,主要包括:輪詢算法、加權(quán)輪詢算法、目標(biāo)地址散列算法、源地址散列算法等[5]。另一種是動態(tài)的負載均衡算法,主要包括:最小鏈接算法、加權(quán)最小鏈接算法、基于位置的最小連接算法、帶復(fù)制的基于位置的最小連接算法等[6,7]。本文主要介紹輪詢算法和加權(quán)輪詢算法,通過實時監(jiān)測負載因子的狀態(tài),動態(tài)的計算服務(wù)器的權(quán)值,進而對加權(quán)輪詢算法進行改進,運用負載測試工具Load-Runner進行性能測試。
輪詢算法是以輪詢的方式,將請求分配到不同的服務(wù)器上。輪詢算法的優(yōu)點是實現(xiàn)簡單,不需要記錄當(dāng)前的連接狀態(tài),是一種無狀態(tài)的算法。
輪詢算法是在假設(shè)服務(wù)器不存在差異的情況下,相對簡單,不適用于服務(wù)器的配置性能不一樣的情況,當(dāng)請求服務(wù)器時間變化較大時,容易導(dǎo)致發(fā)生服務(wù)器間負載不均衡的現(xiàn)象。
加權(quán)輪詢算法是對輪詢算法的改進,用權(quán)值來表示服務(wù)器之間存在的差異,權(quán)值高的服務(wù)器分配的任務(wù)多,權(quán)值低的服務(wù)器分配的任務(wù)少。
加權(quán)輪詢算法解決了服務(wù)器之間存在差異的問題,實現(xiàn)相對簡單,不需要記錄當(dāng)前的連接狀態(tài),是一種無狀態(tài)連接。但是,權(quán)值是人為設(shè)置的,不能夠動態(tài)的反應(yīng)服務(wù)器之間的差異。
服務(wù)器實時的負載就是一個動態(tài)的二維數(shù)據(jù)[8],它是由服務(wù)器中負載因子的利用率和對應(yīng)的權(quán)值相乘得到的。鑒于此,改進的算法思路如下:一定的時間周期內(nèi)(如T=10s)收集一次服務(wù)器的負載因子的值(這些負載因子的值是動態(tài)變化的),根據(jù)收集到的負載因子的值,首先將這些負載因子的值和對應(yīng)設(shè)定的閾值進行比較,在收集到的負載因子值小于對應(yīng)設(shè)定閾值的情況下,計算各個服務(wù)器的處理能力極值和每個服務(wù)器的實時負載值,這兩個值相比得到一個值,這個值叫做負載率。如果負載率小于負載率閾值,計算當(dāng)前服務(wù)器的權(quán)值,根據(jù)權(quán)值進行輪詢處理請求任務(wù)。
根據(jù)計算出的服務(wù)器的權(quán)值求出權(quán)值比,代表了服務(wù)器能夠處理任務(wù)的權(quán)值比,這個比值能夠很好地代表當(dāng)前服務(wù)器的性能。這個比值不包含負載率大于等于閾值(Y)的服務(wù)器,根據(jù)這個比值確定服務(wù)器的權(quán)值,可以確保服務(wù)器的正常運行。
設(shè)置閾值(Y)還有一個作用,可以給負載過重的服務(wù)器一個緩沖時間,這樣就能夠避免這臺服務(wù)器既要處理任務(wù)隊列中的任務(wù),又要接受新的任務(wù)從而導(dǎo)致這臺服務(wù)器宕機。
改進算法工作模型如圖1所示。客戶端向服務(wù)器發(fā)送請求的時候,請求先被發(fā)送到負載均衡服務(wù)器,負載均衡服務(wù)器對服務(wù)器進行實時反饋負載狀態(tài)(負載因子的信息),然后負載均衡服務(wù)器把請求根據(jù)權(quán)值輪詢的分配到服務(wù)器,服務(wù)器處理完成請求之后,把結(jié)果直接發(fā)送到客戶端。
圖1 改進算法工作模型
改進算法需要解決以下幾個問題:①時間周期(T)是多少;②采集那些參數(shù)(負載因子)能實時反映服務(wù)器的性能;③如何采集這些負載因子;
考慮到負載因子的收集對系統(tǒng)來說是一種開銷[9],因此過多的負載因子反而達不到資源的有效利用,本文涉及到的負載因子為CPU的處理能力、內(nèi)存容量的大小、網(wǎng)絡(luò)帶寬大小。對于時間周期來說,較長的時間周期不利于服務(wù)器的負載均衡,較短的時間周期要頻繁的收集負載因子的值,影響算法的效率,所以本文的時間周期是10s(T=10s)。
在Linux系統(tǒng)的內(nèi)核中,有一個全局變量記錄時間:Jiffies(單位:10-2)。CPU的利用率根據(jù)執(zhí)行用戶和系統(tǒng)的Jiffies除以Jiffies的總數(shù)表示。
在Linux系統(tǒng)中,采集文件/proc/stat的第一行信息,能得到CPU的用戶態(tài)、系統(tǒng)態(tài)、空閑態(tài)等不用狀態(tài)下的Jiffies。通過命令:cat/proc/stat獲取CUP的使用情況。
為了計算CPU的利用率,以時間周期的開始位置和結(jié)束位置為樣點,計算它們的差值。
CPU的利用率:
其中,i表示第i臺服務(wù)器(以下同理),L(ci)表示服務(wù)器CPU的利用率,Δu表示兩樣點之間用戶態(tài)的差值,Δs表示兩樣點之間內(nèi)存系統(tǒng)的差值,Δj表示兩樣點之間CUP利用率的差值。
在Linux系統(tǒng)中,采集文件/proc/meminfo的前四行信息,能得到內(nèi)存的使用情況。通過命令:cat/proc/meminfo獲取內(nèi)存的使用情況。
內(nèi)存的利用率:
其中,L(mi)表示服務(wù)器內(nèi)存的利用率,memtotal表示內(nèi)存,memfree表示空閑內(nèi)存。
在Linux系統(tǒng)中,采集文件/proc/net/dev的第四行記錄,能得到帶寬的使用情況,通過命令:cat/proc/net/dev獲取帶寬的使用情況。
帶寬的利用率:
其中,L(ni)表示服務(wù)器帶寬的利用率,ΔR表示兩樣點之間接受帶寬的差,ΔT表示兩樣點之間傳送帶寬的差,Δt表示一個時間周期,totalBW表示網(wǎng)口帶寬,服務(wù)器采用eth0網(wǎng)口,帶寬為100Mbps。
改進算法執(zhí)行步驟如下:
第一步:收集負載因子的值;
第二步:將各個負載因子的值和對應(yīng)的閾值進行比較,若存在L(ci)>Y(ci)、L(mi)>Y(mi)或者L(ni)>Y(ni),將這臺服務(wù)器的權(quán)值設(shè)置為0,這個周期內(nèi)不再對這臺服務(wù)器分配任務(wù),否則根據(jù)負載因子的權(quán)重向量T(i)計算服務(wù)器實時負載M(i)的值;
第三步:計算服務(wù)器處理能力極值N(i)和服務(wù)器實時負載率R(i)的值;
第四步:將各個服務(wù)器R(i)的值和服務(wù)器對應(yīng)的閾值Y(i)進行比較,若R(i)>Y(i),將這臺服務(wù)器的權(quán)值設(shè)置為0,否則進行下一步;
第五步:計算服務(wù)器計算權(quán)值C(i),并根據(jù)服務(wù)器的權(quán)值W(i)計算服務(wù)器真實分配權(quán)值CW(i)的值;
第六步:計算服務(wù)器之間真實分配權(quán)值CW(i)的比,得到服務(wù)器的權(quán)值,根據(jù)這個權(quán)值輪詢分配任務(wù)。
其中,Y(ci),Y(mi),Y(ni)分別表示服務(wù)器CPU、內(nèi)存和網(wǎng)絡(luò)的閾值,Y(i)表示服務(wù)器的閾值,N(i)表示服務(wù)器處理能力極值,M(i)表示服務(wù)器實時負載,R(i)表示服務(wù)器實時負載率,T(i)表示各個負載因子的權(quán)重向量,W(i)表示服務(wù)器的權(quán)重。
服務(wù)器處理能力極值:
其中,P(i)=[P(ci),P(mi),P(ni)],P(ci),P(mi),P(ni)分別表示服務(wù)器CPU處理速度,內(nèi)存大小,網(wǎng)絡(luò)吞吐量。T(i)=[T(c),T(m),T(n)],T(c),T(m),T(n)分別表示CPU、內(nèi)存和網(wǎng)絡(luò)的權(quán)值,且它們的和為1。
服務(wù)器實時負載的值:
其中,L(i)=[L(ci),L(mi),L(ni)],L(ci),L(mi),L(ni)分別表示服務(wù)器CPU、內(nèi)存和網(wǎng)絡(luò)的利用率。
服務(wù)器實時負載率:
服務(wù)器計算權(quán)值:
其中,,n表示服務(wù)器數(shù)量,由于R都一樣并且除法計算速度比較慢,所以上式優(yōu)化為C(i)=R-R(i)。
當(dāng)兩個服務(wù)器的C(i)值一樣時,只能代表這臺服務(wù)器的處理能力,并不能代表這臺服務(wù)器在所有服務(wù)器中的處理能力,為了解決這種問題,為服務(wù)器設(shè)置權(quán)值W(i)。
服務(wù)器真實分配權(quán)值:
通過對大量用戶同時并發(fā)請求訪問進行模擬,使用負載測試工具LoadRunner實時進行監(jiān)測[10],分別進行六次測試,得到改進前后的算法關(guān)于系統(tǒng)平均響應(yīng)時間的對比,如圖2。
圖2 系統(tǒng)平均響應(yīng)時間
由圖2可知,改進后算法的系統(tǒng)平均響應(yīng)時間明顯提高,平均提高了140ms左右。由于改進后算法的權(quán)值是根據(jù)服務(wù)器的負載情況求出的,更能夠反應(yīng)出服務(wù)器的負載情況,有效的利用服務(wù)器等資源,因此改進后的算法在系統(tǒng)平均響應(yīng)時間上得到了明顯的提高。
改進前加權(quán)輪詢算法的權(quán)值是人為設(shè)定的,不能夠?qū)崟r反應(yīng)服務(wù)器的差異。改進后加權(quán)輪詢算法的權(quán)值是根據(jù)服務(wù)器運行期間負載因子計算的,是動態(tài)的改變的,所以能夠更真實地反應(yīng)服務(wù)器的負載差異,符合負載均衡的要求,優(yōu)化了加權(quán)輪詢算法,使算法得到了較大的改進。但是一定周期采集負載因子的值,會帶來一定的額外開銷,在今后的研究中,還需要對改進后加權(quán)輪詢算法不斷的改進和完善。
[1]從立鋼,郭利菊.云存儲系統(tǒng)安全技術(shù)研究[J].長春理工大學(xué)學(xué)報:自然科學(xué)版,2014,37(03):132-134.
[2]王鵬,王健安,郭暢,等.基于云計算及數(shù)據(jù)挖掘技術(shù)的海量數(shù)據(jù)處理研究[J].長春理工大學(xué)學(xué)報:自然科學(xué)版,2013,36(06):157-160.
[3]巴濟慈.基于云計算的海量數(shù)據(jù)挖掘處理與研究[D].長春:長春理工大學(xué),2013.
[4]羅擁軍,李曉樂,孫如祥.負載均衡算法綜述[J].科技情報開發(fā)與經(jīng)濟,2008,(23):134-136.
[5]王以山.數(shù)字皮影表演中負載均衡問題的研究與應(yīng)用[D].北京:北京工業(yè)大學(xué),2010.
[6]RadojevicB,ZagarM.AnalysisofIssueswith Load Balancing Algorithms in Hosted(Cloud)Environments[C].Opatija MIPRO.2011:416-420.
[7]莊旻軒.服務(wù)器集群中基于動態(tài)反饋的負載均衡算法[D].大連:大連理工大學(xué),2014.
[8]張慧芳.基于動態(tài)反饋的加權(quán)最小連接數(shù)服務(wù)器負載均衡算法研究[D].上海:華東理工大學(xué),2013.
[9]高振斌,潘亞辰,華中,等.改進的基于加權(quán)最小連接數(shù)的負載均衡算法[J].科學(xué)技術(shù)與工程,2016,16(06):81-85.
[10]蔡程宇,婁淵勝.改進加權(quán)最小連接數(shù)負載均衡調(diào)度算法研究[J].哈爾濱商業(yè)大學(xué)學(xué)報:自然科學(xué)版,2015,31(01):102-104.