Cassandra學習筆記之一致性hash回顧

每個節點都有一個哈希值,將這個哈希值配置到圓環上(0到2的32次方),相當於這個圓環分配給了這些節點,每個節點負責一段。數據根據同樣的哈希函數也得到一個哈希值,這個哈希值落到哪一段,就表示這個節點存儲在這段對應的節點上。

每添加或者移除一個新的節點,只有相鄰的那個節點會受到影響,因此,一致性哈希解決了節點變化引起的數據重新分佈問題。

Cassandra1.2以前採用的是這種標準的一致性哈希算法:爲每個節點分配一個token,根據這個token值來決定節點在集羣中的位置以及這個節點所存儲的數據範圍。

由於這種方式會造成數據分佈不均的問題,在Cassandra1.2以後採用了虛擬節點的思想:不需要爲每個節點分配token,把圓環分成更多部分,讓每個節點負責多個部分的數據,這樣一個節點移除後,它所負責的多個token會託管給多個節點處理,這種思想解決了數據分佈不均的問題。


如圖所示,上面部分是標準一致性哈希,每個節點負責圓環中連續的一段,如果Node2突然down掉,Node2負責的數據託管給Node1,即Node1負責EFAB四段,如果Node1裏面有很多熱點用戶產生的數據導致Node1已經有點撐不住了,恰巧B也是熱點用戶產生的數據,這樣一來Node1可能會追隨Node2而去,Node1去了,Node6還hold住嗎?

下面部分是虛擬節點實現,每個節點不再負責連續部分,且圓環被分爲更多的部分。如果Node2突然down掉,Node2負責的數據不全是託管給Node1,而是託管給多個節點。而且也保持了一致性哈希的特點。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章