版權聲明: 本文由 一只博客 發表于?bloghome博客
文章鏈接:?https://www.bloghome.com.cn/user/cnn237111
關于一致性哈希算法,網上有很多博文都有講解。推薦2個。
http://blog.codinglabs.org/articles/consistent-hashing.html
http://blog.csdn.net/cywosp/article/details/23397179
總結一下:
網上博文的例子都將hash值的結果定義在0 - 232-1,實際上也是非必要的,你可以設定的比這個范圍小,或者比這個范圍大,都是可以的,重要的是它是一個環。
2.一致性哈希并不保證節點被映射的均衡性,假設哈希值是均衡的,那么節點要被均衡的映射,就必須讓各個節點之間的距離相等,也就是說各個節點平分環的周長。
3.當存在故障節點后,一致性哈希并不保證故障節點上的值能通過算法恢復(除非已實現主備機制)
4.當故障節點被移除,故障節點的下一個節點的壓力會增加(如果各個節點的壓力是均衡的,那么壓力增加1倍)。
5.當插入新節點,一致性哈希算法并不能避免重新hash步驟,但是不需要把所有的數據都重新hash一遍,只需要hash一部分。這種方式將hash的范圍減到最小,僅僅是將新節點的前一個節點的一部分數據,歸還給新節點。
6,當哈希算法的值不均衡時,環上的各個節點的壓力也是不均衡的??梢圆捎锰砑犹摂M節點的方式,使平衡??梢栽跓狳c節點的后面,插入多個虛擬節點,一旦映射落到虛擬節點上,再通過其他的hash算法,映射到壓力較低的節點。采用的算法可以是簡單粗暴,比如舉個栗子:
如下圖,在沒有虛擬節點的時候,假設由于hash算法的不均衡性,落在節點4和節點5的hash值特別多,勢必造成節點5的壓力比較大,而此時如果節點6和節點2的壓力有比較小,那么在節點4和節點5之間插入2個虛擬節點(節點a和節點b),根據一致性哈希的算法,節點a和節點5之間的hash值落到節點5上,節點a和節點b的hash值落在節點a上,節點b和節點4之間的hash落在節點b上。但是節點a和節點b是虛擬節點,因此可以強制的讓節點a映射到節點6,節點b強制映射到節點2,這樣,節點5的壓力會減輕,從而使得所有節點負載相對均衡。
以上是一些總結,如有不對,歡迎指出糾正。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。