前幾天看了一下Memcached,看到Memcached的分布式演算法時,知道了一種Consistent Hashing的雜湊演算法,上網搜了一下,大致瞭解了一下這個演算法,做下記錄。
資料均衡分布技術在分布式儲存系統中非常重要,資料分布越均勻,系統的總體效能就越好。
簡單的雜湊演算法:以K取餘法,這種演算法雖然簡單,但難以滿足單調性要求,並且平衡性差,增刪節點時更新效率低。當系統中儲存節點數量發生增加或者減少時,整個系統的資料對象的映射位置都要重新進行計算,嚴重影響了緩衝的命中率,可能會導致系統無法對外界進行正常的響應,從而導致崩潰。
一致性雜湊演算法(Consisteng Hashing):首先,它將儲存空間抽象為一個環,將儲存節點配置到環上。環上所有的節點都有一個值。然後,對資料進行雜湊計算,按順時針方向將其映射到離其最近的節點上去。這樣,當有節點出現故障時,按照演算法的 映射方法,只有在故障節點逆時針方向到上一個節點的距離受影響。增加儲存節點時也是新增的儲存節點逆時針到上一個節點之間受影響。這樣很好地解決了簡單雜湊演算法增刪節點,重新對應所有資料帶來的效率低下的問題。
一致性雜湊演算法基本解決了以P2P為代表的儲存環境中的一個關鍵問題——如何在動態網路拓撲中對資料進行分發和選擇路由。在這個演算法中,每隔儲存節點僅需維護少量相鄰節點的資訊,並且在有節點加入或者退出的時候,僅有相關的少量節點參與到拓撲的維護中,這使得一致性雜湊演算法成為一個具有實用意義的DHT(Distribute Hash Table)演算法。
關於一致性雜湊演算法的不足:1.查詢過程匯總,查詢訊息需要經過O(n)步(n是系統內節點總數)才能到達被查詢的節點,如果系統規模非常大的話,這樣的查詢效率可能無法滿足實用需求。
一致性雜湊演算法的改進:將圓環劃分成M等份,若加入物理節點為N,則每隔物理節點擁有V=M/N個節點書。當有物理節點離線是,由於該節點對應的虛擬節點均勻地分布在換上,其附近的節點將會均勻地分擔這個原點的原有附在,當有新節點加入時,其他節點的負擔也會均勻地轉移到上面。同時根據物理節點的時機效能為權值分配環上的虛擬節點數目給物理節點,也解決了儲存節點效能差異的問題。
參考資料:http://tech.idv2.com/2008/07/24/memcached-004/
《分布式儲存系統中一致性雜湊演算法的研究》