本發(fā)明屬于集群服務(wù)器技術(shù)領(lǐng)域,尤其涉及一種基于hash算法的服務(wù)器均衡方法。
背景技術(shù):
隨著互聯(lián)網(wǎng)快速的發(fā)展,互聯(lián)網(wǎng)用戶的不斷增加,單服務(wù)肯定不能滿足服務(wù)的需求,集群服務(wù)模式已經(jīng)逐漸普及,使用集群服務(wù)器做后臺,一個主要的問題就是解決負載均衡問題。而傳統(tǒng)的均衡算法主要是持續(xù)性和非持續(xù)性的服務(wù)器均衡,持續(xù)性就是特定的客戶端發(fā)出請求將由同一服務(wù)器服務(wù),持續(xù)算法主要基于隨機理論,即其默認客戶的訪問是隨機的,從而服務(wù)器的選擇也是隨機的,以此來實現(xiàn)負載均衡,持續(xù)性算法的缺點在于其不易于動態(tài)的更新,比如使用IP地址的hash值進行分配,剛好某個IP非常平凡的請求服務(wù),而這些服務(wù)將被定向到同一服務(wù)器,很容易出現(xiàn)服務(wù)器熱點的情況;非持續(xù)算法如輪詢算法對于每一次請求,一次選擇服務(wù)器組的下一個服務(wù)器,算法簡單易實現(xiàn),適用于所有服務(wù)器在軟硬件配置相當?shù)那闆r,如果不同的服務(wù)器在處理能力上差別很大,該算法效果會很差,導(dǎo)致處理能力強的服務(wù)器空閑而處理能力弱的服務(wù)器一直吃力處理請求。
分布式集群中,對機器的添加或者刪除以及機器發(fā)生故障需要脫離集群這些操作都是分布式集群管理的基本功能,常規(guī)算法hash(obj)%m算法,在機器添加或刪除后,會有很多原有的數(shù)據(jù)無法找到違反了數(shù)據(jù)單調(diào)性原則,同樣如果集群機器被刪除,而對象分配出現(xiàn)失衡(例如:三臺集群服務(wù)器server1、server2、server3,obj1存儲在server1,obj2存儲在server2,obj3、obj4存儲在server3。當服務(wù)器server2被刪除時,obj1存儲在server1,obj2、obj3、obj4存儲在server3),這樣就造成集群對象服務(wù)器分布非常不平衡,造成了服務(wù)器負載的不均衡。
技術(shù)實現(xiàn)要素:
本發(fā)明的發(fā)明目的是:為了解決現(xiàn)有技術(shù)中存在的以上問題,本發(fā)明提出了一種解決集群服務(wù)器數(shù)據(jù)單調(diào)性和平衡性的基于hash算法的服務(wù)器均衡方法。
本發(fā)明的技術(shù)方案是:一種基于hash算法的服務(wù)器均衡方法,包括:
A、構(gòu)建集群服務(wù)器環(huán)境的數(shù)據(jù)環(huán)形空間;
B、獲取步驟A中集群服務(wù)器環(huán)境中的對象集,采用hash算法分別計算每一個對象集的key值;
C、根據(jù)步驟B中計算得到的key值將對應(yīng)對象散列到步驟A中構(gòu)建的數(shù)據(jù)環(huán)形空間中;
D、獲取步驟A中集群服務(wù)器的對應(yīng)服務(wù)器的serverkey,將服務(wù)器的serverkey轉(zhuǎn)換為映射空間地址,將對應(yīng)服務(wù)器映射到步驟A中構(gòu)建的數(shù)據(jù)環(huán)形空間中;并采用順時針方式將對象與服務(wù)器進行關(guān)聯(lián);
E、當對服務(wù)器進行增刪時,采用順時針遷移方式對服務(wù)器上的對象進行遷移,實現(xiàn)服務(wù)器均衡。
進一步地,所述步驟E對服務(wù)器進行刪除時,計算該服務(wù)器上對象的hash值,采用順時針遷移方法將對象映射到相近的服務(wù)器上。
進一步地,所述步驟E對服務(wù)器進行增添時,將實際負載服務(wù)節(jié)點復(fù)制形成虛擬節(jié)點,分別計算虛擬節(jié)點的hash值并將虛擬節(jié)點映射到數(shù)據(jù)環(huán)形空間中;再采用hash算法分別對象的key值,并采用順時針遷移方法將各個對象分布到虛擬節(jié)點上。
本發(fā)明的有益效果是:本發(fā)明采用hash算法很好的將對象映射到對應(yīng)的服務(wù)上,避免了大量數(shù)據(jù)的遷移,減小了服務(wù)器壓力,使服務(wù)器集群在面臨大數(shù)據(jù)量、高并發(fā)系統(tǒng)性能方面得到很好的處理;同時通過配置虛擬節(jié)點有效降低了負載服務(wù)器的不平衡性,提高了服務(wù)器節(jié)點的利用率。
附圖說明
圖1是本發(fā)明的基于hash算法的服務(wù)器均衡方法流程示意圖。
圖2是本發(fā)明實施例中采用hash算法分別計算每一個對象集的key值的流程示意圖。
圖3是本發(fā)明實施例中將對應(yīng)對象散列到數(shù)據(jù)環(huán)形空間中示意圖。
圖4是本發(fā)明實施例中將服務(wù)器映射到數(shù)據(jù)環(huán)形空間中示意圖。
圖5是本發(fā)明實施例中刪除服務(wù)器示意圖。
圖6是本發(fā)明實施例中增添服務(wù)器示意圖。
具體實施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進行進一步詳細說明。應(yīng)當理解,此處所描述的具體實施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
如圖1所示,為本發(fā)明的基于hash算法的服務(wù)器均衡方法流程示意圖。一種基于hash算法的服務(wù)器均衡方法,包括:
A、構(gòu)建集群服務(wù)器環(huán)境的數(shù)據(jù)環(huán)形空間;
B、獲取步驟A中集群服務(wù)器環(huán)境中的對象集,采用hash算法分別計算每一個對象集的key值;
C、根據(jù)步驟B中計算得到的key值將對應(yīng)對象散列到步驟A中構(gòu)建的數(shù)據(jù)環(huán)形空間中;
D、獲取步驟A中集群服務(wù)器的對應(yīng)服務(wù)器的serverkey,將服務(wù)器的serverkey轉(zhuǎn)換為映射空間地址,將對應(yīng)服務(wù)器映射到步驟A中構(gòu)建的數(shù)據(jù)環(huán)形空間中;并采用順時針方式將對象與服務(wù)器進行關(guān)聯(lián);
E、當對服務(wù)器進行增刪時,采用順時針遷移方法對服務(wù)器上的對象進行遷移,實現(xiàn)服務(wù)器均衡。
在步驟A中,本發(fā)明首先構(gòu)建集群服務(wù)器環(huán)境的數(shù)據(jù)環(huán)形空間,具體為一個長度為2^32的整數(shù)hash環(huán),根據(jù)節(jié)點name,hash(name)分布為[0,2^32-1]將服務(wù)器節(jié)點放置于hash環(huán)上。
在步驟B中,如圖2所示,為本發(fā)明實施例中采用hash算法分別計算每一個對象集的key值的流程示意圖。本發(fā)明根據(jù)集群程序邏輯,初始化5個服務(wù)器處理對象分別為:obj1、obj2、obj3、obj4、obj5,從而獲取得到步驟A中集群服務(wù)器環(huán)境中的需要映射的對象集obj1\obj2\obj3\obj4\obj5;本發(fā)明再設(shè)置變量a、b,采用hash算法分別計算每一個對象集的key值,具體為:
在步驟C中,如圖3所示,為本發(fā)明實施例中將對應(yīng)對象散列到數(shù)據(jù)環(huán)形空間中示意圖。本發(fā)明根據(jù)步驟B中計算得到的key值將對應(yīng)對象散列到步驟A中構(gòu)建的數(shù)據(jù)環(huán)形空間中,這里的散列算法具體為:
char*value=’key1’;int key1=((((((32*(int)’k’+32)*(int)’e’)+32*(int)’y’+32)*32)+(int)’1’
從而依次得到對應(yīng)對象的key2、key3、key4、key5,根據(jù)對應(yīng)的key值映射入數(shù)據(jù)環(huán)形空間中。由于本身hash數(shù)據(jù)空間環(huán)不會發(fā)生變化,只需算出對象的hash值就能很快的定為到對應(yīng)的服務(wù)器中直接找到對象的真正儲存位置。
在步驟D中,如圖4所示,為本發(fā)明實施例中將服務(wù)器映射到數(shù)據(jù)環(huán)形空間中示意圖。本發(fā)明以3個集群服務(wù)器server1、server2、server3進行說明,分別獲取對應(yīng)服務(wù)器的serverkey,并根據(jù)散列算法轉(zhuǎn)換得到最終的映射空間地址hash值serverkey1、serverkey2、serverkey3,將對應(yīng)的集群服務(wù)器映射入數(shù)據(jù)環(huán)形空間中,具體為:
將集群服務(wù)器映射到數(shù)據(jù)環(huán)形空間后,采用hash算法順時針方式將對象與服務(wù)器進行關(guān)聯(lián)。
在步驟E中,本發(fā)明可以針對從集群服務(wù)器中刪除服務(wù)器和增添服務(wù)器到集群服務(wù)器中的兩種情況進行處理。
對服務(wù)器進行刪除時,計算該服務(wù)器上對象的hash值,采用順時針遷移方法將對象映射到相近的服務(wù)器上。如圖5所示,為本發(fā)明實施例中刪除服務(wù)器示意圖。例如集群服務(wù)器server2出現(xiàn)故障刪除,基于對象hash算法采用順時針遷移方法,key4、key5將會遷移到服務(wù)器節(jié)點server3上,其余節(jié)點數(shù)據(jù)不變。
對服務(wù)器進行增添時,將實際負載服務(wù)節(jié)點復(fù)制形成虛擬節(jié)點,分別計算虛擬節(jié)點的hash值并將虛擬節(jié)點映射到數(shù)據(jù)環(huán)形空間中;再采用hash算法分別對象的key值,并采用順時針遷移方法將各個對象分布到虛擬節(jié)點上。如圖6所示,為本發(fā)明實施例中增添服務(wù)器示意圖。例如需要接入一臺新的服務(wù)器server4,通過虛擬節(jié)點的hash算法,將實際負載服務(wù)節(jié)點復(fù)制,形成一個個復(fù)制服務(wù)虛擬節(jié)點(replica),類似server1-1、server2-1、server2-2、server3-1等虛擬節(jié)點,通過虛擬節(jié)點和實際節(jié)點的轉(zhuǎn)換獲取對象數(shù)據(jù)信息。
1)構(gòu)建虛擬節(jié)點的hash計算方法,計算出相應(yīng)的虛擬節(jié)點的hash值;
2)將通過計算出的虛擬節(jié)點hash值將虛擬節(jié)點映射進hash數(shù)據(jù)空間中;
3)通過對象hash算法獲取對象key,順時針將各個對象分布到服務(wù)器節(jié)點或虛擬節(jié)點上按照hash值排列法將虛擬節(jié)點映射到hash數(shù)據(jù)空間中;
通過上述計算方法計算出server4的hash值serverkey4,根據(jù)serverkey4將服務(wù)器節(jié)點映射入數(shù)據(jù)空間中,對象節(jié)點key5將基于hash算法順時針遷移到新的服務(wù)器節(jié)點server4上。
本領(lǐng)域的普通技術(shù)人員將會意識到,這里所述的實施例是為了幫助讀者理解本發(fā)明的原理,應(yīng)被理解為本發(fā)明的保護范圍并不局限于這樣的特別陳述和實施例。本領(lǐng)域的普通技術(shù)人員可以根據(jù)本發(fā)明公開的這些技術(shù)啟示做出各種不脫離本發(fā)明實質(zhì)的其它各種具體變形和組合,這些變形和組合仍然在本發(fā)明的保護范圍內(nèi)。