對一致性hash原理的理解


一致性hash算法解決的核心問題是,當solt數發生變化的時候能夠盡量少的移動數據。該算法最早在《Consistent Hashing and Random Trees:Distributed Caching Protocols for Relieving Hot Spots on the World Wide Web》一文中被提出。它能夠在添加/移除一台緩存服務器的時候,盡可能小的改變已存在key的映射關系,避免大量key的重新映射。

原理

一致性hash算法將Hash函數的值域空間組織成一個大的圓環,假設Hash函數的值域空間為0~ 2^32-1(即HASH值是一個32位的無符號整數),整個值域空間按照順時針方向進行組織,然后對相應的服務器節點進行hash,將它們映射到HASH環上,假設有四台服務器,分別是node1,node2,node3,node4,它們在環上的位置如下圖所示:

接下來使用相同的hash函數,計算出對應key的hash值在環上的對應位置,根據一致性hash算法,按照順時針方向,分布在node1和node2之間的key,它們的請求會被定位到node2上,node2和node4之間的key,會被定位到node4上,以此類推。

假設有新節點node5進來,它被hash到node2和node4之間,如下圖,受影響的只是node2和node5之間的節點,它們被映射到node5上,其他key的映射不會改變

當然上面只是一種理想的情況,各個節點的分布十分的均勻,正常情況下,當節點數量較少的時候,節點的分布可能十分的不均勻,從而導致數據訪問的傾斜,大量的key被映射到同一台服務器上。為了避免這種情況發生,可以引入虛擬節點機制,對每個服務器節點都計算出多個hash值,每個hash值對應環上一個位置,該節點稱為虛擬節點,而key的映射方式不變,只是多個一步從虛擬幾點映射到實際節點的操作,這樣如果虛擬節點數量足夠多,即使實際節點很少,也能使得key的分布足夠均衡


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM