負(fù)載均衡 | hash slot算法

hash slot

redis cluster 有固定的 16384 個 hash slot把夸,對每個 key 計算 CRC16 值恋日,然后對 16384 取模,可以獲取 key 對應(yīng)的 hash slot岂膳。

HASH_SLOT = CRC16(key) mod 16384

為什么選擇mod 16384呢磅网?

In our tests CRC16 behaved remarkably well in distributing different kinds of keys evenly across the 16384 slots

官網(wǎng)說:在測試中發(fā)現(xiàn),使用CRC16算法計算出來的key可以在16384個槽中均勻分布簸喂。

用一個例子看看hash slot是怎么實現(xiàn)的:

我們假設(shè)現(xiàn)在有3個節(jié)點已經(jīng)組成了集群燎潮,分別是:A, B, C 三個節(jié)點,它們可以是一臺機器上的三個端口确封,也可以是三臺不同的服務(wù)器再菊。那么颜曾,采用hash slot的方式來分配16384個slot 的話,它們?nèi)齻€節(jié)點分別承擔(dān)的slot 區(qū)間是:

  • 節(jié)點A覆蓋0-5460;
  • 節(jié)點B覆蓋5461-10922;
  • 節(jié)點C覆蓋10923-16383.
v2-a1fd8ac5e0c77fd3d257fb0c5f0a71fd_720w.jpg

節(jié)點上使用bitmap記錄各自的hash slot绿语。

那么候址,現(xiàn)在我想設(shè)置一個key, 比如叫my_name:

set my_name *****

hash slot:CRC16('my_name')%16384 = 2412。 那么就會把這個key 的存儲分配到 A 上了岗仑。

我想獲取my_name

get my_name

會出現(xiàn)兩種情況:

  1. client剛好直接訪問到Node A,Node A查詢自己的hash slot表稳其,發(fā)現(xiàn)key->my_name在自己節(jié)點中,接著處理命令既鞠,獲取my_name的值返回客戶端盖文。
  2. client訪問到Node B或者Node C,發(fā)現(xiàn)key->my_name在Node A中五续,返回MOVED error。然后client重定向到該節(jié)點
GET my_name
-MOVED 2412 127.0.0.1:6381

ps: client也可以緩存各節(jié)點的hash slot map

新增一個Node D:

從各個節(jié)點的前面各拿取一部分slot到Node D上

  • 節(jié)點A覆蓋1365-5460
  • 節(jié)點B覆蓋6827-10922
  • 節(jié)點C覆蓋12288-16383
  • 節(jié)點D覆蓋0-1364,5461-6826,10923-12287

同樣刪除一個節(jié)點也是類似凶伙,移動完成后就可以刪除這個節(jié)點了函荣。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末扳肛,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子敞峭,更是在濱河造成了極大的恐慌,老刑警劉巖旋讹,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異睦疫,居然都是意外死亡,警方通過查閱死者的電腦和手機蛤育,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來底洗,“玉大人,你說我怎么就攤上這事亥揖∈ダ眨” “怎么了费变?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵挚歧,是天一觀的道長吁峻。 經(jīng)常有香客問我,道長橙困,這世上最難降的妖魔是什么耕餐? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮肠缔,結(jié)果婚禮上哼转,老公的妹妹穿的比我還像新娘。我一直安慰自己壹蔓,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布披摄。 她就那樣靜靜地躺著亲雪,像睡著了一般义辕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上灌砖,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天基显,我揣著相機與錄音,去河邊找鬼续镇。 笑死,一個胖子當(dāng)著我的面吹牛摸航,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播酱虎,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼读串,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了恢暖?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤杰捂,失蹤者是張志新(化名)和其女友劉穎棋蚌,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谷暮,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡湿弦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蔬充。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡娃惯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出愕提,到底是詐尸還是另有隱情,我是刑警寧澤浅侨,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布证膨,位于F島的核電站,受9級特大地震影響央勒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜崔步,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望灶似。 院中可真熱鬧,春花似錦瑞你、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽甥厦。三九已至,卻和暖如春舶赔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工疚鲤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留缘挑,地道東北人。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓诲宇,卻偏偏與公主長得像,于是被迫代替她去往敵國和親姑蓝。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,864評論 2 354

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

  • 目錄 1、redis cluster介紹 2颅筋、最老土的hash算法和弊端(大量緩存重建) 3宙暇、一致性hash算法(...
    天堂鳥6閱讀 1,025評論 0 0
  • 1.1 Redis集群的設(shè)計原則和初衷 在官方文檔Cluster Spec中客给,作者詳細(xì)介紹了Redis集群為什么要...
    Flame_1109閱讀 2,139評論 1 5
  • 前言 Redis 是我們目前大規(guī)模使用的緩存中間件靶剑,由于它強大高效而又便捷的功能,得到了廣泛的使用桩引。單節(jié)點的Red...
    Kevin_ZGJ閱讀 11,681評論 19 133
  • 轉(zhuǎn)自:https://www.zybuluo.com/phper/note/195558 前言 redis 是我們...
    yannhuang閱讀 1,683評論 0 2
  • 久違的晴天厘灼,家長會。 家長大會開好到教室時设凹,離放學(xué)已經(jīng)沒多少時間了。班主任說已經(jīng)安排了三個家長分享經(jīng)驗闪朱。 放學(xué)鈴聲...
    飄雪兒5閱讀 7,523評論 16 22