一致性哈希算法應用與分析


  一致性哈希算法主要使用在分布式數據存儲系統中,按照一定的策略將數據盡可能均勻分布到所有的存儲節點上去,使得系統具有良好的負載均衡性能和擴展性。感覺一致性哈希與數據結構中的“循環隊列”還是有一點聯系的。

1.簡單哈希算法

  哈希(hash)計箅是常見的數據分布技術,其通過求模運算來計算哈希值,然后據此將數據映射到存儲空間中。由於只是采用了簡單的求模運算.使得簡單哈希計算存在很多不足:
  1)增刪市點時,更新效率低。當系統中存儲節點數量發生增加或減少時,映射公式將發生變化為hash(object)%(N±1),這將使得所有obiect的映射位置發生變化,整個系統數據對象的映射位置都需要重新進行計算,系統無法對外界訪問進行正常響應,將導致系統處於崩潰狀態。

  2)平衡性差,未考慮節點性能差異。由於硬件性能的提升,新添加的節點具有更好的承載能力,如何對算法進行改進,使節點性能可以得到較好利用。

  3)單調性不足。衡量數據分布技術的一項重要指標是單調性,單調性是指如果已經有一些內容通過哈希計算分派到了相應的緩沖中,當又有新的緩沖加入到系統中時,哈希的結果應能夠保證原有已分配的內容可以被映射到新的緩沖中去,而不會被映射到舊的緩沖集合中的其他緩沖區。

2.一致性哈希算法的工作原理

2.1 數據保存

  一致性哈希,是對簡單哈希算法進行了修正,它的原理分為兩步。

  首先,對“存儲節點”的哈希值進行計算,其將存儲空間抽象為一個。如下圖中的1、2、3三個節點就可以理解為三個可以存儲數據的“存儲節點”。其次,對要存儲的數據進行同樣的哈希計算,按順時針方向將其映射到離其最近的節點上去。  

 2.2 節點失效情況

   當有存儲節點出現故障離線時,按照映射方法,受影響的僅僅為從環上故障節點開始逆時針方向至前一個節點之間區間的數據對象。而這些對象本身就是映射到故障節點之上的。

  例如在存儲節點4出現故障時,只會影響那些數據的哈希值在存儲節點3到存儲節點4哈希值之間的數據節點,影響不會進一步擴大。

  

2.3增加存儲節點時

  當有節點增加時,比如,在存儲節點2和存儲節點3之間重新添加一個存儲節點5。受影響的也僅僅是存儲節點5逆時針遍歷直到存儲節點2之間的數據對象,將這些重新映射到5上即可,因此,當有節點出現變動時,不會使得整個存儲空間上的數據都進行重新映射。解決了簡單哈希算法增刪節點,重新映射所有數據帶來的效
率低下的問題。

3.虛擬節點的概念

  一致性哈希算法具有隨機性。當存儲節點數量較少時節點在環上分布不夠均勻。為解決這個問題,提出了基於虛擬節點的改進算法,其核心思路是引入虛擬節點。

  每個虛擬節點都有一個對應的物理節點,而每個物理節點可以對應若干個虛擬節點。

  在2.1的圖中有存儲節點1、2、3、4可以看出分布不均勻。假定四個存儲節點型號相同,可以說節點4的負載量最小的,節點3最大。為了負載均衡,可以由物理存儲節點來引入了虛擬節點4''',如下圖所示。可以將虛擬節點理解為一個“符號標記”,按照2.1中的規則將數據的保存在存儲節點上,只是應在虛擬節點保存的數據實際保存在對應的物理節點4上。這樣就在一定程度上解決了負載均衡

  

  


免責聲明!

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



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