用於KV集羣的一致性哈希Consistent Hashing機制

KV集羣的請求分發

假定N爲後臺服務節點數,當前臺攜帶關鍵字key發起請求時,咱們一般將key進行hash後採用模運算 hash(key)%N 來將請求分發到不一樣的節點上, 後臺節點的增刪會引發幾乎全部key的從新映射, 這樣會形成大量的數據遷移,若是數據量大的話會致使服務不可用.算法

一致性哈希機制

我傾向於稱之爲一致性哈希機制而不是算法, 由於這其實和算法沒太大關係. 設計這種機制的目的是當節點增減時儘可能減少從新映射的key的數量, 儘可能將key還映射到原來的節點上. 而對於一致性哈希機制, 若是集羣有K個key映射到N個節點, 那麼在增刪節點時引發的key的遷移不會超過K/N個.數組

一致性哈希的原理

一致性哈希機制的原理, 是將集羣節點分佈到一個圓上, 各節點預設一個key, 這些key的hash值集中後可獲得一個數組, 將該數組排序後首尾相連造成一個圓, 節點的key分佈在圓的不一樣弧段上.設計

對於請求的key, 其hash值會落入該圓的某一弧段, 按順時針方向碰見的第一個節點即爲其對應節點.排序

減小節點: 若是刪除某一節點, 或者是這個節點故障宕機了, 以前映射到這個節點的key, 會順時針移到下一個節點, 而其餘弧段不受影響.hash

增長節點: 與減小節點相似, 新的節點會加入到某一個弧段中, 這樣原來這個弧段對應的一部分key, 則會落入新加入的節點.集羣

減小熱點

因爲業務數據的不均或者是哈希算法的緣由, 會形成一些熱點節點. 能夠經過如下方式減輕節點的熱點現象後臺

虛擬節點 Replica原理

虛擬節點是創建在物理節點之上的一種邏輯節點, 目的是爲了將物理節點負責的弧段打散並儘可能均勻(或隨機)分佈在整個圓上. 實現方式爲: 對每個物理節點, 爲其建立M個虛擬節點後再加入圓環. 由於這些虛擬節點的key獲得的hash值是分散的, 因此其在圓環上的分佈也是分散的, 在全部的虛擬節點都加入圓環後, 每一個物理節點實際上都在圓上分散地控制了M段圓弧. 請求

對於請求的key, 其hash值會映射到某一個虛擬節點, 而熱點區域的虛擬節點實際上底下對應的是多個物理節點, 這樣就將熱點分散到了不一樣的物理節點上.數據

哈希槽 Hash Slot

這是Redis集羣的作法, 實際上是虛擬節點的一種特殊形式. 針對使用的哈希算法, 在一開始就將哈希值拆分爲1024或更多個小區間, 這些小區間就是哈希槽, 這些哈希槽會映射到不一樣的節點. 在節點減小前, 須要將這個節點的哈希槽分配給其餘節點, 在增長節點時, 須要將其餘節點的哈希槽挪一部分過來. 經過調整哈希槽在各個物理節點間的分配能夠對熱點進行分散.

相關文章
相關標籤/搜索