一致性hash演算法與hash槽

2021-10-07 12:07:17 字數 1535 閱讀 3754

一致性hash演算法是在redis 分片中使用,hash槽在redis cluster(集群)中使用

hash槽:

redis集群(cluster)並沒有使用一致性hash演算法,而是使用hash槽(slot)這個概念,

因為一致性hash演算法對於資料的分布,節點位置的控制不是很好(在設計時應當盡可能的降低分散性)

hash槽是兩個概念

redis 集群(cluster)的hash演算法不是簡單的hash演算法,而是crc16演算法,一種校驗演算法。

槽又是另一種概念,redis cluster包含了16384個hash槽,每個key通過計算後都會落在具體的乙個槽位上而這個槽位屬於哪個儲存節點的由使用者自己定義分配

一致性hash的空間定義成乙個圓環,節點是基於圓環的,所以不能很好對的控制資料分布,因此,hash槽很好的解決了一致性hash的弊端

在容錯性和擴充套件性上,與一致性hash演算法一致,都是對受影響的資料進行轉移。而雜湊槽本質上是對槽位的轉移,把故障節點負責的槽位轉移到其他正常的節點上。擴充套件節點也是一樣,把其他節點上的槽位轉移到新的節點上。

但是對於槽位的轉移和分派,redis 集群不會自動進行(redis分片中的一致性hash可以實現自動遷移——單調性),而需要人工配置的,所以redis集群的高可用是依賴於節點的主從複製與自動故障轉移

一致性hash:

1.新增/移出節點:要求盡可能小的改變原有的對映關係

2.解決了分布式環境下的儲存動態伸縮(彈性)問題

演算法說明

1.對同樣的資料盡興hash運算,所得到的結果必然相同

2.一般條件下hash值的取值範圍 2^32

一致性hash演算法的原理

運算發生在記憶體中,但是資料儲存需要鏈結redis實現set/get操作

一致性hash的特點

1.平衡性:

指hash的結果應該平均分配到各個節點上,這樣從演算法上解決了負載不均的問題

,通過新增虛擬節點實現資料平衡(虛擬節點:為負載小的節點建立虛擬節點)

2.單調性:

單調性是指在新增或者刪除節點上,不影響系統正常執行,其中的資料可以自動的實現遷移

分散性:

指的是資料應該分散的儲存在分布式集群中的各個節點(節點自己可以有備份),不必每個節點都儲存所有的資料

(在設計時盡可能降低分散性,避免負載問題負載:負載是從另乙個角度去討論分散性了,可能出現同乙個位置有不同的key,那麼其取值就是有問題的)

一致性hash演算法 面試必備 一致性hash演算法

最近公司在招人,我們準備的問題中有一道是關於一致性hash演算法的問題,只有一些面試者能夠回答上來,而且答的也不是很全面,有的面試者只是聽說過,有的連聽都沒聽過,下面我把一致性hash演算法整理一下分享給大家 一致性雜湊演算法在1997年由麻省理工學院的karger等人在解決分布式cache中提出的...

一致性hash演算法虛擬節點 一致性hash演算法

hash 演算法也叫做雜湊演算法,他可以讓任意長度的資料m對映成為長度固定的值h。hash演算法的第乙個作用就是資料的快速儲存與查詢。寫過程式的人都知道,基本上主流的程式語言裡面都有個資料結構叫做map dictionary或者 hash table 它是根據key來直接訪問結果的資料結構。key的...

Hash和一致性Hash演算法

hash hash無論是資料結構還是分布式快取,都有應用。hash更確切的說是hash函式,是乙個集合的資料到另乙個集合內資料的乙個對映。被對映方在數學裡面叫做原象,這裡我們叫做資料,對映到的叫象,這裡我們稱作槽。分布式快取伺服器和應用伺服器的區別在於,應用伺服器中的所有伺服器都部署著相同的應用,而...