一種集群的負(fù)載均衡方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及網(wǎng)絡(luò)集群相關(guān)技術(shù)領(lǐng)域,特別是一種集群的負(fù)載均衡方法及系統(tǒng)。
【背景技術(shù)】
[0002] 網(wǎng)民規(guī)模和WEB應(yīng)用形式的迅速增加給支撐WEB應(yīng)用的服務(wù)器帶來(lái)了很多具有挑 戰(zhàn)性的問(wèn)題。很多熱門(mén)的網(wǎng)站如各電商網(wǎng)站會(huì)吸引龐大的訪問(wèn)流量。從應(yīng)用角度,隨著WEB 應(yīng)用的商業(yè)化發(fā)展,對(duì)支撐WEB應(yīng)用的系統(tǒng)的高可用性、安全性提出了更高的要求。從用戶(hù) 角度,人們希望獲得更加方便快捷的服務(wù),對(duì)WEB應(yīng)用的響應(yīng)速度和可靠性也提出了更高 的要求。
[0003] WEB集群技術(shù)是提升服務(wù)器處理性能的關(guān)鍵技術(shù)之一。WEB集群是將若干臺(tái)WEB服 務(wù)器通過(guò)一定的技術(shù)組織構(gòu)成的一個(gè)邏輯整體,從外部來(lái)看,系統(tǒng)就是一臺(tái)性能更加強(qiáng)大 的WEB服務(wù)器。通過(guò)增減服務(wù)器的數(shù)量能夠靈活調(diào)整系統(tǒng)的處理容量。WEB集群作為一個(gè) 統(tǒng)一的整體為外部提供服務(wù),外部服務(wù)請(qǐng)求的工作負(fù)載由集群內(nèi)的各個(gè)服務(wù)器共同承擔(dān)。 WEB集群性能的好壞直接影響集群向外提供服務(wù)能力的大小。
[0004] 目前有兩種技術(shù)用來(lái)提升WEB集群的性能:
[0005] 一種是緩存技術(shù),目前的WEB服務(wù)器為了提高靜態(tài)頁(yè)面的響應(yīng)速度,大多使用了 高速緩存技術(shù),會(huì)將全部或者部分訪問(wèn)過(guò)的頁(yè)面存儲(chǔ)在高速緩存中,當(dāng)下一次有請(qǐng)求時(shí), WEB服務(wù)器首先會(huì)查看頁(yè)面是否存儲(chǔ)在高速緩存中,如果在,則WEB服務(wù)器將其直接從緩存 中取出發(fā)送給用戶(hù)。相比于磁盤(pán),高速緩存的讀寫(xiě)速度要遠(yuǎn)遠(yuǎn)高出許多,所以如果頁(yè)面能夠 命中緩存,則將大大提高靜態(tài)頁(yè)面的響應(yīng)速度。
[0006] 一種是負(fù)載均衡技術(shù),負(fù)載均衡技術(shù)為WEB集群中如何合理、有效的分配任務(wù)提 供了解決方案,能夠根據(jù)集群中服務(wù)器的處理能力合理的分配用戶(hù)的請(qǐng)求任務(wù),整個(gè)任務(wù) 分配的過(guò)程對(duì)用戶(hù)來(lái)說(shuō)是透明的。利用負(fù)載均衡技術(shù),能夠有效的解決WEB集群中服務(wù)器 負(fù)載不均衡的問(wèn)題,最大限度的利用各個(gè)服務(wù)器的處理能力,使整個(gè)WEB系統(tǒng)的處理性能 得到很大提升,縮短用戶(hù)請(qǐng)求等待的響應(yīng)時(shí)間。
[0007] 在緩存技術(shù)方面,LARD算法是利用緩存技術(shù)在訪問(wèn)局部性控制方面表現(xiàn)得比較好 的算法,它的核心思想是利用服務(wù)分區(qū)的方式提高緩存命中率。它把WEB集群中提供的URL 服務(wù)劃分成幾個(gè)分區(qū),每個(gè)服務(wù)器節(jié)點(diǎn)只負(fù)責(zé)處理其中一個(gè)URL分區(qū)的內(nèi)容,但是物理上 每個(gè)節(jié)點(diǎn)都有全部的URL內(nèi)容。當(dāng)請(qǐng)求到達(dá)時(shí),分配器根據(jù)請(qǐng)求的URL查詢(xún)?cè)揢RL屬于哪 個(gè)分區(qū),然后調(diào)度該分區(qū)的服務(wù)器節(jié)點(diǎn)來(lái)處理請(qǐng)求,一般同一個(gè)URL請(qǐng)求將被分配到同一 個(gè)節(jié)點(diǎn)。當(dāng)WEB集群出現(xiàn)負(fù)載失衡狀況時(shí),它將負(fù)載較重的節(jié)點(diǎn)處理的URL分區(qū)的部分內(nèi) 容劃分給負(fù)載較輕的節(jié)點(diǎn)。
[0008] 在負(fù)載均衡方面,加權(quán)最小連接調(diào)度算法是傳統(tǒng)調(diào)度算法中最典型的動(dòng)態(tài)負(fù)載均 衡算法,在LVS集群系統(tǒng)中也應(yīng)用得最為普遍。該算法以權(quán)值來(lái)描述服務(wù)器節(jié)點(diǎn)的處理能 力,以服務(wù)器當(dāng)前的連接數(shù)來(lái)表示服務(wù)器節(jié)點(diǎn)當(dāng)前的負(fù)載,結(jié)合權(quán)值和連接數(shù)來(lái)進(jìn)行請(qǐng)求 的分配,每次調(diào)度連接數(shù)與權(quán)值比值最小的節(jié)點(diǎn)來(lái)處理任務(wù)。
[0009] WEB頁(yè)面產(chǎn)生的方式有兩類(lèi):一種是靜態(tài)頁(yè)面,一種是動(dòng)態(tài)頁(yè)面,靜態(tài)頁(yè)面和動(dòng)態(tài) 頁(yè)面。這兩種頁(yè)面在產(chǎn)生和存儲(chǔ)方式上的存在很大的差異。
[0010] 其中,靜態(tài)頁(yè)面顧名思義就是靜態(tài)的、內(nèi)容不會(huì)改變的頁(yè)面,靜態(tài)頁(yè)面存儲(chǔ)在磁盤(pán) 中,當(dāng)用戶(hù)請(qǐng)求靜態(tài)頁(yè)面時(shí),WEB服務(wù)器對(duì)請(qǐng)求進(jìn)行URL解析后,從磁盤(pán)中讀出頁(yè)面,對(duì)頁(yè)面 進(jìn)行劃分然后封裝成報(bào)文發(fā)送給客戶(hù)端。靜態(tài)頁(yè)面的響應(yīng)時(shí)間主要與頁(yè)面的長(zhǎng)度,以及磁 盤(pán)I/O的讀寫(xiě)速度相關(guān)。目前的WEB服務(wù)器為了提高靜態(tài)頁(yè)面的響應(yīng)速度,大多使用了高速 緩存技術(shù),會(huì)將全部或者部分訪問(wèn)過(guò)的頁(yè)面存儲(chǔ)在高速緩存中,當(dāng)下一次有請(qǐng)求時(shí),WEB服 務(wù)器首先會(huì)查看頁(yè)面是否存儲(chǔ)在高速緩存中,如果在,則WEB服務(wù)器將其直接從緩存中取 出發(fā)送給用戶(hù)。相比于磁盤(pán),高速緩存的讀寫(xiě)速度要遠(yuǎn)遠(yuǎn)高出許多,所以如果頁(yè)面能夠命中 緩存,則將大大提高靜態(tài)頁(yè)面的響應(yīng)速度。如果頁(yè)面不在緩存中,WEB服務(wù)器會(huì)從磁盤(pán)中去 讀取頁(yè)面文件,并將其放在緩存中,以便下一次有同一頁(yè)面請(qǐng)求時(shí)可以高速響應(yīng)。然而,一 般緩存的空間大小是有限的,不可能將WEB服務(wù)器上的頁(yè)面全部緩存,所以,緩存系統(tǒng)一般 會(huì)根據(jù)一定的頁(yè)面置換算法,淘汰部分頁(yè)面,將新頁(yè)面進(jìn)行緩存。使用高速緩存來(lái)提供靜態(tài) 頁(yè)面服務(wù),將使頁(yè)面的讀取時(shí)間減少很多,系統(tǒng)的響應(yīng)時(shí)間和吞吐率都將得到很大的改善。 提高緩存命中率對(duì)WEB集群性能的提高非常關(guān)鍵。
[0011] 動(dòng)態(tài)頁(yè)面與靜態(tài)頁(yè)面不同,它不是提前存儲(chǔ)在磁盤(pán)中有請(qǐng)求時(shí)讀出頁(yè)面發(fā)送給用 戶(hù)即可,它是根據(jù)用戶(hù)的輸入動(dòng)態(tài)生成的,頁(yè)面生成過(guò)程中需要進(jìn)行一系列的計(jì)算或者數(shù) 據(jù)庫(kù)查詢(xún),開(kāi)銷(xiāo)相比靜態(tài)頁(yè)面要大很多,而且在不同的輸入條件下同一個(gè)URL頁(yè)面的開(kāi)銷(xiāo) 也不相同。動(dòng)態(tài)頁(yè)面的特點(diǎn)就是其不能進(jìn)行緩存,因?yàn)橥粋€(gè)URL在不同的輸入條件下的 內(nèi)容完全不同,內(nèi)容隨時(shí)在進(jìn)行動(dòng)態(tài)變化,對(duì)其進(jìn)行緩存毫無(wú)意義。
[0012] 在WEB集群系統(tǒng)中,為提高系統(tǒng)的響應(yīng)速度和最大化的利用服務(wù)器的資源提高系 統(tǒng)的吞吐量,理想狀況下是,針對(duì)靜態(tài)頁(yè)面的請(qǐng)求主要考慮如何最大化的提高緩存命中率, 現(xiàn)有的算法對(duì)集群的內(nèi)容進(jìn)行分區(qū),每個(gè)服務(wù)器只提供部分內(nèi)容,思想是將同一個(gè)URL的 請(qǐng)求分配給之前訪問(wèn)過(guò)的服務(wù)器進(jìn)行處理,由于服務(wù)器處理過(guò)該請(qǐng)求,該請(qǐng)求的Cache命 中率很高。但是這種訪問(wèn)局部性的控制方式可能會(huì)導(dǎo)致部分WEB集群負(fù)載失衡,負(fù)載集中 于處理熱點(diǎn)URL的服務(wù)器上,而其他服務(wù)器則資源閑置。針對(duì)動(dòng)態(tài)頁(yè)面的請(qǐng)求,主要考慮將 負(fù)載均勻的分配到各個(gè)服務(wù)器上,但是這樣就不利于靜態(tài)請(qǐng)求命中Cache。
[0013] 如上述技術(shù)方案,LARD算法把WEB集群中提供的URL服務(wù)劃分成幾個(gè)分區(qū),每個(gè) 服務(wù)器節(jié)點(diǎn)只負(fù)責(zé)處理其中一個(gè)URL分區(qū)的內(nèi)容,但是物理上每個(gè)節(jié)點(diǎn)都有全部的URL內(nèi) 容。當(dāng)請(qǐng)求到達(dá)時(shí),分配器根據(jù)請(qǐng)求的URL查詢(xún)?cè)揢RL屬于哪個(gè)分區(qū),然后調(diào)度該分區(qū)的服 務(wù)器節(jié)點(diǎn)來(lái)處理請(qǐng)求,一般同一個(gè)URL請(qǐng)求將被分配到同一個(gè)節(jié)點(diǎn)。當(dāng)WEB集群出現(xiàn)負(fù)載 失衡狀況時(shí),它將負(fù)載較重的節(jié)點(diǎn)處理的URL分區(qū)的部分內(nèi)容劃分給負(fù)載較輕的節(jié)點(diǎn)。它 以服務(wù)器節(jié)點(diǎn)的活動(dòng)連接數(shù)來(lái)評(píng)估節(jié)點(diǎn)的負(fù)載,由于各連接上處理的請(qǐng)求的數(shù)量和請(qǐng)求所 消耗的資源各不相同,這樣做并不能正確的評(píng)價(jià)節(jié)點(diǎn)的負(fù)載狀況,特別是在負(fù)載粒度相差 較大的集群中,該算法可能會(huì)導(dǎo)致WEB集群負(fù)載嚴(yán)重不均衡。
[0014] 加權(quán)最小連接算法的缺陷體現(xiàn)在:第一,沒(méi)有考慮訪問(wèn)局部性利用緩存技術(shù)對(duì)系 統(tǒng)性能的影響;第二,服務(wù)器的權(quán)值由系統(tǒng)管理員人為設(shè)定,太過(guò)主觀,不適當(dāng)?shù)臋?quán)值設(shè)定 會(huì)導(dǎo)致系統(tǒng)嚴(yán)重的負(fù)載不均衡;第三,以連接數(shù)來(lái)表示服務(wù)器的負(fù)載,然而由于每個(gè)連接請(qǐng) 求的復(fù)雜度不一樣,所消耗的服務(wù)器資源不一樣,連接數(shù)并不能真實(shí)的反映服務(wù)器的負(fù)載 狀況;第四,固定不變的權(quán)值將使系統(tǒng)長(zhǎng)時(shí)間運(yùn)行后出現(xiàn)負(fù)載向權(quán)值高的服務(wù)器傾斜。
【發(fā)明內(nèi)容】
[0015] 基于此,有必要針對(duì)現(xiàn)有技術(shù)容易導(dǎo)致集群負(fù)載不均衡的的技術(shù)問(wèn)題,提供一種 集群的負(fù)載均衡方法及系統(tǒng)。
[0016] -種集群的負(fù)載均衡方法,包括:
[0017] 調(diào)度集選擇步驟,包括:每隔預(yù)設(shè)周期更新集群中每個(gè)節(jié)點(diǎn)的負(fù)載信息,根據(jù)集群 中每個(gè)節(jié)點(diǎn)的負(fù)載信息,選出當(dāng)前周期內(nèi)包括多個(gè)輕負(fù)載節(jié)點(diǎn)的調(diào)度集;
[0018] 請(qǐng)求解析步驟,包括:接收到訪問(wèn)請(qǐng)求,對(duì)所述訪問(wèn)請(qǐng)求進(jìn)行解析,確定所述訪問(wèn) 請(qǐng)求為動(dòng)態(tài)請(qǐng)求或者靜態(tài)請(qǐng)求;
[0019] 服務(wù)器選擇步驟,包括:如果訪問(wèn)請(qǐng)求為動(dòng)態(tài)請(qǐng)求,從訪問(wèn)請(qǐng)求所在周期的調(diào)度集 中,通過(guò)隨機(jī)算法選擇一個(gè)節(jié)點(diǎn)作為所述訪問(wèn)請(qǐng)求的處理節(jié)點(diǎn),如果訪問(wèn)請(qǐng)求為靜態(tài)請(qǐng)求, 則查詢(xún)URL映射表,如果URL映射表中有訪問(wèn)請(qǐng)求對(duì)應(yīng)的URL的映射記錄,則采用映射記錄 對(duì)應(yīng)的節(jié)點(diǎn)作為訪問(wèn)請(qǐng)求的處理節(jié)點(diǎn),如果URL映射表中沒(méi)有訪問(wèn)請(qǐng)求對(duì)應(yīng)的URL的映射 記錄,則通過(guò)隨機(jī)算法選擇一個(gè)節(jié)點(diǎn)作為所述訪問(wèn)請(qǐng)求的處理節(jié)點(diǎn)。
[0020] 一種集群的負(fù)載均衡系統(tǒng),包括:
[0021] 調(diào)度集選擇單元,用于:每隔預(yù)設(shè)周期更新集群中每個(gè)節(jié)點(diǎn)的負(fù)載信息,根據(jù)集群 中每個(gè)節(jié)點(diǎn)的負(fù)載信息,選出當(dāng)前周期內(nèi)包括多個(gè)輕負(fù)載節(jié)點(diǎn)的調(diào)度集;
[0022] 請(qǐng)求解析單元,用于:接收到訪問(wèn)請(qǐng)求,對(duì)所述訪問(wèn)請(qǐng)求進(jìn)行解析,確定所述訪問(wèn) 請(qǐng)求為動(dòng)態(tài)請(qǐng)求或者靜態(tài)請(qǐng)求;
[0023] 服務(wù)器選擇單元,用于:如果訪問(wèn)請(qǐng)求為動(dòng)態(tài)請(qǐng)求,從訪問(wèn)請(qǐng)求所在周期的調(diào)度集 中,通過(guò)隨機(jī)算法選擇一個(gè)節(jié)點(diǎn)作為所述訪問(wèn)請(qǐng)求的處理節(jié)點(diǎn),如果訪問(wèn)請(qǐng)求為靜態(tài)請(qǐng)求, 則查詢(xún)URL映射表,如果URL映射表中有訪問(wèn)請(qǐng)求對(duì)應(yīng)的URL的映射記錄,則采用映射記錄 對(duì)應(yīng)的節(jié)點(diǎn)作為訪問(wèn)請(qǐng)求的處理節(jié)點(diǎn),如果URL映射表中沒(méi)有訪問(wèn)請(qǐng)求對(duì)應(yīng)的URL的映射 記錄,則通過(guò)隨