下面使用php實現一致性hash分布演算法。
建立乙個conhash類,它有兩個成員變數和三個成員方法。
變數: se
rver
list
//儲存
伺服器列
表 issorted //記錄伺服器列表是否已經排過序。
方法:
addserver:新增乙個伺服器到伺服器列表中
removeserver:從伺服器列表中刪除乙個伺服器
lookup:從當前伺服器列表中找到合適的伺服器存放資料。
**如下:
<?php
class conhash
function removeserver($server)
function lookup($key)
}?>
1)addserver方法實現
function addserver($server)
$this->issorted = false;
return true;
} function removeserver($server)
$this->issorted = false;
return true;
}
3)lookup方法實現
function lookup($key)
foreach($this->serverlist as $pos =>$server)
}return $this->serverlist[count($this->serverlist)-1];
}
lookup方法首先通過mhash函式計算出key的hash值,然後判斷伺服器列表是否排過序,如果沒有,就先對伺服器列表進行倒序排序操作。倒序排序的作用是把伺服器列表轉換成乙個逆時針的圓環。最後遍歷伺服器列表,找到乙個合適的伺服器返回。
4)測試**
$hserver = new conhash();
$hserver->addserver("192.168.1.1");
$hserver->addserver("192.168.1.2");
$hserver->addserver("192.168.1.3");
$hserver->addserver("192.168.1.4");
$hserver->addserver("192.168.1.5");
echo "儲存 key1 在 server:",$hserver->lookup('key1');
echo "儲存 key2 在 server:",$hserver->lookup('key2');
echo '***********************************';
$hserver->removeserver("192.168.1.2");
$hserver->removeserver("192.168.1.1");
echo "儲存 key1 在 server:",$hserver->lookup('key1');
echo "儲存 key2 在 server:",$hserver->lookup('key2');
echo '***********************************';
$hserver->addserver("192.168.1.6");
echo "儲存 key1 在 server:",$hserver->lookup('key1');
echo "儲存 key2 在 server:",$hserver->lookup('key2');
測試結果具有隨機性,在不同的機器上,可能出現的結果會有所不同。但這個例子解釋了一致性hash演算法。 一致性hash演算法 面試必備 一致性hash演算法
最近公司在招人,我們準備的問題中有一道是關於一致性hash演算法的問題,只有一些面試者能夠回答上來,而且答的也不是很全面,有的面試者只是聽說過,有的連聽都沒聽過,下面我把一致性hash演算法整理一下分享給大家 一致性雜湊演算法在1997年由麻省理工學院的karger等人在解決分布式cache中提出的...
一致性hash演算法虛擬節點 一致性hash演算法
hash 演算法也叫做雜湊演算法,他可以讓任意長度的資料m對映成為長度固定的值h。hash演算法的第乙個作用就是資料的快速儲存與查詢。寫過程式的人都知道,基本上主流的程式語言裡面都有個資料結構叫做map dictionary或者 hash table 它是根據key來直接訪問結果的資料結構。key的...
一致性hash演算法
july部落格16章開始 第一題 全排列,輸入乙個字串,列印出該字串中字元的所有排列 1.個人思路 回溯法建立的排序樹 2.july部落格 遞迴實現,依次固定第乙個字母,後面的交換,和上面描述的使用回溯法相似 c stl 演算法 next permutation的思想,關於next permutat...