亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

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

2020-03-22 17:49:18
字體:
來源:轉載
供稿:網友
本篇文章給大家帶來的內容是關于PHP實現一致性哈希算法的詳細介紹(代碼示例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

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

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

(2)解決方案

a、通過存儲映射關系

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

logo1.png =====》 服務A

ogo2.png =====》 服務B

logo3.png =====》 服務C

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

b、hash算法

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

2095458979-5c7ca121e7705_articlex.png

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

key = hash(imgName) % n

其中:

imgName為圖片名稱,

n為服務器的個數,

key代表圖片應該存儲在第幾個服務器上面。

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

$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

此時,我們由存儲映射關系變為計算服務器的序號,確實極大的簡化了工作量。

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

C、一致性hash算法

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

其基本思想:

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

990454915-5c7ca1779d3f5_articlex.png

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

956894435-5c7ca184b9bac_articlex.png

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

807439409-5c7ca1918fcb9_articlex.png

4、然后順時針轉動,第一個到達的節點node,就認為是存儲logo1.png圖片的服務器。

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

優點:當新增機器的時候,僅僅標志出來的區域受到影響,如下圖:

4038178100-5c7ca1a7bf490_articlex.png

缺點:當節點node比較少的時候,往往缺少平衡性,因為經過hash計算后,映射到hash環上面的節點node,并不是均勻分布的,導致了有的機器負載很高,有的機器很空閑。

PHP實現如下:

$hostsMap = [ img1.findme.wang , img2.findme.wang , img3.findme.wang $hashRing = [];function getImgSrc($imgName){ global $hostsMap; global $hashRing; //將節點映射到hash環上面 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 ));

輸出結果如下:

628828581-5c7ca1c65ded0_articlex.png

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

d、通過虛擬節點優化一致性hash算法

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

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

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

3488012023-5c7ca1d7214cf_articlex.png

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

PHP實現如下:

$hostsMap = [ img1.findme.wang , img2.findme.wang , img3.findme.wang $hashRing = [];function getImgSrc($imgName){ global $hostsMap; global $hashRing; $virtualNodeLen = 3; //每個節點的虛擬節點個數 //將節點映射到hash環上面 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 ));

執行結果如下:

1283067839-5c7ca1f729486_articlex.png

二、備注
1、取模與取余的區別?

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

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

1、什么是CRC算法?

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

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品中文字幕av| 中文字幕免费精品一区高清| 日韩av在线免费观看一区| 97人人模人人爽人人喊中文字| 欧美性在线视频| 夜夜嗨av色综合久久久综合网| 国产精品一区二区三区久久| 亚洲精品按摩视频| 欧美另类在线观看| 中文字幕亚洲在线| 国产精品入口免费视频一| 国产精品日日做人人爱| 日韩av中文字幕在线免费观看| 亚洲aaaaaa| 狠狠躁18三区二区一区| 一个人看的www久久| wwwwwwww亚洲| 欧美放荡办公室videos4k| 欧美日韩在线另类| 亚洲国产天堂久久综合网| 欧美最猛性xxxxx亚洲精品| 最近免费中文字幕视频2019| 日韩欧美中文字幕在线播放| 国产丝袜精品视频| 91av网站在线播放| 国产精品扒开腿做爽爽爽的视频| 国产精品网站视频| 精品亚洲国产成av人片传媒| 成人免费淫片aa视频免费| 日韩欧美国产免费播放| 成人疯狂猛交xxx| 国产日产欧美精品| 欧美性猛交视频| 成人免费视频97| 国产91成人video| 欧美一级黑人aaaaaaa做受| 欧美成年人网站| 国产精品视频专区| 国产精品99久久久久久人| 国产亚洲人成a一在线v站| 国产精品盗摄久久久| 日韩精品欧美国产精品忘忧草| 久久亚洲精品一区二区| 人人做人人澡人人爽欧美| 欧美性猛交xxxx富婆弯腰| 欧美日韩国产区| 欧美成人黄色小视频| 亚洲成人在线视频播放| 亚洲一区二区少妇| 国产欧美在线视频| 欧美成人合集magnet| 欧美影院成年免费版| 91爱视频在线| 91精品啪aⅴ在线观看国产| 在线视频欧美日韩精品| 欧美一级淫片播放口| 亚洲精品自拍偷拍| 亚洲午夜小视频| 日韩精品视频中文在线观看| 欧美成人激情视频| 欧美激情在线观看视频| 国产精品欧美日韩| 欧美成人精品激情在线观看| 亚洲欧美日本另类| 日韩电影中文字幕| 国产网站欧美日韩免费精品在线观看| 黄色一区二区在线| 亚洲欧美在线第一页| 午夜精品在线视频| 欧美一级淫片丝袜脚交| 国产精品电影网站| 日韩美女免费视频| 欧美综合第一页| 日韩av免费在线观看| 成人福利网站在线观看| 国内精品久久久久久中文字幕| 国产精品美女999| 国产亚洲精品久久久久久牛牛| 北条麻妃99精品青青久久| 国产精品福利观看| 国产亚洲免费的视频看| 国产精品丝袜久久久久久高清| 91国内揄拍国内精品对白| 欧美日韩中文字幕综合视频| 色综合色综合网色综合| 久久久精品视频成人| 亚洲精品美女免费| 久久精品美女视频网站| 亚洲天堂av网| 久久久午夜视频| 日韩美女写真福利在线观看| 日韩黄在线观看| 91国语精品自产拍在线观看性色| 免费91麻豆精品国产自产在线观看| 欧美精品激情blacked18| 一区二区三区四区视频| 2019精品视频| 不卡伊人av在线播放| 欧美在线视频导航| 欧美在线观看日本一区| 隔壁老王国产在线精品| 91夜夜未满十八勿入爽爽影院| 国产狼人综合免费视频| 欧美在线影院在线视频| 亚洲一区二区三区视频播放| 国产精品视频播放| 国产一区二区三区在线播放免费观看| 亚洲国产精彩中文乱码av| 亚洲国产美女久久久久| 国产视频在线观看一区二区| 亚洲已满18点击进入在线看片| 久久视频在线观看免费| 色先锋资源久久综合5566| 亚洲黄色在线观看| 国产一区香蕉久久| 欧美日韩国产123| 亚洲999一在线观看www| 亚洲天堂第一页| 福利一区视频在线观看| 精品偷拍各种wc美女嘘嘘| 欧美一区三区三区高中清蜜桃| 日韩欧美亚洲一二三区| 色噜噜狠狠色综合网图区| 在线精品国产成人综合| 亚洲美女动态图120秒| 国产精品视频播放| 欧美激情欧美狂野欧美精品| 欧美日韩国产一区二区| 91亚洲va在线va天堂va国| 久久五月天色综合| 日韩在线视频免费观看高清中文| 久久精品视频免费播放| 日韩中文字幕在线看| 国产精品高清在线观看| 福利微拍一区二区| 国产日本欧美一区二区三区| 亚洲四色影视在线观看| 日本成人精品在线| 亚洲一区二区三区久久| 国产拍精品一二三| 久久久久免费精品国产| 亚洲国产精品va在看黑人| 久久九九有精品国产23| 亚洲精品美女视频| 欧美国产高跟鞋裸体秀xxxhd| 91经典在线视频| 久久久久成人网| 欧美激情va永久在线播放| 日韩毛片中文字幕| 国产精品成人久久久久| 欧美国产日韩一区| 91精品久久久久久久久久入口| 欧美日韩国产在线看| 2019中文字幕免费视频| 欧美日韩国产中文字幕| 亚洲午夜性刺激影院| 日韩精品在线免费观看视频| 久久成人这里只有精品| 国内精久久久久久久久久人| 国产成人福利视频| 国产精品视频久| 国产精品久久久久久久天堂| 久久久久久久久久久人体| 精品无人区太爽高潮在线播放|