最近同事問過我這樣一個問題:若要實現文件均勻分佈,用最簡單的線性哈希算法--取模運算(根據文件名獲取整數,而後根據節點數取模)就能夠將文件均勻分佈,爲什麼Glusterfs爲什麼還要用這麼複雜的哈希算法實現文件的分佈式存儲呢?
關於這麼問題,要從負載均衡提及吧。就拿分佈式存儲來講,簡單的取模運算也能夠將文件均勻分佈在各個節點之中。但若節點數改變,節點增刪的話,這種方法就不可取了,節點增刪,文件的取模所有發生變化,致使各個節點上的文件須要所有遷移。這就是Glusterfs要採用哈希分佈式存儲而不直接採用取模的緣由。
爲每一個節點均勻劃分哈希區間,根據文件名計算哈希值,將文件存儲到哈希值所在哈希區間對應的存儲節點上。若節點有增刪,每一個節點的哈希區間會增大或變小。只是部分文件須要遷移,這就大大減小了文件的移動。
哈希均衡普遍應用於P2P網絡、分佈式存儲等領域,上述只是Glusterfs採用該算法的一個緣由,更多負載均衡的內容,請參照http://baike.baidu.com/link?url=NgfVb_i4nsdkZYKODM8R_VHOHDMk9aelogOANMkx7f6-Pl-kwxgEzYi0Fg-CdRQw算法
(出自 吖Sool-社區)網絡