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