一致性雜湊演算法原理
首先將所有雜湊值空間組成乙個虛擬的圓環。
其次我們將所有載體(伺服器或者資料表)使用某個hash演算法,這樣就可以找到載體在圓環上的位置。
接下來對要定位的資料使用與載體相同的hash演算法,計算出資料在圓環上的位置,然後順時針去行走到的第乙個載體就是其應該定位到的載體。
如果,刪除乙個載體,那麼需要定位的資料會落到,被刪除的載體前面的那個載體上。如圖:
如果,增加乙個載體,效果如圖:
相比於hash演算法取模運算,一致性hash演算法的好處在於,在增加或減少載體的時候,hash只是將該載體前的載體。
如果載體過少,可能會出現資料嚴重偏移的情況,這種情況我們可以設定多個虛擬節點,每個虛擬節點會對應相應的載體。比如載體1a,載體1b,載體1c,載體2a,載體2b,載體2c,載體3a,載體3b,載體3c,載體4a,載體4b,載體4c。
我們可以將資料定位到這些虛擬節點上,然後,找到虛擬節點所對應的載體。即可定位到資料所在的載體。
php**實現
<?php
/** * 具體一致性雜湊演算法實現
* */
class hashrealize
/*** 查詢節點
*/public function looknode($key)
} return $carrier;
} /**
* 新增載體
*/public function addcarrier($carrier)
ksort($this->virtualnodelist,sort_numeric);
} if($this->carrierlist[$carrier])else
} /**
* 移除載體
*/public function removecarrier($carrier)
unset($this->carrierlist[$carrier]);
} }}
一致性hash演算法 面試必備 一致性hash演算法
最近公司在招人,我們準備的問題中有一道是關於一致性hash演算法的問題,只有一些面試者能夠回答上來,而且答的也不是很全面,有的面試者只是聽說過,有的連聽都沒聽過,下面我把一致性hash演算法整理一下分享給大家 一致性雜湊演算法在1997年由麻省理工學院的karger等人在解決分布式cache中提出的...
一致性hash演算法虛擬節點 一致性hash演算法
hash 演算法也叫做雜湊演算法,他可以讓任意長度的資料m對映成為長度固定的值h。hash演算法的第乙個作用就是資料的快速儲存與查詢。寫過程式的人都知道,基本上主流的程式語言裡面都有個資料結構叫做map dictionary或者 hash table 它是根據key來直接訪問結果的資料結構。key的...
一致性Hash演算法原理白話
1 技術背景 1.1 技術舉例 memcache 1.2 技術瓶頸 memcached伺服器端本身不提供分布式cache的一致性,由客戶端實現提供。以餘數分布式演算法為例。餘數分布式演算法是根據新增進入快取時key的hash值通過特定的演算法得出餘數,然後根據餘數對映到關聯的快取伺服器,將該key ...