一致性HASH

分布式緩存作為緩存水平擴(kuò)充的最佳辦法病曾,當(dāng)前很實(shí)用。
假設(shè)一臺(tái)機(jī)器可支撐4GB的數(shù)據(jù)的緩存钳降,如果需要支撐24GB厚宰,則需要6臺(tái)機(jī)器,采用分布式緩存后遂填,當(dāng)用戶登錄時(shí)铲觉,系統(tǒng)行為就會(huì)如下:


Paste_Image.png

從而可見,對(duì)于分布式緩存而言吓坚,需要解決的是NodeA和NodeB在操作同一用戶在登錄信息時(shí)能到分布式緩存集群的同一機(jī)器上操作撵幽。最簡(jiǎn)單的方法是對(duì)于用戶ID進(jìn)行HASH,根據(jù)HASH對(duì)緩存機(jī)器取模礁击,這種方法為HASH取模盐杂,缺點(diǎn)是當(dāng)前緩存集群機(jī)器發(fā)生增減時(shí)會(huì)出現(xiàn)大量緩存未命中的現(xiàn)象。(緩存節(jié)點(diǎn)HA的除外)

一致性HASH可緩解上述問題哆窿。
原理
① 求出緩存集群機(jī)器的HASH值链烈,分布在一個(gè)2的32次方的圓環(huán)上
②緩存Key存儲(chǔ)時(shí)同理求出HASH,亦分布在上面的圓環(huán)上
③順時(shí)針尋找第一個(gè)圓環(huán)上的節(jié)點(diǎn)機(jī)器作為存儲(chǔ)機(jī)器

好處
增減Cache集群機(jī)器時(shí)挚躯,影響的Cache值僅僅只是節(jié)點(diǎn)逆時(shí)針方向的一小段范圍Key

下面引入理論詳解:
環(huán)形Hash空間
按照常用的hash算法來(lái)將對(duì)應(yīng)的key哈希到一個(gè)具有232次方個(gè)桶的空間中强衡,即0~(232)-1的數(shù)字空間中。現(xiàn)在我們可以將這些數(shù)字頭尾相連码荔,想象成一個(gè)閉合的環(huán)形漩勤。如下圖


把數(shù)據(jù)通過(guò)一定的hash算法處理后映射到環(huán)上
現(xiàn)在我們將object1、object2缩搅、object3越败、object4四個(gè)對(duì)象通過(guò)特定的Hash函數(shù)計(jì)算出對(duì)應(yīng)的key值,然后散列到Hash環(huán)上誉己。如下圖:
Hash(object1) = key1眉尸;
Hash(object2) = key2域蜗;
Hash(object3) = key3巨双;
Hash(object4) = key4噪猾;

將機(jī)器通過(guò)hash算法映射到環(huán)上
在采用一致性哈希算法的分布式集群中將新的機(jī)器加入,其原理是通過(guò)使用與對(duì)象存儲(chǔ)一樣的Hash算法將機(jī)器也映射到環(huán)中(一般情況下對(duì)機(jī)器的hash計(jì)算是采用機(jī)器的IP或者機(jī)器唯一的別名作為輸入值)筑累,然后以順時(shí)針的方向計(jì)算袱蜡,將所有對(duì)象存儲(chǔ)到離自己最近的機(jī)器中。
假設(shè)現(xiàn)在有NODE1慢宗,NODE2坪蚁,NODE3三臺(tái)機(jī)器,通過(guò)Hash算法得到對(duì)應(yīng)的KEY值镜沽,映射到環(huán)中敏晤,其示意圖如下:
Hash(NODE1) = KEY1;
Hash(NODE2) = KEY2;
Hash(NODE3) = KEY3;

通過(guò)上圖可以看出對(duì)象與機(jī)器處于同一哈希空間中缅茉,這樣按順時(shí)針轉(zhuǎn)動(dòng)object1存儲(chǔ)到了NODE1中嘴脾,object3存儲(chǔ)到了NODE2中,object2蔬墩、object4存儲(chǔ)到了NODE3中译打。在這樣的部署環(huán)境中,hash環(huán)是不會(huì)變更的拇颅,因此奏司,通過(guò)算出對(duì)象的hash值就能快速的定位到對(duì)應(yīng)的機(jī)器中,這樣就能找到對(duì)象真正的存儲(chǔ)位置了樟插。

機(jī)器的刪除與添加
普通hash求余算法最為不妥的地方就是在有機(jī)器的添加或者刪除之后會(huì)照成大量的對(duì)象存儲(chǔ)位置失效韵洋,這樣就大大的不滿足單調(diào)性了。下面來(lái)分析一下一致性哈希算法是如何處理的黄锤。

  1. 節(jié)點(diǎn)(機(jī)器)的刪除
    以上面的分布為例麻献,如果NODE2出現(xiàn)故障被刪除了,那么按照順時(shí)針遷移的方法猜扮,object3將會(huì)被遷移到NODE3中勉吻,這樣僅僅是object3的映射位置發(fā)生了變化,其它的對(duì)象沒有任何的改動(dòng)旅赢。如下圖:


    Paste_Image.png
  2. 節(jié)點(diǎn)(機(jī)器)的添加
    如果往集群中添加一個(gè)新的節(jié)點(diǎn)NODE4齿桃,通過(guò)對(duì)應(yīng)的哈希算法得到KEY4,并映射到環(huán)中煮盼,如下圖:


    Paste_Image.png

    通過(guò)按順時(shí)針遷移的規(guī)則短纵,那么object2被遷移到了NODE4中,其它對(duì)象還保持這原有的存儲(chǔ)位置僵控。通過(guò)對(duì)節(jié)點(diǎn)的添加和刪除的分析香到,一致性哈希算法在保持了單調(diào)性的同時(shí),還是數(shù)據(jù)的遷移達(dá)到了最小,這樣的算法對(duì)分布式集群來(lái)說(shuō)是非常合適的悠就,避免了大量數(shù)據(jù)遷移千绪,減小了服務(wù)器的的壓力。

平衡性
根據(jù)上面的圖解分析梗脾,一致性哈希算法滿足了單調(diào)性和負(fù)載均衡的特性以及一般hash算法的分散性荸型,但這還并不能當(dāng)做其被廣泛應(yīng)用的原由,因?yàn)檫€缺少了平衡性炸茧。下面將分析一致性哈希算法是如何滿足平衡性的瑞妇。hash算法是不保證平衡的,如上面只部署了NODE1和NODE3的情況(NODE2被刪除的圖)梭冠,object1存儲(chǔ)到了NODE1中辕狰,而object2、object3控漠、object4都存儲(chǔ)到了NODE3中柳琢,這樣就照成了非常不平衡的狀態(tài)。在一致性哈希算法中润脸,為了盡可能的滿足平衡性柬脸,其引入了虛擬節(jié)點(diǎn)。
——“虛擬節(jié)點(diǎn)”( virtual node )是實(shí)際節(jié)點(diǎn)(機(jī)器)在 hash 空間的復(fù)制品( replica )毙驯,一實(shí)際個(gè)節(jié)點(diǎn)(機(jī)器)對(duì)應(yīng)了若干個(gè)“虛擬節(jié)點(diǎn)”倒堕,這個(gè)對(duì)應(yīng)個(gè)數(shù)也成為“復(fù)制個(gè)數(shù)”,“虛擬節(jié)點(diǎn)”在 hash 空間中以hash值排列爆价。
以上面只部署了NODE1和NODE3的情況(NODE2被刪除的圖)為例垦巴,之前的對(duì)象在機(jī)器上的分布很不均衡,現(xiàn)在我們以2個(gè)副本(復(fù)制個(gè)數(shù))為例铭段,這樣整個(gè)hash環(huán)中就存在了4個(gè)虛擬節(jié)點(diǎn)骤宣,最后對(duì)象映射的關(guān)系圖如下:


根據(jù)上圖可知對(duì)象的映射關(guān)系:object1->NODE1-1,object2->NODE1-2序愚,object3->NODE3-2憔披,object4->NODE3-1。通過(guò)虛擬節(jié)點(diǎn)的引入爸吮,對(duì)象的分布就比較均衡了芬膝。那么在實(shí)際操作中,正真的對(duì)象查詢是如何工作的呢形娇?對(duì)象從hash到虛擬節(jié)點(diǎn)到實(shí)際節(jié)點(diǎn)的轉(zhuǎn)換如下圖:

“虛擬節(jié)點(diǎn)”的hash計(jì)算可以采用對(duì)應(yīng)節(jié)點(diǎn)的IP地址加數(shù)字后綴的方式锰霜。例如假設(shè)NODE1的IP地址為192.168.1.100。引入“虛擬節(jié)點(diǎn)”前桐早,計(jì)算 cache A 的 hash 值:
Hash(“192.168.1.100”);
引入“虛擬節(jié)點(diǎn)”后癣缅,計(jì)算“虛擬節(jié)”點(diǎn)NODE1-1和NODE1-2的hash值:
Hash(“192.168.1.100#1”); // NODE1-1
Hash(“192.168.1.100#2”); // NODE1-2

理論轉(zhuǎn)自:
http://blog.csdn.net/cywosp/article/details/23397179

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末厨剪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子友存,更是在濱河造成了極大的恐慌祷膳,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件爬立,死亡現(xiàn)場(chǎng)離奇詭異钾唬,居然都是意外死亡万哪,警方通過(guò)查閱死者的電腦和手機(jī)侠驯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)奕巍,“玉大人吟策,你說(shuō)我怎么就攤上這事〉闹梗” “怎么了檩坚?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)诅福。 經(jīng)常有香客問我匾委,道長(zhǎng),這世上最難降的妖魔是什么氓润? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任赂乐,我火速辦了婚禮,結(jié)果婚禮上咖气,老公的妹妹穿的比我還像新娘挨措。我一直安慰自己,他們只是感情好崩溪,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布浅役。 她就那樣靜靜地躺著,像睡著了一般伶唯。 火紅的嫁衣襯著肌膚如雪觉既。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天乳幸,我揣著相機(jī)與錄音奋救,去河邊找鬼。 笑死反惕,一個(gè)胖子當(dāng)著我的面吹牛尝艘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播姿染,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼背亥,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼秒际!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起狡汉,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤娄徊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后盾戴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寄锐,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年尖啡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了橄仆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡衅斩,死狀恐怖盆顾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情畏梆,我是刑警寧澤您宪,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站奠涌,受9級(jí)特大地震影響宪巨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜溜畅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一捏卓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧达皿,春花似錦天吓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至汤功,卻和暖如春物邑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背滔金。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工色解, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人餐茵。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓科阎,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親忿族。 傳聞我的和親對(duì)象是個(gè)殘疾皇子锣笨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容