11.redis cluster的hash slot算法和一致性 hash 算法、普通hash算法的介紹


分布式尋址算法

  • hash 算法(大量緩存重建)
  • 一致性 hash 算法(自動緩存遷移)+ 虛擬節點(自動負載均衡)
  • redis cluster 的 hash slot 算法

一、hash 算法


來了一個請求,首先對key計算 hash 值,然后對節點數取模。然后打在不同的 master 節點上。

  • 存在的問題

一旦某一個 master 節點宕機,所有新請求都會基於最新的剩余 master 節點數去取模,嘗試去取數據,而取不到有效緩存,導致大量的流量涌入數據庫。


二、一致性 hash 算法


將整個 hash 值空間組織成一個虛擬的圓環,整個空間按順時針方向組織,下一步將各個 master 節點(使用服務器的 ip 或主機名)進行 hash。這樣就能確定每個節點在其哈希環上的位置。
首先計算可以的hash 值,並確定此數據在環上的位置,從此位置沿環順時針“行走”,遇到的第一個 master 節點就是 key 所在位置。

  • 優勢

在一致性哈希算法中,如果一個節點掛了,受影響的數據僅僅是此節點到環空間前一個節點(沿着逆時針方向行走遇到的第一個節點)之間的數據,其它不受影響。增加一個節點也同理。

  • 存在的問題

一致性哈希算法在節點太少時,容易因為節點分布不均勻而造成緩存熱點的問題。

  • 應對方案

為了解決這種熱點問題,一致性 hash 算法引入了虛擬節點機制,即對每一個節點計算多個 hash,每個計算結果位置都放置一個虛擬節點。這樣就實現了數據的均勻分布,負載均衡。


三、redis cluster 的 hash slot 算法(虛擬桶)


redis cluster 有固定的 16384 個 hash slot,對每個 key 計算 CRC16 值,然后對 16384 取模,可以獲取 key 對應的 hash slot。

redis cluster 中每個 master 都會持有部分 slot,比如有 3 個 master,那么可能每個 master 持有 5000 多個 hash slot。
hash slot 讓 node 的增加和移除很簡單:

  • 增加一個 master,就將其他 master 的 hash slot 移動部分過去,

  • 減少一個 master,就將它的 hash slot 移動到其他 master 上去。

優勢

移動 hash slot 的成本是非常低的。客戶端的 api,可以對指定的數據,讓他們走同一個 hash slot,通過 hash tag 來實現。

任何一台機器宕機,另外兩個節點,不影響的。因為 key 找的是 hash slot,不是機器。

參考:https://www.jianshu.com/p/90b3de6288c6


免責聲明!

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



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