memcache 分佈式

https://blog.phpha.com/backup/archives/1303.html


當Memcached服務器數量固定時,普通Hash分佈可以很好的運作。但是當服務器數量發生改變時,問題就出來了。因爲同一個KEY經Hash算法處理後,與服務器數量取模,會導致結果與服務器數量未變化時不同,這就導致之前保存的數據丟失。採取一致性Hash分佈可以有效的解決這個問題,把丟失的數據減到最小(注意這裏並沒有說完全不丟失)。
一致性Hash分佈算法分4個步驟:
步驟1:將一個32位整數[0 ~ (2^32-1)]想象成一個環,0 作爲開頭,(2^32-1) 作爲結尾,當然這只是想象。
步驟2:通過Hash函數把KEY處理成整數。這樣就可以在環上找到一個位置與之對應。
步驟3:把Memcached服務器羣映射到環上,使用Hash函數處理服務器對應的IP地址即可。
步驟4:把數據映射到Memcached服務器上。查找一個KEY對應的Memcached服務器位置的方法如下:從當前KEY的位置,沿着圓環順時針方向出發,查找位置離得最近的一臺Memcached服務器,並將KEY對應的數據保存在此服務器上。
說明:這樣一來,當添加或移除某一臺服務器時,受影響的數據範圍變的更小了。具體可以畫個圖更便於理解,這裏我就不畫了。

[3]一致性Hash分佈算法實例

說明:其整體查找思路,已經在前面的一致性Hash分佈部分進行了介紹,需要補充的是每次添加或移除服務器後需要對服務器列表這個序列就行一次排序。
下面是對上面的一致性Hash分佈實例的相關測試代碼:


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