国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - 一致性哈希算法以及其PHP實現詳細解析

一致性哈希算法以及其PHP實現詳細解析

2020-05-17 14:24PHP教程網 PHP教程

以下是對用PHP實現一致性哈希算法進行了詳細的介紹,需要的朋友可以過來參考下

在做服務器負載均衡時候可供選擇的負載均衡的算法有很多,包括:  輪循算法(Round Robin)、哈希算法(HASH)、最少連接算法(Least Connection)、響應速度算法(Response Time)、加權法(Weighted )等。其中哈希算法是最為常用的算法.

典型的應用場景是: 有N臺服務器提供緩存服務,需要對服務器進行負載均衡,將請求平均分發到每臺服務器上,每臺機器負責1/N的服務。

常用的算法是對hash結果取余數 (hash() mod N):對機器編號從0到N-1,按照自定義的hash()算法,對每個請求的hash()值按N取模,得到余數i,然后將請求分發到編號為i的機器。但這樣的算法方法存在致命問題,如果某一臺機器宕機,那么應該落在該機器的請求就無法得到正確的處理,這時需要將當掉的服務器從算法從去除,此時候會有(N-1)/N的服務器的緩存數據需要重新進行計算;如果新增一臺機器,會有N /(N+1)的服務器的緩存數據需要進行重新計算。對于系統而言,這通常是不可接受的顛簸(因為這意味著大量緩存的失效或者數據需要轉移)。那么,如何設計一個負載均衡策略,使得受到影響的請求盡可能的少呢?

在Memcached、Key-Value Store、Bittorrent DHT、LVS中都采用了Consistent Hashing算法,可以說Consistent Hashing 是分布式系統負載均衡的首選算法。

1、Consistent Hashing算法描述

下面以Memcached中的Consisten Hashing算法為例說明。
由于hash算法結果一般為unsigned int型,因此對于hash函數的結果應該均勻分布在[0,232-1]間,如果我們把一個圓環用232 個點來進行均勻切割,首先按照hash(key)函數算出服務器(節點)的哈希值, 并將其分布到0~232的圓上。

用同樣的hash(key)函數求出需要存儲數據的鍵的哈希值,并映射到圓上。然后從數據映射到的位置開始順時針查找,將數據保存到找到的第一個服務器(節點)上。

一致性哈希算法以及其PHP實現詳細解析

Consistent Hashing原理示意圖

新增一個節點的時候,只有在圓環上新增節點逆時針方向的第一個節點的數據會受到影響。刪除一個節點的時候,只有在圓環上原來刪除節點順時針方向的第一個節點的數據會受到影響,因此通過Consistent Hashing很好地解決了負載均衡中由于新增節點、刪除節點引起的hash值顛簸問題。

一致性哈希算法以及其PHP實現詳細解析

Consistent Hashing添加服務器示意圖

虛擬節點(virtual nodes):之所以要引進虛擬節點是因為在服務器(節點)數較少的情況下(例如只有3臺服務器),通過hash(key)算出節點的哈希值在圓環上并不是均勻分布的(稀疏的),仍然會出現各節點負載不均衡的問題。虛擬節點可以認為是實際節點的復制品(replicas),本質上與實際節點實際上是一樣的(key并不相同)。引入虛擬節點后,通過將每個實際的服務器(節點)數按照一定的比例(例如200倍)擴大后并計算其hash(key)值以均勻分布到圓環上。在進行負載均衡時候,落到虛擬節點的哈希值實際就落到了實際的節點上。由于所有的實際節點是按照相同的比例復制成虛擬節點的,因此解決了節點數較少的情況下哈希值在圓環上均勻分布的問題。

一致性哈希算法以及其PHP實現詳細解析

擬節點對Consistent Hashing結果的影響

從上圖可以看出,在節點數為10個的情況下,每個實際節點的虛擬節點數為實際節點的100-200倍的時候,結果還是很均衡的。

 

第3段中有這些文字:“但這樣的算法方法存在致命問題,如果某一臺機器宕機,那么應該落在該機器的請求就無法得到正確的處理,這時需要將當掉的服務器從算法從去除,此時候會有(N-1)/N的服務器的緩存數據需要重新進行計算;”

為何是 (N-1)/N 呢?解釋如下:

比如有 3 臺機器,hash值 1-6 在這3臺上的分布就是:
host 1: 1 4
host 2: 2 5
host 3: 3 6
如果掛掉一臺,只剩兩臺,模數取 2 ,那么分布情況就變成:
host 1: 1 3 5
host 2: 2 4 6

可以看到,還在數據位置不變的只有2個: 1,2,位置發生改變的有4個,占共6個數據的比率是 4/6 = 2/3這樣的話,受影響的數據太多了,勢必太多的數據需要重新從 DB 加載到 cache 中,嚴重影響性能

【consistent hashing 的辦法】
上面提到的 hash 取模,模數取的比較小,一般是負載的數量,而 consistent hashing 的本質是將模數取的比較大,為 2的32次方減1,即一個最大的 32 位整數。然后,就可以從容的安排數據導向了,那個圖還是挺直觀的。
以下部分為一致性哈希算法的一種PHP實現。點擊下載

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 激情综合网五月婷婷 | 欧美日韩精品免费 | 澳门黄色网 | 亚洲天堂一区 | 国产精品极品美女在线观看免费 | 亚洲视频观看 | 欧美a在线 | 国产精品久久久久久中文字 | 日本中文字幕在线观看 | 国产精品久久久久国产a级 国产免费久久 | 国产精品美女久久久久久不卡 | 亚洲电影在线看 | 黄在线看| 狠狠综合 | 91久久| 精品无码久久久久久国产 | 国产一区二区三区视频 | 亚洲一区二区三区四区的 | 在线亚洲不卡 | av集中淫 | 国产精品久久久久久久久久小说 | 国产一区久久久 | 亚洲国产精品一区二区久久,亚洲午夜 | 亚洲一区二区中文字幕 | 亚洲欧美一区二区三区久久 | 免费 成 人 黄 色 | 精品国产一区二区三区日日嗨 | 国产97人人超碰caoprom | 久久久久久国产精品mv | 成人永久免费视频 | 色综合久| 国产在线观看免费 | 日韩性视频| 久久精品国产一区二区三区不卡 | 4虎tv| 国精品一区二区三区 | 久久国产欧美日韩精品 | 国产一区二区视频在线观看 | 亚洲一区欧美一区 | 在线观看av大片 | 国产成人在线一区二区 |