一致性hash算法

簡介

先構(gòu)造一個長度為2^32的整數(shù)環(huán)(這個環(huán)被稱為一致性Hash環(huán))隆嗅,根據(jù)節(jié)點名稱的Hash值(其分布為[0, 2^32 - 1])將服務(wù)器節(jié)點放置在這個Hash環(huán)上,然后根據(jù)數(shù)據(jù)的Key值計算得到其Hash值(其分布也為[0, 2^32 - 1])箩做,接著在Hash環(huán)上順時針查找距離這個Key值的Hash值最近的服務(wù)器節(jié)點婉宰,完成Key到服務(wù)器的映射查找貌笨。

FNV1_32_HASH

分布相對均勻耳奕、效率中等

private static int getHash(String str)
    {
          final int p = 16777619;
          int hash = (int)2166136261L;
          for (int i = 0; i  < str.length();i ++)
               hash = (hash ^ str.charAt(i)) * p;
          hash += hash ;
          hash ^= hash >> 7;
          hash += hash ;
          hash ^= hash >> 17;
          hash += hash ;
    if (hash ) {
       hash = Math.abs(hash);
    }
    return hash;
  }

實現(xiàn)

為了保證即使增刪節(jié)點也能均勻分布,增加虛擬節(jié)點的概念盆顾,虛擬節(jié)點需要映射到真實節(jié)點上
一種實現(xiàn)方式是:比如真實節(jié)點為192.168.1.1:9527怠褐,配置3個虛擬節(jié)點,那么需要向hash環(huán)添加的節(jié)點為

192.168.1.1:9527#1
192.168.1.1:9527#2
192.168.1.1:9527#3

數(shù)據(jù)結(jié)構(gòu)存儲使用TreeMap您宪,紅黑樹實現(xiàn)奈懒,查詢效率高奠涌,代碼如下:

private static String getServer(String node) {
     int hash = getHash(node);
     # >= hash
     int firstKey = sortedMap.tailMap(hash).firstKey();
     String vNode = subMap.get(firstKey);
     return vNode.subString(0,  vNode.indexOf("#"));
  }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市磷杏,隨后出現(xiàn)的幾起案子溜畅,更是在濱河造成了極大的恐慌,老刑警劉巖极祸,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件慈格,死亡現(xiàn)場離奇詭異,居然都是意外死亡遥金,警方通過查閱死者的電腦和手機浴捆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來汰规,“玉大人汤功,你說我怎么就攤上這事物邑×锵” “怎么了?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵色解,是天一觀的道長茂嗓。 經(jīng)常有香客問我,道長科阎,這世上最難降的妖魔是什么述吸? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮锣笨,結(jié)果婚禮上蝌矛,老公的妹妹穿的比我還像新娘。我一直安慰自己错英,他們只是感情好入撒,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著椭岩,像睡著了一般茅逮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上判哥,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天献雅,我揣著相機與錄音,去河邊找鬼塌计。 笑死挺身,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的锌仅。 我是一名探鬼主播瞒渠,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼良蒸,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了伍玖?” 一聲冷哼從身側(cè)響起嫩痰,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎窍箍,沒想到半個月后串纺,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡椰棘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年纺棺,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片邪狞。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡祷蝌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出帆卓,到底是詐尸還是另有隱情巨朦,我是刑警寧澤,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布剑令,位于F島的核電站糊啡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏吁津。R本人自食惡果不足惜棚蓄,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望碍脏。 院中可真熱鬧梭依,春花似錦、人聲如沸典尾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽急黎。三九已至扎狱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間勃教,已是汗流浹背淤击。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留故源,地道東北人污抬。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親印机。 傳聞我的和親對象是個殘疾皇子矢腻,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351

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