一種實現(xiàn)集群負載均衡調(diào)度的方法及裝置制造方法
【專利摘要】本發(fā)明公開了一種實現(xiàn)集群負載均衡調(diào)度的方法及裝置,包括:計算集群收到請求包時,設(shè)定散列hash層級為0;根據(jù)請求包及hash層級,確定hash層級對應的服務器;判斷獲得的服務器是否滿足調(diào)度條件,當服務器滿足調(diào)度條件時,則將請求分發(fā)到所述服務器;當服務器不滿足調(diào)度條件時,則hash層級增加1,繼續(xù)確定hash層級對應的服務器,當hash層級超過最大值,則拒絕請求;其中,hash層級的取值范圍為[0,N-1],N為服務器的總個數(shù)。本申請的技術(shù)方案降低了拒絕請求的概率,極大地提高集群資源的利用率。
【專利說明】一種實現(xiàn)集群負載均衡調(diào)度的方法及裝置
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及計算機集群領(lǐng)域,尤指一種實現(xiàn)集群負載均衡調(diào)度的方法及裝置。
【背景技術(shù)】
[0002] 在集群計算中經(jīng)常使用各種負載均衡方法,解決系統(tǒng)的可伸縮性和透明性問題, 即通過負載均衡調(diào)度器將請求高效地分發(fā)到不同的服務器執(zhí)行,使得由多臺獨立計算機組 成的集群系統(tǒng)成為一臺虛擬服務器;客戶端應用程序與集群系統(tǒng)交互時,就像與一臺高性 能的服務器交互一樣。
[0003] 目前,常見的負載均衡調(diào)度方法有輪叫調(diào)度、加權(quán)輪叫調(diào)度、最小連接調(diào)度、加權(quán) 最小連接調(diào)度、基于局部性的最少鏈接、帶復制的基于局部性最少鏈接、目標地址散列調(diào) 度、源地址散列調(diào)度等,其中目標地址散列調(diào)度和源地址散列調(diào)度是比較常見的靜態(tài)調(diào)度 方法,在實際應用中,結(jié)合這兩種調(diào)度方法使用在防火墻集群中,從而保證整個系統(tǒng)有唯一 的出入口。
[0004] 源地址散列調(diào)度算法的基本原理是:根據(jù)請求的源IP地址,作為散列鍵從靜態(tài)分 配的散列表中找出對應的服務器。此算法可以快速有效調(diào)度服務器,同時又能保證相同地 址的請求給調(diào)度相同的服務器。但是,這種方法的問題是,如果一個源地址所hash到的服 務器已超載,則返回空,即拒絕處理后續(xù)的請求,所以當單個服務器負載較大時會使得hash 到該服務器的頻繁請求無法得到處理,這就降低了集群資源的利用率。
【發(fā)明內(nèi)容】
[0005] 為了解決上述技術(shù)問題,本發(fā)明提供了一種實現(xiàn)集群負載均衡調(diào)度的方法及裝 置,可以大大減少拒絕請求的概率,極大地提高集群資源的利用率。
[0006] 為了達到上述發(fā)明目的,本發(fā)明公開了一種實現(xiàn)集群負載均衡調(diào)度的方法,包 括:
[0007] 計算集群收到請求包時,設(shè)定散列hash層級為0 ;
[0008] 根據(jù)請求包及hash層級,確定hash層級對應的服務器;
[0009] 判斷獲得的服務器是否滿足調(diào)度條件,當服務器滿足調(diào)度條件時,則將請求分發(fā) 到所述服務器;當服務器不滿足調(diào)度條件時,則hash層級增加1,繼續(xù)確定hash層級對應 的服務器,當hash層級超過最大值,則拒絕請求;
[0010] 其中,hash層級的取值范圍為[0,N-1],N為服務器的總個數(shù)。
[0011] 進一步地,在計算集群收到請求包時,設(shè)定hash層級為0之前,上述述方法還包 括:建立用于存儲計算集群中的各個服務器信息與索引值的一一對應關(guān)系的ServerNode 表。
[0012] 進一步地,請求包包括:外部用戶的IP地址。
[0013] 進一步地,確定hash層級對應的服務器,包括:
[0014] 通過下面的公式得到服務器的索引值:
[0015] (ip_addr*265443576lUL) % (N - hash 層級);其中,ip_addr 是對應于 IP 地址的 整數(shù),%是取模運算。
[0016] 根據(jù)服務器的索引值,在ServerNode表中找到hash層級對應的服務器。
[0017] 進一步地,調(diào)度條件為:服務器存活、權(quán)值不為0且服務器的連接數(shù)小于2倍的權(quán) 值。
[0018] 本發(fā)明還公開了一種實現(xiàn)集群負載均衡調(diào)度的裝置,包括:設(shè)置模塊、映射模塊、 判斷模塊和分發(fā)模塊;其中,
[0019] 設(shè)置模塊,用于當外部用戶向計算集群發(fā)送請求包時,設(shè)定散列hash層級為0 ;
[0020] 映射模塊,與設(shè)置模塊相連,用于根據(jù)請求包及hash層級,確定hash層級對應的 服務器;
[0021] 判斷模塊,用于判斷獲得的服務器是否滿足調(diào)度條件;
[0022] 分發(fā)模塊,用于當服務器滿足調(diào)度條件時,則將請求分發(fā)到該服務器;
[0023] 所述映射模塊,還用于當服務器不滿足調(diào)度條件時,則hash層級增加1,繼續(xù)確定 hash層級對應的服務器,當hash層級超過最大值,則拒絕請求;
[0024] 其中,hash層級的取值范圍為[0,N_1],N為服務器的總個數(shù)。
[0025] 進一步地,上述裝置還包括存儲模塊,與設(shè)置模塊相連,用于:在計算集群收到請 求包時,設(shè)定hash層級為0之前,建立用于存儲計算集群中的各個服務器信息與索引值的 --對應關(guān)系的ServerNode表。
[0026] 進一步地,請求包包括:外部用戶的IP地址。
[0027] 進一步地,映射模塊具體用于:
[0028] 通過下面的公式得到所述服務器的索引值:
[0029] (ip_addr*265443576lUL) % (N - hash 層級);其中,ip_addr 是對應于所述 IP 地 址的整數(shù),%是取模運算。
[0030] 根據(jù)所述服務器的索引值,在ServerNode表中找到所述hash層級對應的服務器。
[0031] 進一步地,調(diào)度條件為:服務器存活、權(quán)值不為0且服務器的連接數(shù)小于2倍的權(quán) 值。
[0032] 本申請技術(shù)方案包括:當外部用戶向計算集群發(fā)送請求包時,設(shè)定散列hash層級 為〇 ;根據(jù)請求包及hash層級,確定hash層級對應的服務器;判斷獲得的服務器是否滿足 調(diào)度條件,當服務器滿足調(diào)度條件時,則將請求分發(fā)到所述服務器;當服務器不滿足調(diào)度條 件時,則hash層級增加1,繼續(xù)確定hash層級對應的服務器,當hash層級超過最大值,則拒 絕請求;其中,hash層級的取值范圍為[0,N_1],N為服務器的總個數(shù)。本申請的技術(shù)方案 降低了拒絕請求的概率,極大地提高了集群資源的利用率。
【專利附圖】
【附圖說明】
[0033] 此處所說明的附圖用來提供對本發(fā)明的進一步理解,構(gòu)成本申請的一部分,本發(fā) 明的示意性實施例及其說明用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的不當限定。在附圖中: [0034] 圖1為本發(fā)明實現(xiàn)集群負載均衡調(diào)度的方法的流程圖;
[0035] 圖2為本發(fā)明實現(xiàn)集群負載均衡調(diào)度的方法的實施例的流程圖;
[0036] 圖3為本發(fā)明實現(xiàn)集群負載均衡調(diào)度的裝置的結(jié)構(gòu)示意圖。
【具體實施方式】
[0037] 本發(fā)明對已有的源地址散列散列調(diào)度算法進行了改進,引入層級參數(shù)hash層級 (level),用于指定hash層級。當level為0時就是源地址散列調(diào)度所使用的hash函數(shù), 如果level = 0時找不到滿足要求服務器則增加一個level級別繼續(xù)找,如此瀑布式增加 level直到找到滿足要求的服務器,該方法只有當level達到服務器數(shù)量N時才會宣布找不 到滿足要求的服務器,而level達到N值時,表明已經(jīng)遍歷了所有服務器,即所有服務器都 是不滿足要求的服務器。
[0038] 下面結(jié)合附圖及具體實施例對本發(fā)明進行詳細說明。
[0039] 圖1為本發(fā)明實現(xiàn)集群負載均衡調(diào)度的方法的流程圖,如圖1所示,包括:
[0040] 步驟101,計算集群收到請求包時,設(shè)定散列hash層級為0。
[0041] 本步驟中的請求包來自外部網(wǎng)絡(luò)某個用戶向計算集群發(fā)送的,請求包中包括源地 址IP即外部用戶使用的IP地址。
[0042] 在本步驟之前,本發(fā)明方法還包括:建立用于存儲所述計算集群中的各個服務器 信息與索引值的--對應關(guān)系的ServerNode表。
[0043] 其中服務器信息包括:服務器的IP,名稱,內(nèi)存,硬盤。關(guān)于如何建立ServerNode 表屬于本領(lǐng)域技術(shù)人員熟知的公知常識,在此不再贅述。
[0044] 需要說明的是,ServerNode表包含了所有服務器及其信息,且ServerNode表中的 每一個索引值都與ServerNode表中一個服務器對應,即找到索引值,就可以獲得與之對應 的服務器以及該服務器的信息。
[0045] 上述請求包包括:外部用戶的IP地址。
[0046] 步驟102,根據(jù)請求包及hash層級,確定hash層級對應的服務器。
[0047] 具體包括:
[0048] 首先,通過下面的公式得到hash層級對應的服務器的索引值:
[0049] (ip_addr*265443576lUL) % (N - hash 層級);其中,ip_addr 是對應于所述 IP 地 址的整數(shù),%是取模運算。
[0050] 其次,根據(jù)該服務器的索引值,在ServerNode表中找到該hash層級對應的服務 器。
[0051] 需要說明的是,通過上述公式找到服務器的索引值,類似于現(xiàn)有技術(shù)中素數(shù)乘法 hash函數(shù),不同之處,也是本發(fā)明的核心所在:第一個不同是,hash掩碼,即N-hash層級, 不是固定的,而是根據(jù)hash層級變化;第二個不同是,獲取hash層級對應的服務器索引 值不是用與運算而是用取模運算,使得運算更加的簡便,這就大大節(jié)省了運算時間。另外, 2654435761UL是一個全局固定的值,是2到2~32 (4294967296)間接近于黃金分割的素數(shù), 2654435761/4294967296 = 0. 618033987,這樣保證了不同的源地址會盡量分配到不同的 服務器中。
[0052] 可以通過以下方法得到對應的ip_addr :不足三位的域加0補足三位。
[0053] 舉例說明,當IP地址為192. 168. 0. 1時,因為前兩個域均為三位,所以只需補足 后兩個域即可,即第三個域補充兩個〇變成〇〇〇,第四個域補充兩個〇變成001,上述IP 地址轉(zhuǎn)化后得到ip_addr = 192168000001。如共1000臺服務器即N = 1000, IP地址為 192. 168. 0· 1 時,ip_addr = 192168000001,當 hash 層級=0 時,N-hash 層級=1000 - Ο =1000,則(ip_addr*2654435761UL) % (Ν - hash 層級)=192168000001*2654435761% 1000 = 761,即hash到第761臺服務器,當hash層級為1時,N一hash層級=1000 - 1 = 999,則(ip_addr*2654435761UL) % (N - hash 層級)=192168000001*2654435761% 999 =763,即hash到第763臺服務器。
[0054] 步驟103,判斷獲得的服務器是否滿足調(diào)度條件,當服務器滿足調(diào)度條件時,則將 請求分發(fā)到所述服務器;當服務器不滿足調(diào)度條件時,則hash層級增加1,返回步驟102,當 hash層級超過最大值,則拒絕請求。
[0055] 本步驟中,調(diào)度條件為:服務器存活、權(quán)值不為0且服務器的連接數(shù)小于2倍的權(quán) 值。
[0056] 如果服務器的連接數(shù)大于等于2倍的權(quán)值時,則表明服務器已超載。
[0057] 本步驟中需要說明的是,可以使用現(xiàn)有技術(shù)中的心跳檢測技術(shù)判斷當前服務器是 否存活,此處不再贅述。服務器的權(quán)值與連接數(shù)保存在調(diào)度器中,權(quán)值指保存在調(diào)度器可人 工編輯的各服務器額定的連接數(shù),可以人工設(shè)置,并且在調(diào)度時可以實時的更新各個服務 器的連接數(shù),連接數(shù)是指與服務器相連的外部用戶的個數(shù),可以實時修改。采用現(xiàn)有技術(shù)中 源地址散列調(diào)度算法中的方法獲得及更新各個服務器的權(quán)值與連接數(shù)。
[0058] 上述方法中,hash層級的取值范圍為[0, N-l],N為服務器的總個數(shù)。
[0059] 本發(fā)明方法只有當level達到服務器數(shù)量N時才會宣布找不到滿足要求的服務 器,而level達到N (服務器的總的個數(shù))值時,表明已經(jīng)遍歷了所有服務器,即所有服務器 都是不滿足要求的服務器,因此該方法是一個最優(yōu)的調(diào)度算法,同時該算法能繼承源地址 散列調(diào)度算法的優(yōu)點,即具有調(diào)度局部性,在服務器的負載基本平衡情況下,將相同IP地 址的請求調(diào)度到同一臺服務器,提高了各臺服務器的訪問局部性和主存命中率,從而提高 了整個集群系統(tǒng)的處理能力。
[0060] 圖2為本發(fā)明實現(xiàn)集群負載均衡調(diào)度的方法的實施例的流程圖,如圖2所示,包括 以下步驟:
[0061] 步驟201,計算集群收到請求包時,設(shè)定散列hash層級為0。
[0062] 步驟202,根據(jù)請求包及hash層級,確定hash層級對應的服務器。
[0063] 本步驟與步驟102相同,在此不再贅述。
[0064] 步驟203,判斷服務器是否滿足調(diào)度條件,若滿足調(diào)度條件,轉(zhuǎn)入步驟204,若服務 器不滿足調(diào)度條件,則轉(zhuǎn)入步驟205。
[0065] 本步驟中的調(diào)度條件與步驟103中的要求相同。
[0066] 步驟204,將請求分發(fā)到服務器。至此分發(fā)任務完成,結(jié)束。
[0067] 步驟205, hash層級增加1。轉(zhuǎn)入步驟206。
[0068] 步驟206,判斷hash層級是否超過最大值,若超過最大值,則轉(zhuǎn)入步驟207 ;若未超 過最大值,則返回步驟202。
[0069] 上述hash層級的取值范圍為[0, N-l],N為服務器的總個數(shù)。
[0070] 步驟207,拒絕請求。
[0071] 圖3為本發(fā)明實現(xiàn)集群負載均衡調(diào)度的裝置的結(jié)構(gòu)示意圖,如3所示,包括:設(shè)置 模塊、映射模塊、判斷模塊和分發(fā)模塊。其中,
[0072] 設(shè)置模塊,用于計算集群收到請求包時,設(shè)定散列hash層級為0。
[0073] 設(shè)置模塊接收來自外部網(wǎng)絡(luò)某個用戶向計算集群發(fā)送的請求包,請求包中包括源 地址IP即外部用戶使用的IP地址,設(shè)置模塊將IP地址以及hash層級發(fā)送給映射模塊。
[0074] 映射模塊,與設(shè)置模塊相連,用于根據(jù)請求包及hash層級,確定hash層級對應的 服務器。
[0075] 進一步地,上述映射模塊具體用于:
[0076] 通過下面的公式得到上述服務器的索引值:
[0077] (ip_addr*265443576lUL) % (N - hash 層級);其中,ip_addr 是對應于所述 IP 地 址的整數(shù),%是取模運算。
[0078] 根據(jù)所述服務器的索引值,在ServerNode表中找到上述hash層級對應的服務器。
[0079] 需要說明的是,通過上述公式找到服務器的索引值,類似于現(xiàn)有技術(shù)中素數(shù)乘法 hash函數(shù),不同之處,也是本發(fā)明的核心所在:第一個不同是,hash掩碼,即N-hash層級, 不是固定的,而是根據(jù)hash層級變化;第二個不同是,獲取hash層級對應的服務器索引 值不是用與運算而是用取模運算,使得運算更加的漸變,這就大大節(jié)省了運算時間。另外, 2654435761UL是一個全局固定的值,是2到2~32 (4294967296)間接近于黃金分割的素數(shù), 2654435761/4294967296 = 0. 618033987,這樣保證了不同的源地址會盡量分配到不同的 服務器中。
[0080] 可以通過以下方法得到對應的ip_addr :不足三位的域加0補足三位。
[0081] 舉例說明,當IP地址為192. 168. 0. 1時,因為前兩個域均為三位,所以只需補足 后兩個域即可,即第三個域補充兩個〇變成〇〇〇,第四個域補充兩個〇變成001,上述IP 地址轉(zhuǎn)化后得到ip_addr = 192168000001。如共1000臺服務器即N = 1000, IP地址為 192. 168. 0· 1 時,ip_addr = 192168000001,當 hash 層級=0 時,N-hash 層級=1000 - 0 =1000,則(ip_addr*2654435761UL) % (N - hash 層級)=192168000001*2654435761% 1000 = 761,即hash到第761臺服務器,當hash層級為1時,N一hash層級=1000 - 1 = 9",則(ip_addr*265443576lUL)% (N - hash 層級)=192168〇00001*2654435761%"9 =763,即hash到第763臺服務器。
[0082] 判斷模塊,用于判斷獲得的服務器是否滿足調(diào)度條件。
[0083] 上述調(diào)度條件包括:該服務器存活、權(quán)值不為0且所述服務器的連接數(shù)小于2倍的 權(quán)值。
[0084] 如果服務器的連接數(shù)大于等于2倍的權(quán)值時,則表明服務器已超載。
[0085] 需要說明的是,可以使用現(xiàn)有技術(shù)中的心跳檢測技術(shù)判斷當前服務器是否存活, 此處不再贅述。服務器的權(quán)值與連接數(shù)保存在調(diào)度器中,權(quán)值指保存在調(diào)度器可人工編輯 的各服務器額定的連接數(shù),并且在調(diào)度時可以實時的更新各個服務器的連接數(shù),連接數(shù)是 指與服務器相連的外部用戶的個數(shù)。采用現(xiàn)有技術(shù)中源地址散列調(diào)度算法中的方法獲得及 更新各個服務器的權(quán)值與連接數(shù)。
[0086] 分發(fā)模塊,用于當服務器滿足調(diào)度條件時,則將請求分發(fā)到該服務器。
[0087] 上述映射模塊,還用于當服務器不滿足調(diào)度條件時,則hash層級增加1,繼續(xù)確定 hash層對應的服務器,當hash層級超過最大值,則拒絕請求。
[0088] 上述裝置中,hash層級的取值范圍為[0,N_1],N為服務器的總個數(shù)。
[0089] 上述裝置還包括:存儲模塊,與設(shè)置模塊相連,用于:在計算集群收到請求包時, 設(shè)定hash層級為0之前,建立用于存儲所述計算集群中的各個服務器信息與索引值的一一 對應關(guān)系的ServerNode表。
[0090] 其中服務器信息包括:服務器的IP,名稱,內(nèi)存,硬盤。關(guān)于如何建立ServerNode 表屬于本領(lǐng)域技術(shù)人員熟知的公知常識,在此不再贅述。
[0091] 需要說明的是,ServerNode表包含了所有服務器及其信息,且ServerNode表中的 每一個索引值都與ServerNode表中一個服務器對應,即找到索引值,就可以獲得與之對應 的服務器以及該服務器的信息。
[0092] 本領(lǐng)域普通技術(shù)人員可以理解上述方法中的全部或部分步驟可通過程序來指令 相關(guān)硬件完成,所述程序可以存儲于計算機可讀存儲介質(zhì)中,如只讀存儲器、磁盤或光盤 等。可選地,上述實施例的全部或部分步驟也可以使用一個或多個集成電路來實現(xiàn)。相應 地,上述實施例中的各模塊/單元可以采用硬件的形式實現(xiàn),也可以采用軟件功能模塊的 形式實現(xiàn)。本申請不限制于任何特定形式的硬件和軟件的結(jié)合。
[〇〇93] 以上所述,僅為本發(fā)明的較佳實例而已,并非用于限定本發(fā)明的保護范圍。凡在本 發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范 圍之內(nèi)。
【權(quán)利要求】
1. 一種實現(xiàn)集群負載均衡調(diào)度的方法,其特征在于,包括: 計算集群收到請求包時,設(shè)定散列hash層級為0 ; 根據(jù)請求包及hash層級,確定hash層級對應的服務器; 判斷獲得的服務器是否滿足調(diào)度條件,當服務器滿足調(diào)度條件時,則將請求分發(fā)到所 述服務器;當服務器不滿足調(diào)度條件時,則hash層級增加1,繼續(xù)確定hash層級對應的服 務器,當hash層級超過最大值,則拒絕請求; 其中,hash層級的取值范圍為[0, N-l],N為服務器的總個數(shù)。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,在所述計算集群收到請求包時,設(shè)定hash 層級為〇之前,所述方法還包括:建立用于存儲所述計算集群中的各個服務器信息與索引 值的--對應關(guān)系的ServerNode表。
3. 根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述請求包包括:外部用戶的IP地 址。
4. 根據(jù)權(quán)利要求3所述的方法,其特征在于,所述確定hash層級對應的服務器,包括: 通過下面的公式得到所述服務器的索引值: (ip_addr*2654435761UL)% (N - hash 層級);其中,ip_addr 是對應于所述 IP 地址的 整數(shù),%是取模運算; 根據(jù)所述服務器的索引值,在ServerNode表中找到所述hash層級對應的服務器。
5. 根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述調(diào)度條件為:所述服務器存活、 權(quán)值不為〇且所述服務器的連接數(shù)小于2倍的權(quán)值。
6. -種實現(xiàn)集群負載均衡調(diào)度的裝置,其特征在于,包括:設(shè)置模塊、映射模塊、判斷 模塊和分發(fā)模塊;其中 設(shè)置模塊,用于當外部用戶向計算集群發(fā)送請求包時,設(shè)定散列hash層級為0 ; 映射模塊,與設(shè)置模塊相連,用于根據(jù)請求包及hash層級,確定hash層級對應的服務 器; 判斷模塊,用于判斷獲得的服務器是否滿足調(diào)度條件; 分發(fā)模塊,用于當服務器滿足調(diào)度條件時,則將請求分發(fā)到所述服務器; 所述映射模塊,還用于當服務器不滿足調(diào)度條件時,則hash層級增加 1,繼續(xù)確定hash 層級對應的服務器,當hash層級超過最大值,則拒絕請求; 其中,hash層級的取值范圍為[0, N-l],N為服務器的總個數(shù)。
7. 根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述裝置還包括存儲模塊,與設(shè)置模塊相 連,用于:在所述計算集群收到請求包時,設(shè)定hash層級為0之前,建立用于存儲所述計算 集群中的各個服務器信息與索引值的--對應關(guān)系的ServerNode表。
8. 根據(jù)權(quán)利要求6或7所述的裝置,其特征在于,所述請求包包括:外部用戶的IP地 址。
9. 根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述映射模塊具體用于: 通過下面的公式得到所述服務器的索引值: (ip_addr*2654435761UL)% (N - hash 層級);其中,ip_addr 是對應于所述 IP 地址的 整數(shù),%是取模運算; 根據(jù)所述服務器的索引值,在ServerNode表中找到所述hash層級對應的服務器。
10.根據(jù)權(quán)利要求6或7所述的裝置,其特征在于,所述調(diào)度條件為:所述服務器存活、 權(quán)值不為〇且所述服務器的連接數(shù)小于2倍的權(quán)值。
【文檔編號】H04L12/803GK104104611SQ201410327814
【公開日】2014年10月15日 申請日期:2014年7月10日 優(yōu)先權(quán)日:2014年7月10日
【發(fā)明者】辛永欣 申請人:浪潮(北京)電子信息產(chǎn)業(yè)有限公司