一致性哈希
一致性哈希設計目標用于解決熱點問題。
一致性哈希需要滿足以下幾個條件: 1:均衡性(Balance),數據應該均勻地分布到所有的緩沖中 2:單調性(Monotonicity),當緩沖發生變化時,能夠保證部分內容被分配到新的緩沖中去(包括原有已分配的內容和新加入的內容) 3:分散性(Spread),由不同終端映射相同內容時,應保證映射到相同的緩沖中,避免發生不一致的情況。 4:負載(Load),能夠盡量降低緩沖的負荷 5:平滑性(Smoothness),服務器的數目平滑改變和緩沖對象的平滑改變。如果通過哈希取余HASH(Object)%N的方式來實現緩存,當某一節點出現故障時,故障節點對應的內容將無法映射到其他節點中,而當新增一節點時,也無法將部分內容映射到新緩沖中,因此不滿足一致性哈希的單調性原則。
為解決上述問題,使用HASH環來實現,按hash后的值查找臨近的緩沖節點,因此無論是刪除還是新增節點,都能保證內容被影射到特定一個緩沖節點上。
?
對于上面的實現方式,存在一個問題,當某個節點被刪除后,該節點上所對應的緩沖范圍將移動到其鄰居節點上,導致其鄰居節點的負載增加;當新增一個節點后,新緩存節點只能分擔其鄰居節點的緩存壓力,不滿足一致性hash的負載性。 為解決節點變動導致的緩存負載問題,可以采用虛擬緩沖節點來處理,將hashkey的范圍均分到很多個虛擬節點上,再將這些虛擬節點映射到緩沖物理節點上,1>當刪除物理節點時,可以將該物理節點對應的虛擬節點均勻地拆分到其余物理節點上;
2>當新增物理節點時,可以將其余各個節點上的虛擬節點拆分一部分到新物理節點上;
轉載于:https://www.cnblogs.com/gaogao67/p/10390757.html
總結
- 上一篇: 浅谈js异步
- 下一篇: Django-5.1 模型层 单表操作