怎么計算WEB服務(wù)器的最大負(fù)載量?
動態(tài)反饋負(fù)載均衡算法
動態(tài)反饋負(fù)載均衡算法考慮服務(wù)器的實(shí)時負(fù)載和響應(yīng)情況,不斷調(diào)整服務(wù)器間處理請求的比例,來避免有些服務(wù)器超載時依然收到大量請求,從而提高整個系統(tǒng)的吞吐率。圖4.1顯示了該算法的工作環(huán)境,在負(fù)載調(diào)度器上運(yùn)行Monitor Daemon進(jìn)程,Monitor Daemon來監(jiān)視和收集各個服務(wù)器的負(fù)載信息。Monitor Daemon可根據(jù)多個負(fù)載信息算出一個綜合負(fù)載值。Monitor Daemon將各個服務(wù)器的綜合負(fù)載值和當(dāng)前權(quán)值算出一組新的權(quán)值,若新權(quán)值和當(dāng)前權(quán)值的差值大于設(shè)定的閥值,Monitor Daemon將該服務(wù)器的權(quán)值設(shè)置到內(nèi)核中的IPVS調(diào)度中,而在內(nèi)核中連接調(diào)度一般采用加權(quán)輪叫調(diào)度算法或者加權(quán)最小連接調(diào)度算法。
圖4.1:動態(tài)反饋負(fù)載均衡算法的工作環(huán)境
連接調(diào)度
當(dāng)客戶通過TCP連接訪問網(wǎng)絡(luò)訪問時,服務(wù)所需的時間和所要消耗的計算資源是千差萬別的,它依賴于很多因素。例如,它依賴于請求的服務(wù)類型、當(dāng)前網(wǎng)絡(luò)帶寬的情況、以及當(dāng)前服務(wù)器資源利用的情況。一些負(fù)載比較重的請求需要進(jìn)行計算密集的查詢、數(shù)據(jù)庫訪問、很長響應(yīng)數(shù)據(jù)流;而負(fù)載比較輕的請求往往只需要讀一個HTML頁面或者進(jìn)行很簡單的計算。
請求處理時間的千差萬別可能會導(dǎo)致服務(wù)器利用的傾斜(Skew),即服務(wù)器間的負(fù)載不平衡。例如,有一個WEB頁面有A、B、C和D文件,其中D是大圖像文件,瀏覽器需要建立四個連接來取這些文件。當(dāng)多個用戶通過瀏覽器同時訪問該頁面時,最極端的情況是所有D文件的請求被發(fā)到同一臺服務(wù)器。所以說,有可能存在這樣情況,有些服務(wù)器已經(jīng)超負(fù)荷運(yùn)行,而其他服務(wù)器基本是閑置著。同時,有些服務(wù)器已經(jīng)忙不過來,有很長的請求隊(duì)列,還不斷地收到新的請求。反過來說,這會導(dǎo)致客戶長時間的等待,覺得系統(tǒng)的服務(wù)質(zhì)量差。
簡單連接調(diào)度
簡單連接調(diào)度可能會使得服務(wù)器傾斜的發(fā)生。在上面的例子中,若采用輪叫調(diào)度算法,且集群中正好有四臺服務(wù)器,必有一臺服務(wù)器總是收到D文件的請求。這種調(diào)度策略會導(dǎo)致整個系統(tǒng)資源的低利用率,因?yàn)橛行┵Y源被用盡導(dǎo)致客戶的長時間等待,而其他資源空閑著。
實(shí)際TCP/IP流量的特征
文獻(xiàn)說明網(wǎng)絡(luò)流量是呈波浪型發(fā)生的,在一段較長時間的小流量后,會有一段大流量的訪問,然后是小流量,這樣跟波浪一樣周期性地發(fā)生。文獻(xiàn)揭示在WAN和LAN上網(wǎng)絡(luò)流量存在自相似的特征,在WEB訪問流也存在自相似性。這就需要一個動態(tài)反饋機(jī)制,利用服務(wù)器組的狀態(tài)來應(yīng)對訪問流的自相似性。
動態(tài)反饋負(fù)載均衡機(jī)制
TCP/IP流量的特征通俗地說是有許多短事務(wù)和一些長事務(wù)組成,而長事務(wù)的工作量在整個工作量占有較高的比例。所以,我們要設(shè)計一種負(fù)載均衡算法,來避免長事務(wù)的請求總被分配到一些機(jī)器上,而是盡可能將帶有毛刺(Burst)的分布分割成相對較均勻的分布。
我們提出基于動態(tài)反饋負(fù)載均衡機(jī)制,來控制新連接的分配,從而控制各個服務(wù)器的負(fù)載。例如,在IPVS調(diào)度器的內(nèi)核中使用加權(quán)輪叫調(diào)度(Weighted Round-Robin Scheduling)算法來調(diào)度新的請求連接;在負(fù)載調(diào)度器的用戶空間中運(yùn)行Monitor Daemon。Monitor Daemon定時地監(jiān)視和收集各個服務(wù)器的負(fù)載信息,根據(jù)多個負(fù)載信息算出一個綜合負(fù)載值。Monitor Daemon將各個服務(wù)器的綜合負(fù)載值和當(dāng)前權(quán)值算出一組新的權(quán)值。當(dāng)綜合負(fù)載值表示服務(wù)器比較忙時,新算出的權(quán)值會比其當(dāng)前權(quán)值要小,這樣新分配到該服務(wù)器的請求數(shù)就會少一些。當(dāng)綜合負(fù)載值表示服務(wù)器處于低利用率時,新算出的權(quán)值會比其當(dāng)前權(quán)值要大,來增加新分配到該服務(wù)器的請求數(shù)。若新權(quán)值和當(dāng)前權(quán)值的差值大于設(shè)定的閥值,Monitor Daemon將該服務(wù)器的權(quán)值設(shè)置到內(nèi)核中的IPVS調(diào)度中。過了一定的時間間隔(如2秒鐘),Monitor Daemon再查詢各個服務(wù)器的情況,并相應(yīng)調(diào)整服務(wù)器的權(quán)值;這樣周期性地進(jìn)行??梢哉f,這是一個負(fù)反饋機(jī)制,使得服務(wù)器保持較好的利用率。 #p#page_title#e#
在加權(quán)輪叫調(diào)度算法中,當(dāng)服務(wù)器的權(quán)值為零,已建立的連接會繼續(xù)得到該服務(wù)器的服務(wù),而新的連接不會分配到該服務(wù)器。系統(tǒng)管理員可以將一臺服務(wù)器的權(quán)值設(shè)置為零,使得該服務(wù)器安靜下來,當(dāng)已有的連接都結(jié)束后,他可以將該服務(wù)器切出,對其進(jìn)行維護(hù)。維護(hù)工作對系統(tǒng)都是不可少的,比如硬件升級和軟件更新等,零權(quán)值使得服務(wù)器安靜的功能很主要。所以,在動態(tài)反饋負(fù)載均衡機(jī)制中我們要保證該功能,當(dāng)服務(wù)器的權(quán)值為零時,我們不對服務(wù)器的權(quán)值進(jìn)行調(diào)整。
綜合負(fù)載
在計算綜合負(fù)載時,我們主要使用兩大類負(fù)載信息:輸入指標(biāo)和服務(wù)器指標(biāo)。輸入指標(biāo)是在調(diào)度器上收集到的,而服務(wù)器指標(biāo)是在服務(wù)器上的各種負(fù)載信息。我們用綜合負(fù)載來反映服務(wù)器當(dāng)前的比較確切負(fù)載情況,對于不同的應(yīng)用,會有不同的負(fù)載情況,這里我們引入各個負(fù)載信息的系數(shù),來表示各個負(fù)載信息在綜合負(fù)載中輕重。系統(tǒng)管理員根據(jù)不同應(yīng)用的需求,調(diào)整各個負(fù)載信息的系數(shù)。另外,系統(tǒng)管理員設(shè)置收集負(fù)載信息的時間間隔。
輸入指標(biāo)主要是在單位時間內(nèi)服務(wù)器收到新連接數(shù)與平均連接數(shù)的比例,它是在調(diào)度器上收集到的,所以這個指標(biāo)是對服務(wù)器負(fù)載情況的一個估計值。在調(diào)度器上有各個服務(wù)器收到連接數(shù)的計數(shù)器,對于服務(wù)器Si,可以得到分別在時間T1和T2時的計數(shù)器值Ci1和Ci2,計算出在時間間隔T2-T1內(nèi)服務(wù)器 Si收到新連接數(shù)Ni = Ci2 - Ci1。這樣,得到一組服務(wù)器在時間間隔T2-T1內(nèi)服務(wù)器Si收到新連接數(shù){Ni},服務(wù)器Si的輸入指標(biāo)INPUTi為其新連接數(shù)與n臺服務(wù)器收到平均連接數(shù)的比值,其公式為