一致性Hash


緣起

我有一個圖片存取服務,為了快速獲取圖片,我架起了3台緩存服務器,用簡單的Hash映射決定圖片存儲在哪台緩存上。比如:

f(x) % 3 = 0 存儲在s0上

f(x) % 3 = 1 存儲在s1上

f(x) % 3 = 2存儲在s2上

某天,緩存負載過高,需要擴容1台,緩存數量由3變為4,那么按獲取圖片按公式:f(x) % n,很多會請求失敗,這樣會直接訪問后台服務,給后台服務造成很大的壓力,可能造成雪崩。

是否有這樣的算法,解決分布式緩存中,解決簡單Hash隨緩存服務器伸縮,造成大面積緩存失效的問題

 

緩存穿透

 

 

介紹 

一致性哈希算法在1997年由麻省理工學院提出,是一種特殊的哈希算法,目的是解決分布式緩存的問題,解決了簡單哈希算法在分布式哈希表中存在的動態伸縮等問題

原理

引入Hash環

假如有3個節點,三個節點位於環的不同位置

具體的值,根據Hash值取余環的大小,順時針方向找到最近的節點就是具體的存儲節點

比如:f(x1)存儲在Node1, f(x2)存儲在node2, f(x3)存儲在Node0

 

此時,如果加入了節點Node4,那么原來指向Node2的紅色箭頭部分,緩存會失效,變成存儲在Node4

如:f(x2)存儲在Node4

 

可以看到的效果是:當緩存服務器數量發生伸縮時,只有部分緩存失效

實現

圓環大小:232,由來:整數4B=4*8bit(32位無符號整形),值從0~232 -1

每個節點位置:hash(ip) % 232

存儲的key位置:hash(key) % 232

使用場景

在分布式系統中一致性hash起着不可忽略的地位,無論是分布式緩存,還是分布式Rpc框架的負載均衡策略都有所使用。

優缺點

優點:在分布式緩存中

  • 冗余少
  • 負載均衡
  • 過渡平滑
  • 存儲均衡
  • 關鍵詞單調

缺點:可能存在Hash偏斜,如

 

解決策略

虛擬節點

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM