【分散式】一致性雜湊 Distributed Hash Table 學習筆記
阿新 • • 發佈:2018-11-06
目錄
- 一致性雜湊介紹
- 一致性雜湊原理
- 一致性雜湊應用
1、一致性雜湊介紹
一致性雜湊,英文:distributed hashtable, 簡稱DHT, 是麻省理工提出的一種演算法,該演算法可以有效解決分散式儲存結構下動態增加和刪除節點帶來的問題。
2、一致性雜湊原理
- 我們把全量的快取空間當做一個環形儲存結構。環形空間總共分成2^32個快取區,在Redis中則是把快取key分配到16384個slot。
- 每一個快取key都可以通過Hash演算法轉化為一個32位的二進位制數,也就對應著環形空間的某一個快取區。我們把所有的快取key對映到環形空間的不同位置。
- 我們的每一個快取節點(Shard)也遵循同樣的Hash演算法,比如利用IP做Hash,對映到環形空間當中。
- 如何讓key和節點對應起來呢?很簡單,每一個key的順時針方向最近節點,就是key所歸屬的儲存節點。所以圖中key1儲存於node1,key2,key3儲存於node2,key4儲存於node3。
- 增加節點:當快取叢集的節點有所增加的時候,整個環形空間的對映仍然會保持一致性雜湊的順時針規則,所以有一小部分key的歸屬會受到影響。有哪些key會受到影響呢?圖中加入了新節點node4,處於node1和node2之間,按照順時針規則,從node1到node4之間的快取不再歸屬於node2,而是歸屬於新節點node4。因此受影響的key只有key2。最終把key2的快取資料從node2遷移到node4,就形成了新的符合一致性雜湊規則的快取結構。
- 當快取叢集的節點需要刪除的時候(比如節點掛掉),整個環形空間的對映同樣會保持一致性雜湊的順時針規則,同樣有一小部分key的歸屬會受到影響。有哪些key會受到影響呢?圖中刪除了原節點node3,按照順時針規則,原本node3所擁有的快取資料就需要“託付”給node3的順時針後繼節點node1。因此受影響的key只有key4。最終把key4的快取資料從node3遷移到node1,就形成了新的符合一致性雜湊規則的快取結構。
- node節點不均勻的處理情況,則使用虛擬節點處理,node1新增 虛擬節點node1-1, 虛擬節點node1-2 ; node2新增 虛擬節點node2-1, 虛擬節點node2-2;
3、一致性雜湊應用
- 分散式快取系統
- 水平分庫分表