大綱
hash取餘演算法
判定雜湊演算法好壞的四個定義
一致性hash演算法的兩大設計
hash(object.key)%n,hash值隨object.key、n的變化而變化。
如果有節點(集群中節點增減太正常)發生變化,幾乎重新分配,意味著所有已經分配好的資料都要遷移到新的節點上。
1、平衡性(balance):平衡性是指雜湊的結果能夠盡可能分布在所有的緩衝(cache)中去,這樣可以使得所有的緩衝空間得到利用。很多雜湊演算法都能夠滿足這一條件。
2、單調性(monotonicity):單調性是指如果已經有一些內容通過雜湊分派到了相應的緩衝中,又有新的緩衝加入到系統中。雜湊的結果應該能夠保證原有已分配的內容可以被對映到原有的或者新的緩衝中去,而不會對映到舊的緩衝集合中的其他緩衝區。
3、分散性(spread):在分布式環境中,終端有可能看不到所有的緩衝,而只能看到其中的一部分。當終端希望通過雜湊過程將內容對映到緩衝上去,由於不同終端所見的緩衝範圍有可能不同,從而導致雜湊的結果不一致,最終的結果是相同的內容被不同的終端對映到不同的緩衝區中。這種情況顯然是應該避免的,因為它導致相同內容被儲存到不同緩衝中去,降低了系統儲存的效率。分散性的定義就是上述情況發生的嚴重程度。好的雜湊演算法應該能夠盡量避免不一致的情況發生,也就是盡量降低分散性。
4、負載(load):負載問題實際上是從另乙個角度看待分散性問題。既然不同的終端可能將相同的內容對映到不同的緩衝區中,那麼對於乙個特定的緩衝區而言,也可能被不同的使用者對映到不同的內容。與分散性一樣,這種情況也是應當避免的,因此好的雜湊演算法應能夠盡量降低緩衝的負荷。
總結如下:
平衡性——盡量分散
單調性——已經分配的不要換地方
分散性、負載——需要避免
1.hash環(或hash桶)的設計——解決平衡性的問題
這個環的空間非常大,從0~2^32-1,按照相同的hash演算法分別計算物件和伺服器(一般情況下對機器的hash計算是採用機器的ip或者唯一的別名作為輸入值)的hash值,然後以順時針的方向計算,將所有物件儲存到離自己最近的機器中。節點刪除或新增也只需要遷移少量離自己距離比較近的資料。
虛擬節點(virtual node)是實際節點(機器)在hash空間的複製品(replica),乙個實際節點對應了若干個「虛擬節點」,這個對應個數也稱為「複製個數」,「虛擬節點」在hash空間中以hash值排列。
「虛擬節點」的hash計算可以採用對應節點的ip位址加數字字尾的方式。
一致性hash演算法 面試必備 一致性hash演算法
最近公司在招人,我們準備的問題中有一道是關於一致性hash演算法的問題,只有一些面試者能夠回答上來,而且答的也不是很全面,有的面試者只是聽說過,有的連聽都沒聽過,下面我把一致性hash演算法整理一下分享給大家 一致性雜湊演算法在1997年由麻省理工學院的karger等人在解決分布式cache中提出的...
一致性hash演算法虛擬節點 一致性hash演算法
hash 演算法也叫做雜湊演算法,他可以讓任意長度的資料m對映成為長度固定的值h。hash演算法的第乙個作用就是資料的快速儲存與查詢。寫過程式的人都知道,基本上主流的程式語言裡面都有個資料結構叫做map dictionary或者 hash table 它是根據key來直接訪問結果的資料結構。key的...
一致性Hash演算法原理白話
1 技術背景 1.1 技術舉例 memcache 1.2 技術瓶頸 memcached伺服器端本身不提供分布式cache的一致性,由客戶端實現提供。以餘數分布式演算法為例。餘數分布式演算法是根據新增進入快取時key的hash值通過特定的演算法得出餘數,然後根據餘數對映到關聯的快取伺服器,將該key ...