1、技術背景
1.1、技術舉例:memcache
1.2、技術瓶頸
memcached伺服器端本身不提供分布式cache的一致性,由客戶端實現提供。以餘數分布式演算法為例。
餘數分布式演算法是根據新增進入快取時key的hash值通過特定的演算法得出餘數,然後根據餘數對映到關聯的快取伺服器,將該key-value資料儲存到該伺服器
1.2.1、假設有3臺快取伺服器以及它們對應的餘數值
node a:0,3,6,9
node b:1,4,7
node c:2,5,8
1.2.2、此時新增一台伺服器node d
伺服器對應的餘數值發生變化,如下
node a:0,1,2
node b:3,4
node c:5,6
node c:7,8,9
根據上面的變化,發現只有餘數值為0,4,5所對應的快取伺服器沒有發生改變,也就是說其它餘數值對應的快取伺服器發生了改變,即快取失效,如果大量快取失效會嚴重影響系統的效能,也就是快取動盪。針對這樣大片快取失效的技術瓶頸,於是提出了一致性hash演算法。縮小失效快取範圍。
2、一致性hash演算法
2.1、將hash值範圍看成乙個0~232的圓。
2.2、將伺服器節點的hash值對映到該圓上。
2.3、對資料進行快取時,計算key的hash值,然後找到該值在圓上的位置,順時針進行查詢,將資料儲存到第乙個查詢到的伺服器。
2.4、新增乙個快取伺服器,如圖
根據hash一致演算法的對映查詢規則,受影響的快取只有新伺服器的hash值----新伺服器逆時針的第乙個伺服器hash值得範圍,也就這塊區域的快取失效,大大降低了失效範圍。
2.5、當伺服器過少時,會帶來資料傾斜問題
加入只有兩台伺服器a和b,那麼hash範圍如下
node a:0-231
node b:0-232
很容易造成資料堆積在節點a,於是一致性雜湊演算法引入了虛擬節點機制,即對每乙個服務節點計算多個雜湊,每個計算結果位置都放置乙個此服務節點,稱為虛擬節點。具體做法可以在伺服器ip或主機名的後面增加編號來實現。過程如圖
無虛擬節點
引入虛擬節點
一致性Hash演算法原理白話
1 技術背景 1.1 技術舉例 memcache 1.2 技術瓶頸 memcached伺服器端本身不提供分布式cache的一致性,由客戶端實現提供。以餘數分布式演算法為例。餘數分布式演算法是根據新增進入快取時key的hash值通過特定的演算法得出餘數,然後根據餘數對映到關聯的快取伺服器,將該key ...
一致性hash演算法 面試必備 一致性hash演算法
最近公司在招人,我們準備的問題中有一道是關於一致性hash演算法的問題,只有一些面試者能夠回答上來,而且答的也不是很全面,有的面試者只是聽說過,有的連聽都沒聽過,下面我把一致性hash演算法整理一下分享給大家 一致性雜湊演算法在1997年由麻省理工學院的karger等人在解決分布式cache中提出的...
一致性hash演算法虛擬節點 一致性hash演算法
hash 演算法也叫做雜湊演算法,他可以讓任意長度的資料m對映成為長度固定的值h。hash演算法的第乙個作用就是資料的快速儲存與查詢。寫過程式的人都知道,基本上主流的程式語言裡面都有個資料結構叫做map dictionary或者 hash table 它是根據key來直接訪問結果的資料結構。key的...