国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 學院 > 邏輯算法 > 正文

PHP實現(xiàn)一致性哈希算法的詳細介紹(代碼示例)

2020-03-22 17:49:18
字體:
供稿:網(wǎng)友
本篇文章給大家?guī)淼膬?nèi)容是關(guān)于PHP實現(xiàn)一致性哈希算法的詳細介紹(代碼示例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

一、案例分析
(1)問題概述

假設(shè)我們的圖片數(shù)據(jù)均勻的分配在三臺服務(wù)(分別標注為服務(wù)器A,服務(wù)器B、服務(wù)器C)上面,現(xiàn)在我們要從里面取圖片,服務(wù)端在拿到這個請求后,怎么會指定,這張圖片是存在服務(wù)器A、服務(wù)器B,還是服務(wù)器C上面呢?若是去遍歷,兩三臺還好說,但那也太out了,當服務(wù)器的數(shù)量達到成百上千臺的時候,還敢說去遍歷嗎?

(2)解決方案

a、通過存儲映射關(guān)系

首先我們可能會想到,可以搞一個中間層來記錄圖片存儲在哪個服務(wù)器上面,如下:

logo1.png =====》 服務(wù)A

ogo2.png =====》 服務(wù)B

logo3.png =====》 服務(wù)C

這樣,每當請求過來的時候,我們先去請求圖片與服務(wù)器的映射關(guān)系,找到圖片存儲的服務(wù)器,在向指定的服務(wù)器發(fā)出請求。從實現(xiàn)的角度來說,這是可行的,但是在存儲圖片的時候,我們也必須存儲圖片與服務(wù)器的映射關(guān)系,這明顯加大了工作量,其維護也是一個問題,一旦存儲的圖片和服務(wù)器映射關(guān)系出現(xiàn)了問題,整個系統(tǒng)就掛了。

b、hash算法

既然我們要排除存儲映射關(guān)系,這個時候,人們想到了hash算法。如

2095458979-5c7ca121e7705_articlex.png

圖片在存儲的時候,依據(jù)圖片名稱(logo1.png),通過hash算法求出散列值val,通過對val進行取模,得出的值,就可以判斷圖片應(yīng)該存儲在哪個服務(wù)器上面。如下:

key = hash(imgName) % n

其中:

imgName為圖片名稱,

n為服務(wù)器的個數(shù),

key代表圖片應(yīng)該存儲在第幾個服務(wù)器上面。

當請求過來的時候,比如請求logo1.png這個圖片,服務(wù)端依據(jù)上述公式計算出的key,就可以判斷該logo1.png存儲在哪個服務(wù)器上面。PHP實現(xiàn)如下:

$hostsMap = [ img1.findme.wang , img2.findme.wang , img3.findme.wang function getImgSrc($imgName) { global $hostsMap; $key = crc32($imgName) % count($hostsMap); return http:// . $hostsMap[abs($key)] . / . $imgName;var_dump(getImgSrc( logo1.png ));var_dump(getImgSrc( logo2.png ));var_dump(getImgSrc( logo3.png ));

輸出:

1956153453-5c7ca1635c91c_articlex.png

此時,我們由存儲映射關(guān)系變?yōu)橛嬎惴?wù)器的序號,確實極大的簡化了工作量。

但是一旦新增機器,就非常麻煩了,因為n變了,幾乎所有的序列號key也變了,于是需要大量的數(shù)據(jù)遷移工作。

C、一致性hash算法

一致性hash算法,是一種特殊的hash算法,旨在解決當node數(shù)(如存儲圖片的服務(wù)器數(shù)量)變化時候,盡量少數(shù)據(jù)的遷移。

其基本思想:

1、首先把0~2的32次方個點,均勻的分布到一個圓環(huán)上面,如下:

990454915-5c7ca1779d3f5_articlex.png

2、然后將所有的節(jié)點node(存儲圖片的服務(wù)器)通過hash計算后,對232取余,然后也映射到hash環(huán)上面,如下:

956894435-5c7ca184b9bac_articlex.png

3、當請求過來的時候,比如請求logo1.png這個圖片,通過hash計算后,對232取余,然后也映射到hash環(huán)上面,如下:

807439409-5c7ca1918fcb9_articlex.png

4、然后順時針轉(zhuǎn)動,第一個到達的節(jié)點node,就認為是存儲logo1.png圖片的服務(wù)器。

從上面可以得知,其實一致性hash的亮點,首先在于對節(jié)點node(存儲圖片的服務(wù)器)和對象(圖片)都進行了hash計算和映射,其次是閉環(huán)的設(shè)計。

優(yōu)點:當新增機器的時候,僅僅標志出來的區(qū)域受到影響,如下圖:

4038178100-5c7ca1a7bf490_articlex.png

缺點:當節(jié)點node比較少的時候,往往缺少平衡性,因為經(jīng)過hash計算后,映射到hash環(huán)上面的節(jié)點node,并不是均勻分布的,導(dǎo)致了有的機器負載很高,有的機器很空閑。

PHP實現(xiàn)如下:

$hostsMap = [ img1.findme.wang , img2.findme.wang , img3.findme.wang $hashRing = [];function getImgSrc($imgName){ global $hostsMap; global $hashRing; //將節(jié)點映射到hash環(huán)上面 if (empty($hashRing)) { foreach($hostsMap as $h) { $hostKey = fmod(crc32($h) , pow(2,32)); $hostKey = abs($hostKey); $hashRing[$hostKey] = $h; //從小到大排序,便于查找 ksort($hashRing); //計算圖片hash $imgKey = fmod(crc32($imgName) , pow(2,32)); $imgKey = abs($imgKey); foreach($hashRing as $hostKey = $h) { if ($imgKey $hostKey) { return http:// . $h . / . $imgName; return http:// . html' target='_blank'>current($hashRing) . / . $imgName;var_dump(getImgSrc( logo1.png ));var_dump(getImgSrc( logo2.png ));var_dump(getImgSrc( logo3.png ));

輸出結(jié)果如下:

628828581-5c7ca1c65ded0_articlex.png

至于為什么使用fmod函數(shù)不適用求余運算符%,主要是因為pow(2,32)在32位操作系統(tǒng)上面,超高了PHP_INT_MAX,具體可以參考上一篇文章“PHP中對大數(shù)求余報錯Uncaught pisionByZeroError: Modulo by zero”。

d、通過虛擬節(jié)點優(yōu)化一致性hash算法

為了提高一致性hash算法的平衡性,我們首先能夠想到的是,增加節(jié)點數(shù),但是機器畢竟是需要經(jīng)費啊,不是說增就能隨意增,那就增加虛擬節(jié)點,這樣就沒毛病了。思路如下:

1、假設(shè)host1、host2、host3,都分別有3個虛擬節(jié)點,如host1的虛擬節(jié)點為host1_1、host1_2、host1_3

2、然后將所有的虛擬節(jié)點node(存儲圖片的服務(wù)器)通過hash計算后,對232取余,然后也映射到hash環(huán)上面,如下:

3488012023-5c7ca1d7214cf_articlex.png

然后,接下來步驟同一致性hash算法一致,只是最后需要將虛擬節(jié)點,轉(zhuǎn)為真實的節(jié)點。

PHP實現(xiàn)如下:

$hostsMap = [ img1.findme.wang , img2.findme.wang , img3.findme.wang $hashRing = [];function getImgSrc($imgName){ global $hostsMap; global $hashRing; $virtualNodeLen = 3; //每個節(jié)點的虛擬節(jié)點個數(shù) //將節(jié)點映射到hash環(huán)上面 if (empty($hashRing)) { foreach($hostsMap as $h) { $i = 0; while($i $virtualNodeLen){ $hostKey = fmod(crc32($h. _ .$i) , pow(2,32)); $hostKey = abs($hostKey); $hashRing[$hostKey] = $h; $i++; //從小到大排序,便于查找 ksort($hashRing); //計算圖片hash $imgKey = fmod(crc32($imgName) , pow(2,32)); $imgKey = abs($imgKey); foreach($hashRing as $hostKey = $h) { if ($imgKey $hostKey) { return http:// . $h . / . $imgName; return http:// . current($hashRing) . / . $imgName;var_dump(getImgSrc( login1.png ));var_dump(getImgSrc( login2.png ));var_dump(getImgSrc( login3.png ));

執(zhí)行結(jié)果如下:

1283067839-5c7ca1f729486_articlex.png

二、備注
1、取模與取余的區(qū)別?

取余,遵循盡可能讓商向0靠近的原則

取模,遵循盡可能讓商向負無窮靠近的原則

1、什么是CRC算法?

CRC(Cyclical Redundancy Check)即循環(huán)冗余碼校驗,主要用于數(shù)據(jù)校驗,常用的有CRC16、CRC32,其中16、32代表多項式最高次冪。

以上就是PHP實現(xiàn)一致性哈希算法的詳細介紹(代碼示例)的詳細內(nèi)容,PHP教程

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
国产真实伦在线观看| 精品美女在线观看视频在线观看 | 国产精品扒开做爽爽爽的视频| 欧美日韩性视频一区二区三区| 亚洲日本久久久午夜精品| 在线视频中文字幕久| 精品美女调教视频| 亚洲成av人影片在线观看| 亚洲成年人视频| 国产在线高清| 精品欧美色视频网站在线观看| 亚洲电影视频在线| 欧美卡一卡二| 国产高清免费视频| 精品176二区| 欧洲亚洲精品视频| 国产极品嫩模在线视频一区| 在线黄色.com| 国产美女高潮| 在线视频中文字幕第一页| 久草.com| 在线观看av网站永久| 国产在线超碰| 在线观看精品一区二区三区| 国产在线视频福利| 91在线看片| 中文字幕国产欧美| 免费一区二区在线观看| 97视频在线观看网站| 天天操中文字幕视频| 天天操天天是| 女人色在线免费视频| 精品美女视频在线观看免费软件| 九九热在线视频免费观看| 伊人免费视频| 69久久精品| 国产高清大尺度一区二区不卡| 波多野结衣久久高清免费| 在线黄色av| 亚洲一区免费在线| 永久免费网站在线| 国产经典av| 国产福利三区| 国产一区二区在线|播放| 亚洲精品自拍区在线观看| 国产福利三区| 在线视频色在线| 在线看黄网站| 欧美性xxxx交| 国产在线视精品麻豆| 黄色电影网站在线观看| 国产精品㊣新片速递bt| 福利视频网址导航| 久久精品国产麻豆| 国产一卡2卡3卡免费网站| 国产精选在线视频拍拍拍| 国产农村一级特黄α**毛片| 高清av中文在线字幕观看1| 国内外激情在线| 超碰免费在线播放| 黄色av免费在线| 国产又色又爽又黄刺激在线视频| 国产乱妇乱子在线播视频播放网站| 九九精品视频在线观看九九| 99热在线观看免费| 国产成免费视频| 日本h视频在线观看| 天天操天天艹| 国产三级视频在线| 亚洲成人av在线影院| 国产原创在线播放| 91在线网站| 成人欧美亚洲| 999国产在线视频| 老鸭窝av在线| 国产一二三区在线| h网站免费在线观看| 国产精品自产拍在线网站| 在线亚洲电影| 国产偷激情在线| 久草在线资源福利| 亚洲欧美精选| 精品推荐国产麻豆剧传媒| 国内外激情在线| 永久免费av片在线观看全网站 | 国产一卡2卡3卡四卡网站 | 欧美在线中文| 国产精品剧情一区二区三区| 免费特级黄毛片| 在线国产91| 在线播放黄色网址| 国产小视频在线| 久久99国产视频| 四虎成人精品在永久免费| 国产精品美女一区二区三区四区| 超碰91在线| 天堂网中文在线| 中文字幕av高清| 2019天天操夜夜操| 精品亚洲综合| 国产人成在线观看| 国产三级香港三韩国三级| 中文字幕中文字幕在线中高清免费版 | 日本最新在线视频| 欧美性猛交xxxx免费看蜜桃| 99在线免费观看| 国产网友自拍视频导航网站在线观看| 丁香婷婷在线观看| 国产麻豆高清视频在线第一页| 九九视频九九热| 国产理论电影在线| 国产免费自拍视频| 日本中文字幕在线2020| 国产日本视频| 国产porn在线| 99在线欧洲视频| www.狠狠艹| 黄污在线观看| 国产视频xxxx| 精品国产一区二区三区不卡在线 | 四虎一区二区三区| 啪啪免费视频一区| 国产麻豆精品视频一区二区| 天堂中文在线视频| 69国产精品视频| 美女av在线播放| 国产视频二区| 男人天堂亚洲| 国产私人尤物无码不卡| 国产激情三区| 久久香蕉av| 国产精品秘入口| yjizz视频网站在线播放| 国产美女高潮一区二区三区| 国产精品视频一区二区久久| 91欧美在线视频| 激情五月色综合亚洲小说| 国产成人亚洲精品播放器下载| 日本成人免费网站| 在线视频三区| 国产精品人人| 九九视频在线播放| 99福利在线| 国产一起色一起爱| www.狠狠| 精品麻豆国产| 国产蜜臀在线| 欧美日韩国产亚洲沙发| 中文字幕av网| 国产黄大片在线观看画质优化| 久热久精久品这里在线观看| 一个人看的www免费观看视频| 国产主播福利在线| www.狠狠| 天天操夜夜添| jlzzjlzz欧美大全| av亚洲男人天堂| 国产超级va在线视频| 精品中文字幕不卡在线视频| 在线免费国产视频| 精品一区二区在线欧美| 中文字幕一区免费| 综合蜜桃精品| 国产三级自拍| 国产黄色免费看| 国产对白国语对白| 国产成人精品实拍在线| 国产超碰在线| av黄色在线观看| 99在线视频影院| 在线播放国产区| 免费一区二区三区视频狠狠| 美女被人操视频在线观看| 国产在线观看18| 国产有码在线| 国产无遮挡又黄又爽免费网站| 国产永久免费高清在线观看视频| 国产中文在线| 中文字幕在线看精品乱码| 国产一二区视频| 国产精品第八页| 精品剧情v国产在线观看| 中文资源在线官网| 四虎一区二区三区| 天堂中文资源在线| 精品一二三四| 免费a级在线播放| 成人福利视频导航| 在线中文视频| 久久99亚洲网美利坚合众国| 国产亚洲精品久久久久久移动网络| 中文字幕在线第一页| av在线天天| 中文字幕在线观看播放| 在线视频观看亚洲| 好看的中文字幕在线播放 | 国产天堂视频| av网址在线看| 国产特黄在线| 国产在线观看av|