一致性hash理解
一句話解釋:當新增或者刪除節點時,原有的數據能夠保舊的數據能夠按照老算法映射到數據所在的服務器,而新的數據能夠按照新的散列算法映射到數據所在的服務器。
問題
- 原有的hash算法,當新增或者減少節點時,會導致近乎全局的數據移動。如果用在緩存中,那麼大量的緩存會在某個時刻失效,將會導致系統的震盪。
解決
- 一致性hash。
- 一致性hash算法提出了在動態變化的Cache環境中,判定哈希算法好壞:
- 平衡性:結果儘可能均勻分佈
- 單調性:新增或刪除節點不會影響原有的分配
- 分散性:相同內容被hash到不同的節點的嚴重程度,應儘可能避免
- 負載:對於一個特定的分區可能被不同端映射爲不同的內容
引入問題
- 一致性hash能夠較好的解決單調性、分散性和負載的問題,但是沒有很好的解決平衡性。當其中一臺機器掛了,它的數據統一遷移到另一臺機器後可能引起另一臺機器超負荷,從而導致機器服務的雪崩。
解決
- 可以通過“虛擬節點”解決一致性hash平衡性的問題。
- 虛擬節點的具體實現