青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Gordon.Ma

近山則志高,臨水而聰慧
隨筆 - 3, 文章 - 0, 評(píng)論 - 1, 引用 - 0
數(shù)據(jù)加載中……

【轉(zhuǎn)載】一致性 hash 算法( consistent hashing )

轉(zhuǎn)載地址: http://blog.csdn.net/sparkliang/article/details/5279393

consistent hashing 算法早在 1997 年就在論文 Consistent hashing and random trees 中被提出,目前在cache 系統(tǒng)中應(yīng)用越來越廣泛;

1 基本場(chǎng)景

比如你有 N 個(gè) cache 服務(wù)器(后面簡(jiǎn)稱 cache ),那么如何將一個(gè)對(duì)象 object 映射到 N 個(gè) cache 上呢,你很可能會(huì)采用類似下面的通用方法計(jì)算 object  hash 值,然后均勻的映射到到 N 個(gè) cache ;

hash(object)%N

   一切都運(yùn)行正常,再考慮如下的兩種情況;

   1 一個(gè) cache 服務(wù)器 m down 掉了(在實(shí)際應(yīng)用中必須要考慮這種情況),這樣所有映射到 cache m 的對(duì)象都會(huì)失效,怎么辦,需要把 cache m  cache 中移除,這時(shí)候 cache  N-1 臺(tái),映射公式變成了 hash(object)%(N-1) ;

   2 由于訪問加重,需要添加 cache ,這時(shí)候 cache  N+1 臺(tái),映射公式變成了 hash(object)%(N+1) 

 2 意味著什么?這意味著突然之間幾乎所有的 cache 都失效了。對(duì)于服務(wù)器而言,這是一場(chǎng)災(zāi)難,洪水般的訪問都會(huì)直接沖向后臺(tái)服務(wù)器;

再來考慮第三個(gè)問題,由于硬件能力越來越強(qiáng),你可能想讓后面添加的節(jié)點(diǎn)多做點(diǎn)活,顯然上面的 hash 算法也做不到。

  有什么方法可以改變這個(gè)狀況呢,這就是 consistent hashing...

2 hash 算法和單調(diào)性

   Hash 算法的一個(gè)衡量指標(biāo)是單調(diào)性( Monotonicity ),定義如下:

  單調(diào)性是指如果已經(jīng)有一些內(nèi)容通過哈希分派到了相應(yīng)的緩沖中,又有新的緩沖加入到系統(tǒng)中。哈希的結(jié)果應(yīng)能夠保證原有已分配的內(nèi)容可以被映射到新的緩沖中去,而不會(huì)被映射到舊的緩沖集合中的其他緩沖區(qū)。

容易看到,上面的簡(jiǎn)單 hash 算法 hash(object)%N 難以滿足單調(diào)性要求。

3 consistent hashing 算法的原理

consistent hashing 是一種 hash 算法,簡(jiǎn)單的說,在移除 / 添加一個(gè) cache 時(shí),它能夠盡可能小的改變已存在 key 映射關(guān)系,盡可能的滿足單調(diào)性的要求。

下面就來按照 5 個(gè)步驟簡(jiǎn)單講講 consistent hashing 算法的基本原理。

3.1 環(huán)形hash 空間

考慮通常的 hash 算法都是將 value 映射到一個(gè) 32 為的 key 值,也即是 0~2^32-1 次方的數(shù)值空間;我們可以將這個(gè)空間想象成一個(gè)首( 0 )尾( 2^32-1 )相接的圓環(huán),如下面圖 1 所示的那樣。

circle space

 1 環(huán)形 hash 空間

3.2 把對(duì)象映射到hash 空間

接下來考慮 4 個(gè)對(duì)象 object1~object4 ,通過 hash 函數(shù)計(jì)算出的 hash  key 在環(huán)上的分布如圖 2 所示。

hash(object1) = key1;

… …

hash(object4) = key4;

object

 2 4 個(gè)對(duì)象的 key 值分布

3.3 把cache 映射到hash 空間

Consistent hashing 的基本思想就是將對(duì)象和 cache 都映射到同一個(gè) hash 數(shù)值空間中,并且使用相同的 hash算法。

假設(shè)當(dāng)前有 A,B  C  3 臺(tái) cache ,那么其映射結(jié)果將如圖 3 所示,他們?cè)?/span> hash 空間中,以對(duì)應(yīng)的 hash 值排列。

hash(cache A) = key A;

… …

hash(cache C) = key C;

cache

 3 cache 和對(duì)象的 key 值分布

 

說到這里,順便提一下 cache  hash 計(jì)算,一般的方法可以使用 cache 機(jī)器的 IP 地址或者機(jī)器名作為 hash輸入。

3.4 把對(duì)象映射到cache

現(xiàn)在 cache 和對(duì)象都已經(jīng)通過同一個(gè) hash 算法映射到 hash 數(shù)值空間中了,接下來要考慮的就是如何將對(duì)象映射到 cache 上面了。

在這個(gè)環(huán)形空間中,如果沿著順時(shí)針方向從對(duì)象的 key 值出發(fā),直到遇見一個(gè) cache ,那么就將該對(duì)象存儲(chǔ)在這個(gè) cache 上,因?yàn)閷?duì)象和 cache  hash 值是固定的,因此這個(gè) cache 必然是唯一和確定的。這樣不就找到了對(duì)象和 cache 的映射方法了嗎?!

依然繼續(xù)上面的例子(參見圖 3 ),那么根據(jù)上面的方法,對(duì)象 object1 將被存儲(chǔ)到 cache A 上; object2 object3 對(duì)應(yīng)到 cache C ; object4 對(duì)應(yīng)到 cache B 

3.5 考察cache 的變動(dòng)

前面講過,通過 hash 然后求余的方法帶來的最大問題就在于不能滿足單調(diào)性,當(dāng) cache 有所變動(dòng)時(shí), cache會(huì)失效,進(jìn)而對(duì)后臺(tái)服務(wù)器造成巨大的沖擊,現(xiàn)在就來分析分析 consistent hashing 算法。

3.5.1 移除 cache

考慮假設(shè) cache B 掛掉了,根據(jù)上面講到的映射方法,這時(shí)受影響的將僅是那些沿 cache B 逆時(shí)針遍歷直到下一個(gè) cache  cache C )之間的對(duì)象,也即是本來映射到 cache B 上的那些對(duì)象。

因此這里僅需要變動(dòng)對(duì)象 object4 ,將其重新映射到 cache C 上即可;參見圖 4 。

remove

 4 Cache B 被移除后的 cache 映射

3.5.2 添加 cache

再考慮添加一臺(tái)新的 cache D 的情況,假設(shè)在這個(gè)環(huán)形 hash 空間中, cache D 被映射在對(duì)象 object2 object3 之間。這時(shí)受影響的將僅是那些沿 cache D 逆時(shí)針遍歷直到下一個(gè) cache  cache B )之間的對(duì)象(它們是也本來映射到 cache C 上對(duì)象的一部分),將這些對(duì)象重新映射到 cache D 上即可。

 

因此這里僅需要變動(dòng)對(duì)象 object2 ,將其重新映射到 cache D 上;參見圖 5 。

add

 5 添加 cache D 后的映射關(guān)系

4 虛擬節(jié)點(diǎn)

考量 Hash 算法的另一個(gè)指標(biāo)是平衡性 (Balance) ,定義如下:

平衡性

  平衡性是指哈希的結(jié)果能夠盡可能分布到所有的緩沖中去,這樣可以使得所有的緩沖空間都得到利用。

hash 算法并不是保證絕對(duì)的平衡,如果 cache 較少的話,對(duì)象并不能被均勻的映射到 cache 上,比如在上面的例子中,僅部署 cache A  cache C 的情況下,在 4 個(gè)對(duì)象中, cache A 僅存儲(chǔ)了 object1 ,而 cache C 則存儲(chǔ)了object2 、 object3  object4 ;分布是很不均衡的。

為了解決這種情況, consistent hashing 引入了“虛擬節(jié)點(diǎn)”的概念,它可以如下定義:

“虛擬節(jié)點(diǎn)”( virtual node )是實(shí)際節(jié)點(diǎn)在 hash 空間的復(fù)制品( replica ),一實(shí)際個(gè)節(jié)點(diǎn)對(duì)應(yīng)了若干個(gè)“虛擬節(jié)點(diǎn)”,這個(gè)對(duì)應(yīng)個(gè)數(shù)也成為“復(fù)制個(gè)數(shù)”,“虛擬節(jié)點(diǎn)”在 hash 空間中以 hash 值排列。

仍以僅部署 cache A  cache C 的情況為例,在圖 4 中我們已經(jīng)看到, cache 分布并不均勻?,F(xiàn)在我們引入虛擬節(jié)點(diǎn),并設(shè)置“復(fù)制個(gè)數(shù)”為 2 ,這就意味著一共會(huì)存在 4 個(gè)“虛擬節(jié)點(diǎn)”, cache A1, cache A2 代表了cache A ; cache C1, cache C2 代表了 cache C ;假設(shè)一種比較理想的情況,參見圖 6 。

virtual nodes

 6 引入“虛擬節(jié)點(diǎn)”后的映射關(guān)系

 

此時(shí),對(duì)象到“虛擬節(jié)點(diǎn)”的映射關(guān)系為:

objec1->cache A2  objec2->cache A1 ; objec3->cache C1 ; objec4->cache C2 

因此對(duì)象 object1  object2 都被映射到了 cache A 上,而 object3  object4 映射到了 cache C 上;平衡性有了很大提高。

引入“虛擬節(jié)點(diǎn)”后,映射關(guān)系就從 { 對(duì)象 -> 節(jié)點(diǎn) } 轉(zhuǎn)換到了 { 對(duì)象 -> 虛擬節(jié)點(diǎn) } 。查詢物體所在 cache 時(shí)的映射關(guān)系如圖 7 所示。

map

 7 查詢對(duì)象所在 cache

 

“虛擬節(jié)點(diǎn)”的 hash 計(jì)算可以采用對(duì)應(yīng)節(jié)點(diǎn)的 IP 地址加數(shù)字后綴的方式。例如假設(shè) cache A  IP 地址為202.168.14.241 

引入“虛擬節(jié)點(diǎn)”前,計(jì)算 cache A  hash 值:

Hash(“202.168.14.241”);

引入“虛擬節(jié)點(diǎn)”后,計(jì)算“虛擬節(jié)”點(diǎn) cache A1  cache A2  hash 值:

Hash(“202.168.14.241#1”);  // cache A1

Hash(“202.168.14.241#2”);  // cache A2

5 小結(jié)

Consistent hashing 的基本原理就是這些,具體的分布性等理論分析應(yīng)該是很復(fù)雜的,不過一般也用不到。

http://weblogs.java.net/blog/2007/11/27/consistent-hashing 上面有一個(gè) java 版本的例子,可以參考。

http://blog.csdn.net/mayongzhan/archive/2009/06/25/4298834.aspx 轉(zhuǎn)載了一個(gè) PHP 版的實(shí)現(xiàn)代碼。

http://www.codeproject.com/KB/recipes/lib-conhash.aspx C語言版本


 

一些參考資料地址:

http://portal.acm.org/citation.cfm?id=258660

http://en.wikipedia.org/wiki/Consistent_hashing

http://www.spiteful.com/2008/03/17/programmers-toolbox-part-3-consistent-hashing/

 http://weblogs.java.net/blog/2007/11/27/consistent-hashing

http://tech.idv2.com/2008/07/24/memcached-004/

http://blog.csdn.net/mayongzhan/archive/2009/06/25/4298834.aspx

posted on 2014-06-26 18:27 Gordooooon 閱讀(273) 評(píng)論(0)  編輯 收藏 引用


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美成人自拍视频| 午夜一区二区三视频在线观看 | 欧美激情麻豆| 欧美一区二区| 国产精品美女久久久浪潮软件| 亚洲欧洲精品一区二区精品久久久| 性色av一区二区三区| 一区二区三区高清视频在线观看| 美女在线一区二区| 欧美在线高清视频| 亚洲私人影院| 亚洲欧洲精品一区二区三区波多野1战4| 99re6这里只有精品视频在线观看| 欧美一区二区国产| 国产精品夜夜嗨| 欧美亚洲视频在线观看| 亚洲视频一区| 国产精品人成在线观看免费 | 久久久另类综合| 国模精品一区二区三区| 久久精品一区二区三区中文字幕| 午夜一区不卡| 激情五月婷婷综合| 欧美freesex交免费视频| 蜜乳av另类精品一区二区| 亚洲日本免费电影| 一区二区三区日韩欧美| 国产精品午夜国产小视频| 久久精品毛片| 久久久www成人免费精品| 亚洲欧洲日本在线| 99国产精品99久久久久久| 欧美精品亚洲一区二区在线播放| 在线一区二区三区四区五区| 亚洲综合99| 亚洲国产精品专区久久| 99视频一区二区| 狠狠网亚洲精品| 亚洲伦理一区| 国产一区清纯| 亚洲日本一区二区| 国产欧美日韩亚洲| 亚洲国产mv| 国产免费观看久久| 亚洲丁香婷深爱综合| 欧美婷婷在线| 嫩模写真一区二区三区三州| 欧美日韩综合在线| 久久综合色天天久久综合图片| 欧美激情第3页| 性做久久久久久| 男女av一区三区二区色多| 亚洲自啪免费| 欧美成人午夜剧场免费观看| 午夜国产精品视频| 老司机精品视频一区二区三区| 亚洲婷婷综合久久一本伊一区| 久久国产直播| 亚洲一区二三| 欧美大片va欧美在线播放| 久久成人国产精品| 欧美日韩一区二区三区高清| 快播亚洲色图| 国产农村妇女毛片精品久久麻豆| 亚洲欧洲一区二区三区| 黑人一区二区| 亚洲自拍偷拍网址| 欧美激情成人在线| 欧美日韩午夜剧场| 久久蜜桃资源一区二区老牛 | 亚洲欧洲美洲综合色网| 亚洲欧美日韩国产综合在线| 樱桃成人精品视频在线播放| 国产欧美激情| 国产日本亚洲高清| 国产精品日韩一区二区| 国产精品羞羞答答| 国产一区成人| 伊人狠狠色j香婷婷综合| 在线成人av| 亚洲激情中文1区| av成人毛片| 午夜精品久久久久久久久久久| 亚洲欧美国产精品va在线观看| 亚洲一区二区三区在线视频| 亚洲一区图片| 久久久久久久国产| 亚洲激情成人| 亚洲欧美久久久久一区二区三区| 亚洲欧美日韩一区在线| 久久av在线| 欧美日韩综合久久| 国产一区二区观看| 亚洲精品久久久久久下一站| 亚洲午夜三级在线| 老色鬼久久亚洲一区二区 | 欧美日韩国产精品一区二区亚洲 | 欧美成人国产一区二区| 欧美视频在线观看一区二区| 国产日韩欧美综合精品| 亚洲精品日韩在线| 久久久久se| 亚洲一区在线观看视频| 亚洲大片在线观看| 亚洲免费视频网站| 免费国产自线拍一欧美视频| 国产精品久久久久一区二区| 一区二区三区亚洲| 欧美亚洲日本国产| 一本一本久久| 免费在线观看日韩欧美| 在线观看一区欧美| 久久久久久97三级| 午夜精品影院| 国产日韩精品在线观看| 性欧美办公室18xxxxhd| 国产精品99久久久久久久女警| 欧美国产精品va在线观看| 亚洲欧洲精品一区二区三区| 美日韩在线观看| 美女国内精品自产拍在线播放| 黄色欧美日韩| 另类国产ts人妖高潮视频| 久久伊人免费视频| 亚洲人久久久| 99热在这里有精品免费| 国产裸体写真av一区二区| 性久久久久久久久久久久| 久久久www成人免费无遮挡大片| 国产午夜精品麻豆| 欧美激情精品久久久久久免费印度| 欧美国产精品v| 欧美一级网站| 欧美激情日韩| 久久噜噜亚洲综合| 欧美另类久久久品| 欧美在线观看一区二区| 久久婷婷麻豆| 亚洲欧美电影在线观看| 麻豆久久精品| 久久免费一区| 国产精品一区二区久激情瑜伽| 欧美成人午夜77777| 国产乱码精品1区2区3区| 欧美激情亚洲一区| 国产亚洲一区在线| 亚洲欧美制服中文字幕| aa级大片欧美三级| 欧美成人久久| 国产精品美女午夜av| 亚洲福利在线观看| 尹人成人综合网| 欧美亚洲综合在线| 欧美一区二区三区视频免费| 欧美激情久久久久| 欧美激情导航| 亚洲国产va精品久久久不卡综合| 亚洲素人在线| 小嫩嫩精品导航| 国产日韩亚洲欧美精品| 亚洲性色视频| 久久九九精品| 亚洲国产黄色片| 免费日韩一区二区| 亚洲精品在线观看免费| 亚洲视频在线观看一区| 国产精品成人aaaaa网站| 最新国产成人在线观看| 亚洲小少妇裸体bbw| 国产精品入口麻豆原神| 午夜视频一区| 欧美激情精品久久久久久蜜臀| 亚洲二区视频| 欧美日韩免费高清一区色橹橹| 一本综合久久| 久久亚洲图片| 亚洲私人影院| 亚洲国产精品久久久久秋霞影院| 欧美wwwwww| 亚洲欧美国内爽妇网| 免费欧美在线| 亚洲专区欧美专区| 在线观看中文字幕不卡| 欧美a级片网站| 一本色道久久综合亚洲精品按摩| 久久成人国产精品| 欧美 日韩 国产 一区| 夜夜嗨av一区二区三区网页| 国产精品一区二区你懂得 | 亚洲福利专区| 国产精品国产三级国产普通话蜜臀 | 亚洲激情视频在线| 国产亚洲精品久久久久动| 欧美大片va欧美在线播放| 欧美主播一区二区三区美女 久久精品人| 黑人一区二区| 国产精自产拍久久久久久蜜| 欧美人与性动交a欧美精品| 免费在线欧美视频| 嫩草国产精品入口|