摘 ?要: 隨著網(wǎng)絡(luò)信息技術(shù)的飛速發(fā)展,在線考試系統(tǒng)在各大院校推廣。當(dāng)同時(shí)在線考試的人數(shù)達(dá)到萬(wàn)人以上時(shí),服務(wù)器面臨著嚴(yán)峻的考驗(yàn)。本文在分析了常用的負(fù)載均衡技術(shù)和負(fù)載均衡策略的基礎(chǔ)上,提出了適于大型在線考試系統(tǒng)的應(yīng)用需求和特點(diǎn)的負(fù)載均衡算法—TEST算法,該算法根據(jù)服務(wù)器集群中每臺(tái)服務(wù)器的CPU占用率、內(nèi)存的利用率、網(wǎng)絡(luò)帶寬占用率作為影響因素,計(jì)算服務(wù)器權(quán)值,并引入負(fù)載冗余參數(shù),共同來(lái)判斷服務(wù)器處理新的請(qǐng)求能力,通過(guò)仿真實(shí)驗(yàn),TEST算法有效地提高了大型在線考試系統(tǒng)的響應(yīng)效率。
關(guān)鍵詞: 在線考試;負(fù)載均衡;服務(wù)器集群;算法
中圖分類號(hào): TP399 ? ?文獻(xiàn)標(biāo)識(shí)碼: A ? ?DOI:10.3969/j.issn.1003-6970.2020.06.006
本文著錄格式:楊曉吟. 大型在線考試系統(tǒng)負(fù)載均衡算法的研究與實(shí)踐[J]. 軟件,2020,41(06):2731
【Abstract】: With the rapid development of information technology and the continuous expansion of network applications, the online examination system has been promoted in universities and colleges. When the number of simultaneous online exams reaches more than 10,000, the server is facing a severe test. This paper is based on the analysis of common load balancing technology and strategy, and proposes a TEST algorithm which is suitable for the application requirements and characteristics of large-scale online examination systems. This algorithm takes CPU usage, memory utilization and network bandwidth occupancy as judgment factors, and calculates the server weight, and introduces parameter load redundancy to judge the servers ability to process new requests. Through simulation experiments, the result confirms that the response time using the TEST algorithm faster and more efficient improving response efficiency for large-scale online examination systems.
【Key words】: Online examination; Load balancing; Server cluster; Algorithm
0 ?引言
隨著教育技術(shù)的不斷進(jìn)步,傳統(tǒng)的紙質(zhì)考試逐漸被無(wú)紙化的在線考試系統(tǒng)取代,為滿足素質(zhì)教育,題目有圖像、音頻、視頻、動(dòng)畫等多媒體形式。由于在線考試中需要大量多媒體數(shù)據(jù),并且大型在線考試系統(tǒng),一般同時(shí)參加的考生數(shù)在五千人左右,甚至達(dá)到萬(wàn)人以上,考生需要將考試信息提交到服務(wù)器,當(dāng)開(kāi)始考試和結(jié)束考試的時(shí)間點(diǎn)里不可避免地出現(xiàn)系統(tǒng)忙碌,而在其他時(shí)間段中則比較空閑,一旦服務(wù)器在高峰期出現(xiàn)流量過(guò)載現(xiàn)象,造成服務(wù)器負(fù)載壓力過(guò)大,就會(huì)導(dǎo)致在線考試系統(tǒng)的不穩(wěn)定,甚至的這個(gè)考試的順利完成造成影響。為解決這一難題,對(duì)大型在線考試系統(tǒng)的負(fù)載均衡算法的實(shí)現(xiàn)進(jìn)行研究與實(shí)踐。
1 ?常用負(fù)載均衡系統(tǒng)
目前的負(fù)載均衡系統(tǒng)主要有四類:基于DNS的負(fù)載均衡、基于反向代理的負(fù)載均衡、基于HTTP重定向的負(fù)載均衡和基于NAT的負(fù)載均衡[1]。
1.1 ?基于DNS的負(fù)載均衡
DNS是域名解析系統(tǒng),當(dāng)我們輸入域名訪問(wèn)網(wǎng)站時(shí),DNS服務(wù)器會(huì)將域名映射成IP地址,這個(gè)映射可以是一對(duì)多的,不同的IP對(duì)應(yīng)不同的服務(wù)器,也就是說(shuō)DNS將域名請(qǐng)求根據(jù)策略分配到不同的服務(wù)器上,從而達(dá)到負(fù)載均衡的目的?;贒NS的負(fù)載均衡技術(shù)比較適用于廣域網(wǎng)的負(fù)載均衡的實(shí)現(xiàn)。
1.2 ?基于反向代理的負(fù)載均衡
基于反向代理的負(fù)載均衡系統(tǒng)是指使用代理服務(wù)器來(lái)接收客戶端的請(qǐng)求,然后再將用戶請(qǐng)求轉(zhuǎn)發(fā)給其他服務(wù)器,并將服務(wù)器的結(jié)果返回給客戶端,從而達(dá)到負(fù)載均衡的目的。由于反向代理服務(wù)器隔離了外部對(duì)網(wǎng)站服務(wù)器的攻擊,所以方向代理負(fù)載均衡系統(tǒng)的一個(gè)顯著優(yōu)勢(shì)是能提高網(wǎng)站服務(wù)器的安全性。但是每一次代理的過(guò)程都需要完成對(duì)外和對(duì)內(nèi)兩個(gè)連接,所以當(dāng)在連接請(qǐng)求數(shù)量激增時(shí),代理服務(wù)器的負(fù)載壓力就雙倍增加,最終導(dǎo)致反向代理服務(wù)器成為負(fù)載系統(tǒng)中的瓶頸。
1.3 ?基于HTTP重定向的負(fù)載均衡
在HTTP重定向的負(fù)載均衡系統(tǒng)中,HTTP重定向服務(wù)器根據(jù)客戶端的HTTP請(qǐng)求以及據(jù)配置的負(fù)載均衡算法計(jì)算出真實(shí)的服務(wù)器地址,并將此服務(wù)器地址寫進(jìn)HTTP重定向響應(yīng)中再返回客戶端。客戶端瀏覽器獲得響應(yīng)后,根據(jù)返回的信息,重新發(fā)送請(qǐng)求到新的服務(wù)器上。其的優(yōu)點(diǎn)是實(shí)現(xiàn)方法簡(jiǎn)單并且自帶會(huì)話保持功能,缺點(diǎn)是后臺(tái)服務(wù)器使用的是VIP即真實(shí)IP地址,因此某些用戶可能會(huì)繞過(guò)負(fù)載均衡服務(wù)器直接定位到某臺(tái)服務(wù)器,降低了服務(wù)器的安全性,同時(shí)HTTP重定向負(fù)載均衡技術(shù)只能實(shí)現(xiàn)HTTP服務(wù)的負(fù)載均衡,在網(wǎng)絡(luò)服務(wù)類型的選擇上具有局限性。
1.4 ?基于NAT的負(fù)載均衡
NAT是Network Address Translation的英文單詞的首字母,中文名稱是網(wǎng)絡(luò)地址轉(zhuǎn)換,NAT可以將外部 IP地址與內(nèi)部IP地址進(jìn)行一對(duì)多的映射,客戶端通過(guò)外部IP訪問(wèn)應(yīng)用,NAT動(dòng)態(tài)選擇其中一個(gè)內(nèi)部地址與外部地址關(guān)聯(lián),從而實(shí)現(xiàn)均衡的目標(biāo)[2]。NAT負(fù)載均衡是一種比較成熟的負(fù)載均衡技術(shù),既可以用軟件實(shí)現(xiàn)也可以用硬件的方式來(lái)實(shí)現(xiàn),同時(shí)負(fù)載均衡算法也比較靈活多樣。
2 ?大型在線考試系統(tǒng)負(fù)載均衡算法的設(shè)計(jì)
在線考試系統(tǒng)的負(fù)載均衡的實(shí)現(xiàn)普遍采用的是基于NAT的負(fù)載均衡方案。大型在線考試系統(tǒng)的負(fù)載均衡系統(tǒng)的搭建時(shí)最核心的部分包括:負(fù)載均衡算法、會(huì)話模式的選擇、應(yīng)用層會(huì)話保持機(jī)制和健康檢測(cè)方法的設(shè)置。下面介紹在實(shí)施大型在線考試系統(tǒng)所采用的技術(shù)策略。
2.1 ?基本工作原理
基本原理如圖1所示,運(yùn)行相同應(yīng)用的多臺(tái)服務(wù)器組成一個(gè)服務(wù)器集群,用一個(gè)VIP(Virtural IP)即實(shí)際IP來(lái)代表此服務(wù)器集群的IP,該地址也是客戶端訪問(wèn)此服務(wù)的IP。當(dāng)客戶端向服務(wù)器發(fā)送請(qǐng)求時(shí),負(fù)載均衡系統(tǒng)將根據(jù)各服務(wù)器的會(huì)話狀態(tài)的情況、預(yù)先設(shè)置的負(fù)載均衡策略以及健康檢測(cè)結(jié)果等參數(shù)來(lái)把客戶端請(qǐng)求轉(zhuǎn)發(fā)到合適的服務(wù)器上,最后由負(fù)載均衡系統(tǒng)把服務(wù)器的響應(yīng)轉(zhuǎn)發(fā)回給請(qǐng)求服務(wù)的客戶端。
2.2 ?負(fù)載均衡策略
在負(fù)載均衡系統(tǒng)中,負(fù)載均衡策略將客戶端請(qǐng)求分配到服務(wù)器集群中最合適的服務(wù)器上,通常負(fù)均衡器都支持相當(dāng)豐富的負(fù)載均衡策略,主要包括:輪詢和權(quán)重輪詢 、最少連接數(shù)、最小反應(yīng)時(shí)間、哈希法等。而在線考試系統(tǒng)采用最小連接數(shù)策略是最合適的,因?yàn)樵诰€考試系統(tǒng)實(shí)際上就是一個(gè)Web服務(wù),服務(wù)器性能主要受請(qǐng)求的客戶端數(shù)量影響。在大型在線考試系統(tǒng)的負(fù)載均衡技術(shù)方案中,把負(fù)載均衡器的健康檢測(cè)方法設(shè)置為HTTP頁(yè)面,HTTP頁(yè)面檢查的是一個(gè)來(lái)至于后臺(tái)數(shù)據(jù)庫(kù)的動(dòng)態(tài)頁(yè)面。這樣通過(guò)HTTP頁(yè)面的健康檢測(cè)方法同時(shí)檢測(cè)了Web服務(wù)和后臺(tái)數(shù)據(jù)庫(kù)服務(wù)的可用性。然而,HTTP頁(yè)面檢測(cè)將會(huì)對(duì)服務(wù)器資源造成額外的消耗,對(duì)Web服務(wù)的性能是較大的考驗(yàn),考慮到大型在線考試系統(tǒng)應(yīng)用的特點(diǎn),最小連接數(shù)加HTTP頁(yè)面健康檢測(cè)的方案仍有許多不足,因此設(shè)計(jì)了一款新算法,該算法從響應(yīng)客戶端請(qǐng)求需要消耗服務(wù)器系統(tǒng)資源程度著手來(lái)實(shí)現(xiàn)系統(tǒng)的負(fù)載均衡。以下稱該算法為TEST算法。
負(fù)載均衡器的實(shí)現(xiàn)負(fù)載平衡首先需要獲得服務(wù)器集群中各臺(tái)服務(wù)器的負(fù)載能力的信息,包括服務(wù)器CPU、內(nèi)存的利用率和網(wǎng)絡(luò)帶寬占用率,根據(jù)預(yù)先設(shè)置好的算法計(jì)算得出的服務(wù)器權(quán)值并提供給負(fù)載均衡器。負(fù)載均衡器根據(jù)設(shè)定的周期獲取服務(wù)器的負(fù)載能力的信息,但是請(qǐng)求的到達(dá)時(shí)間是不固定的,若負(fù)載均衡器更新負(fù)載能力信息不及時(shí),可能會(huì)導(dǎo)致單個(gè)節(jié)點(diǎn)處理負(fù)載的實(shí)際情況超過(guò)其處理能力[3]。所以,引入一個(gè)新的負(fù)載能力值指標(biāo)——負(fù)載冗余參數(shù) L,利用這個(gè)參數(shù)來(lái)衡量在某時(shí)刻某服務(wù)器的負(fù)載均衡能力[4]。
2.3 ?改進(jìn)的負(fù)載均衡TEST算法的描述
服務(wù)器的負(fù)載能力的計(jì)算主要包括CPU占用率、內(nèi)存的利用率、網(wǎng)絡(luò)帶寬占用率三個(gè)參數(shù)。當(dāng)負(fù)載均衡器收到這三個(gè)參數(shù)后,計(jì)算每臺(tái)服務(wù)器的負(fù)載值Load(Si),并參考每臺(tái)服務(wù)器的最大負(fù)載能力C(Si),計(jì)算每臺(tái)服務(wù)器的當(dāng)前負(fù)載比例值P(Si),負(fù)載比例值越大,說(shuō)明服務(wù)器剩余的處理能力越小,因此當(dāng)有新的客戶端請(qǐng)求到達(dá)時(shí),優(yōu)先分配到負(fù)載比例值小的服務(wù)器。同時(shí)還為為負(fù)載比例值設(shè)定一個(gè)閾值,如90%,當(dāng)負(fù)載比例值達(dá)到90%時(shí),該服務(wù)器被認(rèn)定為過(guò)載,用戶請(qǐng)求不再分配到該服務(wù)器,同時(shí)為上述3個(gè)關(guān)鍵參數(shù)各設(shè)定一個(gè)獨(dú)立的單項(xiàng)閾值,如果每臺(tái)服務(wù)器上述3個(gè)關(guān)鍵參數(shù)中的任意一項(xiàng)參數(shù)值超過(guò)其單項(xiàng)閾值,用戶請(qǐng)求將不再給這個(gè)服務(wù)器[6]。
(1)計(jì)算每臺(tái)服務(wù)器最大負(fù)載能力:假設(shè)服務(wù)器集群為S={S0,S1,…,Sn–1},Si為集群中第i個(gè)服務(wù)器節(jié)點(diǎn)。R(Si)為集群中第i臺(tái)服務(wù)器的最大負(fù)載均衡能力值,Ki為各服務(wù)器性能指標(biāo)的比重系數(shù), = 1。其中RCPU表示CPU頻率,Rm表示內(nèi)存總量,Rnet表示網(wǎng)絡(luò)帶寬占用率,則R(Si)的計(jì)算公式為:
R(Si)= k1*RCPU(Si)+k2*Rm(Si)+k3*Rnet(Si)(1)
F(Si)為服務(wù)器當(dāng)前的負(fù)載能力值,qi為各負(fù)載能力指標(biāo)的比重系數(shù), = 1。其中 FCPU表示CPU 利用率,F(xiàn)m表示內(nèi)存使用率,F(xiàn)net表示網(wǎng)絡(luò)帶寬,則F(Si)的計(jì)算公式為:
F(Si)= q1*FCPU(Si)+ q2*Fm(Si)+q3*Fnet(Si) (2)
(2)CPU利用率FCPU(Si)和內(nèi)存使用率Fm(Si)的計(jì)算
可以從/proc/stat文件中讀取的值計(jì)算得出FCPU(Si)。獲取得到的值包括:用戶占用CPU的時(shí)間、系統(tǒng)內(nèi)核占用時(shí)間和空閑進(jìn)程占用時(shí)間,可通過(guò)空閑進(jìn)程占用時(shí)間可以計(jì)算出CPU的未利用率,進(jìn)而計(jì)算得出CPU的使用率,再設(shè)定兩個(gè)時(shí)刻t1和t2,用Ii表示ti時(shí)刻的空閑進(jìn)程,Ci表示ti時(shí)刻的CPU[3]。
2.4 ?算法的實(shí)現(xiàn)過(guò)程
首先負(fù)載均衡算法需要獲取兩個(gè)參數(shù):一是服務(wù)器權(quán)值,二是最小負(fù)載冗余值,接著負(fù)載均衡器與服務(wù)器建立連接并監(jiān)聽(tīng)服務(wù)器端口,再調(diào)用recvfrom()方法接收服務(wù)器發(fā)送回來(lái)的數(shù)據(jù),根據(jù)集群中各個(gè)服務(wù)器的性能和負(fù)載能力,計(jì)算得出服務(wù)器權(quán)值和負(fù)載冗余值[5]。最后對(duì)服務(wù)器權(quán)值進(jìn)行周期性更新只有,遍歷獲取服務(wù)器集群中的每臺(tái)服務(wù)器的負(fù)載冗余值,在滿足服務(wù)器的負(fù)載冗余值滿足L(Si)>Lmin前提下,服務(wù)器的當(dāng)前的權(quán)值和負(fù)載冗余值高的優(yōu)先分配客戶端請(qǐng)求。
2.5 ?TEST算法仿真實(shí)驗(yàn)
為了驗(yàn)證負(fù)載均衡改進(jìn)算法—TEST算法的優(yōu)越性,將最少連接數(shù)算法和TEST算法進(jìn)行對(duì)比,以同樣數(shù)量的客戶端請(qǐng)求服務(wù)器集群的響應(yīng)時(shí)間作為衡量標(biāo)準(zhǔn)。使用Load Runner作為測(cè)試工具。測(cè)試時(shí),保證兩個(gè)模擬客戶端在單位時(shí)間里發(fā)送同樣次數(shù)的請(qǐng)求。由8臺(tái)服務(wù)器組成的服務(wù)器集群來(lái)處理請(qǐng)求。在服務(wù)器集群中分別使用最少連接數(shù)算法和TEST算法來(lái)響應(yīng)同樣數(shù)量的客戶端請(qǐng)求,將收到服務(wù)器集群反應(yīng)的時(shí)間記錄并進(jìn)行對(duì)比。測(cè)試結(jié)果如表1和圖2所示。
由實(shí)驗(yàn)測(cè)試結(jié)果可以分析得出,在客戶端請(qǐng)求數(shù)還未明顯增加的情況下,NAT負(fù)載均衡方案和TEST算法的處理請(qǐng)求的響應(yīng)時(shí)間是幾乎相等的。隨著客戶端請(qǐng)求連接數(shù)量的增加,達(dá)到8000以上時(shí),TEST算法的平均響應(yīng)效率較NAT負(fù)載均衡方案中的最小連接數(shù)算法有明顯的提高。
3 ?結(jié)束語(yǔ)
負(fù)載均衡系統(tǒng)實(shí)施方案的設(shè)計(jì)對(duì)工程師的知識(shí)面和經(jīng)驗(yàn)要求比較高,要想針對(duì)大型在線考試系統(tǒng)應(yīng)用設(shè)計(jì)出優(yōu)秀的的負(fù)載均衡系統(tǒng)方案,通常需要軟硬件、操作系統(tǒng)、網(wǎng)絡(luò)技術(shù)、算法等多個(gè)方面的技能及相關(guān)的經(jīng)驗(yàn)積累。通過(guò)結(jié)合大型在線考試系統(tǒng)的實(shí)際使用,分析了負(fù)載均衡在負(fù)載均衡策略和健康測(cè)試模塊這兩個(gè)方面的相關(guān)設(shè)置,并提出了一種適合大型在線考試系統(tǒng)實(shí)際應(yīng)用的負(fù)載均衡算法,負(fù)載均衡算法是決定負(fù)載均衡系統(tǒng)成敗的關(guān)鍵因素,優(yōu)秀的均衡算法能充分發(fā)揮服務(wù)器集群的優(yōu)勢(shì),充分利用集群的各種資源,為用戶提供高質(zhì)量的服務(wù)[6]。通過(guò)分析常用負(fù)載均衡算法的優(yōu)缺點(diǎn),提出了TEST負(fù)載均衡算法,該算法的主要特點(diǎn)是: 充分應(yīng)用節(jié)點(diǎn)CPU占用率、內(nèi)存的利用率、網(wǎng)絡(luò)帶寬占用率三個(gè)因素,指導(dǎo)任務(wù)的分配,通過(guò)負(fù)載修正保證系統(tǒng)的穩(wěn)定性。通過(guò)實(shí)驗(yàn)可以發(fā)現(xiàn),Test算法能顯著地提高負(fù)載均衡效率,從而提高在線考試系統(tǒng)的穩(wěn)定性。當(dāng)然,提出的算法也存在不足,例如三個(gè)參數(shù)的獲取給系統(tǒng)帶來(lái)了額外的開(kāi)銷,使得服務(wù)端的請(qǐng)求有一定的延滯。另外,負(fù)載均衡系統(tǒng)的效率雖然有了一定的提高,但考試系統(tǒng)實(shí)際應(yīng)用中還有實(shí)驗(yàn)中沒(méi)有考慮周到的影響因素。在今后的實(shí)驗(yàn)中,將不斷完善節(jié)點(diǎn)負(fù)載的分配和修正機(jī)制并綜合考慮考試過(guò)程中的各種影響因素,進(jìn)一步提高算法的均衡效率。另外,希望對(duì)大家部署在線考試系統(tǒng)和其他高并發(fā)系統(tǒng)時(shí)有所借鑒。
參考文獻(xiàn)
[1] 劉同. 負(fù)載均衡技術(shù)在數(shù)據(jù)庫(kù)集群系統(tǒng)中的應(yīng)用與實(shí)現(xiàn)[D]. 國(guó)防科學(xué)技術(shù)大學(xué), 2009.
[2] 丁逸. 基于層次策略的動(dòng)態(tài)負(fù)載均衡算法研究[D]. 東南大學(xué), 2005.
[3] 梁家君. 基于神經(jīng)網(wǎng)絡(luò)改進(jìn)粒子群優(yōu)化算法的負(fù)載均衡技術(shù)優(yōu)化研究[D]. 廣東工業(yè)大學(xué), 2018.
[4] 楊明極, 王鶴, 趙加鳳. 基于CPU和內(nèi)存利用率的負(fù)載均衡算法的研究[J]. 科技通報(bào), 2016, 32(04): 160-164.
[5] 朱莉, 沈未名, 李銳, 徐勝勇. 利用遺傳算法的網(wǎng)絡(luò)GIS集群服務(wù)器動(dòng)態(tài)負(fù)載均衡算法[J]. 武漢大學(xué)學(xué)報(bào)(信息科學(xué)版), 2011, 36(06): 721-725.
[6] 莊旻軒. 服務(wù)器集群中基于動(dòng)態(tài)反饋的負(fù)載均衡算法[D]. 大連理工大學(xué), 2014.
[7] 唐俊武, 南理勇, 左強(qiáng). 在線考試系統(tǒng)開(kāi)發(fā)中的幾個(gè)問(wèn)題及解決方法[J]. 計(jì)算機(jī)與數(shù)字工程, 2005(08): 144-147.
[8] 王春娟, 董麗麗, 賈麗. Web集群系統(tǒng)的負(fù)載均衡算法[J]. 計(jì)算機(jī)工程, 2010(02): 108-110.
[9] 徐敏, 李明, 鄭建忠, 等. 基于OpenStack的Swift負(fù)載均衡算法[10]. 計(jì)算機(jī)系統(tǒng)應(yīng)用, 2018, 27(01): 127-131.
[10] 孫凌宇, 等. 云平臺(tái)環(huán)境下基于禁忌搜索的負(fù)載均衡任務(wù)調(diào)度優(yōu)化算法[J]. 小型微型計(jì)算機(jī)系統(tǒng), 2015, 36 (09): 1948-1952.
[11] 蔡嵩, 等. 云平臺(tái)環(huán)境中基于樸素貝葉斯算法的負(fù)載均衡技術(shù)[J]. 計(jì)算機(jī)應(yīng)用, 2014, 34(2): 360-364.
[12] 尚永強(qiáng). 計(jì)算機(jī)網(wǎng)絡(luò)信息安全中數(shù)據(jù)加密技術(shù)的探討[J]. 軟件, 2018, 39(12): 198-201.
[13] 劉文. 基于大數(shù)據(jù)優(yōu)化網(wǎng)絡(luò)的安全性策略的研究[J]. 軟件, 2018, 39(9): 205-208.
[14] 黃超, 唐子蛟. 基于云計(jì)算技術(shù)的智慧校園平臺(tái)建設(shè)研究[J]. 軟件, 2018, 39(5): 27-30.
[15] 吳亞熙, 岑峰. 基于卷積神經(jīng)網(wǎng)絡(luò)的多層級(jí)目標(biāo)檢測(cè)方法[J]. 軟件, 2018, 39(4): 164-169.
[16] 孫哲, 巫中正, 李千目. 基于網(wǎng)絡(luò)流量的安全可達(dá)性推理方法[J]. 軟件, 2018, 39(4): 36-43.
[17] 李潔, 何軍. 云計(jì)算操作系統(tǒng)網(wǎng)絡(luò)虛擬化模塊Neutron 分析研究[J]. 軟件, 2016, 37(01): 21-23.