機算法選擇一個節(jié)點作為所述訪問請求的處理節(jié)點。
[0024] 本發(fā)明通過定期選擇具有輕負載節(jié)點的的調(diào)度集,并在獲取訪問請求時區(qū)分動態(tài) 請求和靜態(tài)請求,為不同類型的訪問請求選擇不同方式的選擇算法。一方面,針對靜態(tài)請求 盡可能的提高其緩存命中率,調(diào)度最有可能緩存該頁面的服務(wù)器執(zhí)行該任務(wù)請求,另一方 面,針對動態(tài)請求盡可能的保證將任務(wù)均勻的分配到各服務(wù)器執(zhí)行,保證負載均衡。同時周 期性的對集群的負載進行調(diào)整,防止節(jié)點過載。
【附圖說明】
[0025] 圖1為本發(fā)明一種集群的負載均衡方法的工作流程圖;
[0026] 圖2為本發(fā)明最佳實施例的模塊示意圖;
[0027] 圖3為本發(fā)明最佳實施例的各模塊協(xié)作圖;
[0028] 圖4為本發(fā)明一種集群的負載均衡系統(tǒng)的結(jié)構(gòu)單元圖。
【具體實施方式】
[0029] 下面結(jié)合附圖和具體實施例對本發(fā)明做進一步詳細的說明。
[0030] 如圖1所示為本發(fā)明一種集群的負載均衡方法的工作流程圖,包括:
[0031] 步驟S101,包括:每隔預(yù)設(shè)周期更新集群中每個節(jié)點的負載信息,根據(jù)集群中每 個節(jié)點的負載信息,選出當前周期內(nèi)包括多個輕負載節(jié)點的調(diào)度集;
[0032] 步驟S102,包括:接收到訪問請求,對所述訪問請求進行解析,確定所述訪問請求 為動態(tài)請求或者靜態(tài)請求;
[0033] 步驟S103,包括:如果訪問請求為動態(tài)請求,從訪問請求所在周期的調(diào)度集中,通 過隨機算法選擇一個節(jié)點作為所述訪問請求的處理節(jié)點,如果訪問請求為靜態(tài)請求,則查 詢URL映射表,如果URL映射表中有訪問請求對應(yīng)的URL的映射記錄,則采用映射記錄對應(yīng) 的節(jié)點作為訪問請求的處理節(jié)點,如果URL映射表中沒有訪問請求對應(yīng)的URL的映射記錄, 則通過隨機算法選擇一個節(jié)點作為所述訪問請求的處理節(jié)點。
[0034] 步驟SlOl中,定期對節(jié)點的負載信息進行更新,選擇出包括多個輕負載節(jié)點的調(diào) 度集,防止節(jié)點過載。在步驟S102中,對訪問請求進行區(qū)分,從而在步驟S103中根據(jù)不同 類型的訪問請求,采用不同的方式選擇處理節(jié)點。一方面,針對靜態(tài)請求盡可能的提高其緩 存命中率,調(diào)度最有可能緩存該頁面的服務(wù)器執(zhí)行該任務(wù)請求,另一方面,針對動態(tài)請求盡 可能的保證將任務(wù)均勻的分配到各服務(wù)器執(zhí)行,保證負載均衡。
[0035] 本文發(fā)明對靜態(tài)請求和動態(tài)請求采用不同的策略,在負載均衡的基礎(chǔ)上同時提升 緩存命中率,很好的解決了這兩者的制約關(guān)系,提升了 WEB集群的性能。本發(fā)明在負載最輕 的集合內(nèi)來進行調(diào)度,選取負載最小的一類作為周期內(nèi)的調(diào)度集,周期內(nèi)將負載分配給調(diào) 度集內(nèi)的節(jié)點,工作負載較重的節(jié)點在周期內(nèi)結(jié)束部分處理任務(wù),負載得到降低后,將在下 一個周期有機會選入調(diào)度集參與到任務(wù)的處理,周期內(nèi)參與調(diào)度的節(jié)點若工作負載變重, 將在下一周期不參與調(diào)度,這種周期性的反饋調(diào)節(jié)機制可以避免節(jié)點過載。
[0036] 如圖2所示為本發(fā)明最佳實施例的模塊示意圖,包括:請求解析模塊201、負載更 新模塊202、反饋調(diào)節(jié)模塊203、服務(wù)器選擇模塊204、節(jié)點信息采集模塊205五個部分。
[0037] 如圖3所示為本發(fā)明最佳實施例的各模塊協(xié)作圖,包括:
[0038] 步驟S301,load_balancer進程每隔周期T調(diào)用負載更新模塊;
[0039] 步驟S302,負載更新模塊與各節(jié)點的節(jié)點信息采集模塊通信,獲取負載信息;
[0040] 步驟S303,節(jié)點信息采集模塊采集服務(wù)器的負載信息;
[0041] 步驟S304,節(jié)點信息采集模塊返回服務(wù)器節(jié)點的負載信息;
[0042] 步驟S305,負載更新模塊更新完負載表調(diào)用反饋調(diào)節(jié)模塊;
[0043] 步驟S306,反饋調(diào)節(jié)模塊根據(jù)負載信息對節(jié)點集合進行劃分,篩選出較輕負載的 節(jié)點集合做為T周期內(nèi)的調(diào)度集,并計算調(diào)度集內(nèi)各節(jié)點的權(quán)值。
[0044] 當有HTTP請求需要處理時,各模塊之間的協(xié)作如下:
[0045] 步驟S307,當有新請求需要調(diào)度服務(wù)器時,worker進程調(diào)用服務(wù)器選擇模塊;
[0046] 步驟S308,服務(wù)器選擇模塊調(diào)用請求解析模塊解析請求;
[0047] 步驟S309,請求解析對請求進行解析;
[0048] 步驟S310,返回請求的動態(tài)靜態(tài)屬性和URL;
[0049] 步驟S311,服務(wù)器選擇模塊執(zhí)行調(diào)度策略,選擇服務(wù)器;
[0050] 步驟S312,返回選定的服務(wù)器節(jié)點的IP地址。
[0051] 在其中一個實施例中,所述調(diào)度集采用如下方式選出:
[0052] 獲取每個節(jié)點的多個負載特征值,得到關(guān)于節(jié)點的負載向量,所述負載向量的維 度值為節(jié)點的負載特征值;
[0053] 通過聚類分析算法,將多個負載向量劃分為多個集合,選擇集合的中心所對應(yīng)維 度值的加權(quán)值最小的集合作為調(diào)度集。
[0054] 聚類分析算法優(yōu)選采用模糊C均值算法,優(yōu)選地,將負載向量分為輕載、中載、重 載三個集合。具體根據(jù)集合中心所對應(yīng)維度值的加權(quán)值進行區(qū)分,加權(quán)值最小的為輕載,其 次為中載,最大為重載。每個維度值的權(quán)重預(yù)先設(shè)定。
[0055] 優(yōu)選地,所述負載特征值包括CPU利用率、內(nèi)存利用率、帶寬利用率或磁盤利用 率。
[0056] 本實施例在負載均衡控制方面利用服務(wù)器的多個指標(CPU利用率,內(nèi)存利用率, 網(wǎng)絡(luò)帶寬利用率,磁盤I/O利用率)做為負載特征,更準確的衡量服務(wù)器的負載情況。
[0057] 本實施例對應(yīng)的負載向量為〈CPU利用率,內(nèi)存利用率,帶寬利用率,磁盤利用率 >。加權(quán)值的計算則為:
[0058] CPU利用率XCPU權(quán)重+內(nèi)存利用率X內(nèi)存權(quán)重+帶寬利用率X帶寬權(quán)重+磁 盤利用率X磁盤權(quán)重。
[0059] 將每個權(quán)重的值寫入配置文件,系統(tǒng)從配置文件中讀取。
[0060] 上述的偽代碼如下:
[0061] 模糊聚類方法的偽代碼如下:
[0062]
[0064] 上述函數(shù)以服務(wù)器節(jié)點表ds_active_set及負載表ds_loadinfo_hash_t為輸入, 以劃分好的節(jié)點集ds_light_set,ds_middle_set,ds_heavy_set為輸出,分別表示輕載節(jié) 點集,中載節(jié)點集,重載節(jié)點集。隸屬度矩陣用于表示每個節(jié)點關(guān)于每個集合的隸屬度,隸 屬度越大表示該節(jié)點越有可能屬于該集合。
[0065] 在其中一個實施例中,所述步驟S102,具體包括:
[0066] 接收到訪問請求,提取出所述訪問請求的URL部分;
[0067] 獲取所述URL部分的文件后綴,如果所述文件后綴為動態(tài)請求文件后綴,則所述 訪問請求為動態(tài)請求,如果所述文件后綴為靜態(tài)請求文件后綴,則所述訪問請求為靜態(tài)請 求。
[0068] 在HTTP請求報文中,通過獲取報文的第一行,即請求行作為URL部分。提取出請 求行后,將請求行中的URL解析出來,從URL則可以判斷出該HTTP請求想要獲取的資源類 型。由資源類型來判斷請求為動態(tài)請求還是靜態(tài)請求。靜態(tài)請求包括的資源類型僅為靜 態(tài)內(nèi)容,靜態(tài)內(nèi)容一般是HTML文檔、圖片、聲音和圖像等文件,其URL文件后綴為.html、. htm、. gif、. JPg、. WS. V和.avi等,而動態(tài)請求所包括的資源類型會包含有動態(tài)內(nèi)容。動態(tài) 頁面的URL -般以? jsp、? asp、? php、? servlet等文件后綴形式出現(xiàn)。
[0069] 在其中一個實施例中:
[0070] 所述步驟S101,還包括:對調(diào)度集內(nèi)的所有節(jié)點,根據(jù)節(jié)點的最大處理能力進行 歸一化處理,得到每個節(jié)點的歸一化權(quán)值,根據(jù)歸一化權(quán)值確定每個節(jié)點在概率空間中的 概率范圍;
[0071] 所述步驟S103的隨機算法為:獲取一個隨機數(shù),確定所述隨機數(shù)在概率空間中的 落點,選擇落點在對應(yīng)概率范圍以內(nèi)的節(jié)點作為所述訪問請求的處理節(jié)點。
[0072] 若請求為動態(tài)請求,臨時計算一個隨機數(shù),判斷隨機數(shù)在概率空間中的落點,確 定調(diào)度的服務(wù)器節(jié)點。若請求為靜態(tài)請求,首先查詢URL映射表,如果有此請求的URL的映 射記錄,則采用該記錄的節(jié)點做為請求的處理節(jié)點;若無此請求的URL記錄,臨時計算一個 隨機數(shù),判斷隨機數(shù)在概率空間中的落點,確定調(diào)度的服務(wù)器節(jié)點,在URL映射表中添加 URL映射記錄。
[0073] 根據(jù)權(quán)值確定概率范圍的方法如下:
[0074] 按權(quán)重從大到小排序,最大權(quán)重與1之間的范圍為最大權(quán)重對應(yīng)節(jié)點的概率范 圍,次最小權(quán)重與0之間的范圍為最小權(quán)重對應(yīng)節(jié)點的概率范圍,其他第i個節(jié)點的概率范 圍為(W i+1,Wi]。
[0075] 例