改進一致性hash演算法

2022-08-29 19:27:13 字數 950 閱讀 4489

value = hash(key), value是乙個32位的資料。

假設開始儲存資料的server有n個,資料需要均勻的存放在這n個節點上。可以簡單的通過value %(n + 1)來決定這個值存放在哪個server上。如下圖所示:

資料會均勻的分布在n個server上,但是這種結構碰到乙個節點掛了會是乙個什麼過程呢?

這個時候所有的資料都會重新hash,再分配一次,不僅掛掉的那台機器上的資料需要分布上剩餘的(n - 1)臺機器上,原有的資料也會重新分配,很明顯傳統hash策略很大的乙個弊端就是壞掉乙個節點後需要遷移大量的資料。為此有人提出了雜湊一致性演算法。

將所有的雜湊值組成乙個圓環,即 0 -> (2^32 - 1) -> 0 這樣的乙個圓環。n個server 均勻的分布在這個圓環上,即有n個點,落在這個兩個點之間的值,按照順時針方向獲取需要存放的server。如下圖所示:

如果節點一壞掉的話,根據上面的原則,節點1的資料會轉移到節點2上,而其他節點的資料是沒有任何變化的。所以需要遷移的資料比上乙個方案要小很多。但是,這裡也有乙個問題,萬一碰巧,很多資料的hash值都集中在了節點1和節點2之間,那麼節點2的資料將會非常的大,這種情況對於節點少的場景非常容易出現,對於這種情況,又有人提出了基於虛擬節點的改進雜湊一致性演算法。

上圖中,server一共就兩個,如果按照(2)中的方法,整個環上就兩個節點,容易造成某個節點資料過多,現在給n1和n2賦予6多個副本,也就是虛擬節點,然後按照n1 -> n2 -> n1 -> n2 ... 的方式放在hash環上。這樣就可以有效的避免單節點資料過多問題。

一致性hash演算法 面試必備 一致性hash演算法

最近公司在招人,我們準備的問題中有一道是關於一致性hash演算法的問題,只有一些面試者能夠回答上來,而且答的也不是很全面,有的面試者只是聽說過,有的連聽都沒聽過,下面我把一致性hash演算法整理一下分享給大家 一致性雜湊演算法在1997年由麻省理工學院的karger等人在解決分布式cache中提出的...

一致性hash演算法虛擬節點 一致性hash演算法

hash 演算法也叫做雜湊演算法,他可以讓任意長度的資料m對映成為長度固定的值h。hash演算法的第乙個作用就是資料的快速儲存與查詢。寫過程式的人都知道,基本上主流的程式語言裡面都有個資料結構叫做map dictionary或者 hash table 它是根據key來直接訪問結果的資料結構。key的...

一致性hash演算法

july部落格16章開始 第一題 全排列,輸入乙個字串,列印出該字串中字元的所有排列 1.個人思路 回溯法建立的排序樹 2.july部落格 遞迴實現,依次固定第乙個字母,後面的交換,和上面描述的使用回溯法相似 c stl 演算法 next permutation的思想,關於next permutat...