一致性hash演算法原理和PHP實現

2021-10-08 03:42:03 字數 2231 閱讀 1812

今天在看redis集群實現原理時,提到了一致性hash演算法。已經不是第一次聽到這個詞了,今天特意了解了一下實現原理。

關於一致性hash演算法的原理,主要是核心兩點:

<?php

/** * 一致性雜湊實現介面

* inte***ce consistenthash

*/inte***ce consistenthash

/** * 具體一致性雜湊實現

* author chenqionghe

* class myconsistenthash

*/class myconsistenthash implements consistenthash

/*** 新增一台伺服器到伺服器列表中

* @param $server 伺服器ip位址

* @return bool

*/public function addserver(string $server)

//虛擬節點根據位置排序

ksort($this->virtualpos, sort_numeric);}}

/*** 移除一台伺服器(迴圈所有的虛節點,刪除值為該伺服器位址的虛節點)

* @param $key

* @return bool

*/public function removeserver(string $key)

//刪除對應伺服器

unset($this->serverlist[$key]);}}

/*** 在當前的伺服器列表中找到合適的伺服器存放資料

* @param $key 鍵名

* @return mixed 返回伺服器ip位址

*/public function lookup(string $key)

}reset($this->virtualpos); //重置圓環的指標為第乙個(重置陣列的指標)

return $finalserver;

}}$hashserver = new myconsistenthash();

$hashserver->addserver('192.168.1.1');

$hashserver->addserver('192.168.1.2');

$hashserver->addserver('192.168.1.3');

$hashserver->addserver('192.168.1.4');

$hashserver->addserver('192.168.1.5');

echo "增加5臺伺服器192.168.1.1~192.168.1.5\n";

echo "\n";

echo "儲存 key1 到 server :" . $hashserver->lookup('key1') . "\n";

echo "儲存 key2 到 server :" . $hashserver->lookup('key2') . "\n";

echo "儲存 key3 到 server :" . $hashserver->lookup('key3') . "\n";

echo "儲存 key4 到 server :" . $hashserver->lookup('key4') . "\n";

echo "儲存 key5 到 server :" . $hashserver->lookup('key5') . "\n";

echo "儲存 key6 到 server :" . $hashserver->lookup('key6') . "\n";

echo "儲存 key7 到 server :" . $hashserver->lookup('key7') . "\n";

echo "儲存 key8 到 server :" . $hashserver->lookup('key8') . "\n";

echo "儲存 key9 到 server :" . $hashserver->lookup('key9') . "\n";

echo "儲存 key10 到 server :" . $hashserver->lookup('key10') . "\n";

echo "\n";

echo '虛擬機器節點數:' . count($hashserver->virtualpos) . "\n";

echo "\n";

echo "查詢 key6 節點對應的 service :" . $hashserver->lookup('key6') . "\n";

**實現:

參考:

Hash和一致性Hash演算法

hash hash無論是資料結構還是分布式快取,都有應用。hash更確切的說是hash函式,是乙個集合的資料到另乙個集合內資料的乙個對映。被對映方在數學裡面叫做原象,這裡我們叫做資料,對映到的叫象,這裡我們稱作槽。分布式快取伺服器和應用伺服器的區別在於,應用伺服器中的所有伺服器都部署著相同的應用,而...

Hash演算法和一致性Hash演算法

我們對同乙個名稱做相同的雜湊計算時,得出的結果應該是不變的,如果我們有3臺伺服器,使用雜湊後的結果對3求餘,那麼餘數一定是0 1或者2,正好與我們之前的伺服器編號相同,如果求餘的結果為0,我們就把當前名稱對應的快取在0號伺服器上,如果餘數為1,就把當前名對應的快取在1號伺服器上,如果餘數為2,同理,...

一致性hash演算法 面試必備 一致性hash演算法

最近公司在招人,我們準備的問題中有一道是關於一致性hash演算法的問題,只有一些面試者能夠回答上來,而且答的也不是很全面,有的面試者只是聽說過,有的連聽都沒聽過,下面我把一致性hash演算法整理一下分享給大家 一致性雜湊演算法在1997年由麻省理工學院的karger等人在解決分布式cache中提出的...