国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

一致性哈希算法與Java實(shí)現(xiàn)

企業(yè)動(dòng)態(tài) 算法
一致性哈希算法在1997年由麻省理工學(xué)院提出的一種分布式哈希(DHT)實(shí)現(xiàn)算法,設(shè)計(jì)目標(biāo)是為了解決因特網(wǎng)中的熱點(diǎn)(Hot spot)問題,初衷和CARP十分類似。一致性哈希修正了CARP使用的簡 單哈希算法帶來的問題,使得分布式哈希(DHT)可以在P2P環(huán)境中真正得到應(yīng)用。

一致性哈希算法在1997年由麻省理工學(xué)院提出的一種分布式哈希(DHT)實(shí)現(xiàn)算法,設(shè)計(jì)目標(biāo)是為了解決因特網(wǎng)中的熱點(diǎn)(Hot spot)問題,初衷和CARP十分類似。一致性哈希修正了CARP使用的簡 單哈希算法帶來的問題,使得分布式哈希(DHT)可以在P2P環(huán)境中真正得到應(yīng)用。

一致性hash算法提出了在動(dòng)態(tài)變化的Cache環(huán)境中,判定哈希算法好壞的四個(gè)定義:

1、平衡性(Balance):平衡性是指哈希的結(jié)果能夠盡可能分布到所有的緩沖中去,這樣可以使得所有的緩沖空間都得到利用。很多哈希算法都能夠滿足這一條件。

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

3、分散性(Spread):在分布式環(huán)境中,終端有可能看不到所有的緩沖,而是只能看到其中的一部分。當(dāng)終端希望通過哈希過程將內(nèi)容映射到緩沖上時(shí),由于不同終端所見的緩沖范圍有可能不同,從而導(dǎo)致哈希的結(jié)果不一致,最終的結(jié)果是相同的內(nèi)容被不同的終端映射到不同的緩沖區(qū)中。這種情況顯然是應(yīng)該避免的,因?yàn)樗鼘?dǎo)致相同內(nèi)容被存儲(chǔ)到不同緩沖中去,降低了系統(tǒng)存儲(chǔ)的效率。分散性的定義就是上述情況發(fā)生的嚴(yán)重程度。好的哈希算法應(yīng)能夠盡量避免不一致的情況發(fā)生,也就是盡量降低分散性。

4、負(fù)載(Load):負(fù)載問題實(shí)際上是從另一個(gè)角度看待分散性問題。既然不同的終端可能將相同的內(nèi)容映射到不同的緩沖區(qū)中,那么對(duì)于一個(gè)特定的緩沖區(qū)而言,也可能被不同的用戶映射為不同 的內(nèi)容。與分散性一樣,這種情況也是應(yīng)當(dāng)避免的,因此好的哈希算法應(yīng)能夠盡量降低緩沖的負(fù)荷。

在分布式集群中,對(duì)機(jī)器的添加刪除,或者機(jī)器故障后自動(dòng)脫離集群這些操作是分布式集群管理最基本的功能。如果采用常用的hash(object)%N算法,那么在有機(jī)器添加或者刪除后,很多原有的數(shù)據(jù)就無法找到了,這樣嚴(yán)重的違反了單調(diào)性原則。接下來主要講解一下一致性哈希算法是如何設(shè)計(jì)的:

環(huán)形Hash空間

按照常用的hash算法來將對(duì)應(yīng)的key哈希到一個(gè)具有2^32次方個(gè)桶的空間中,即0~(2^32)-1的數(shù)字空間中。現(xiàn)在我們可以將這些數(shù)字頭尾相連,想象成一個(gè)閉合的環(huán)形。如下圖   

 

把數(shù)據(jù)通過一定的hash算法處理后映射到環(huán)上

現(xiàn)在我們將object1、object2、object3、object4四個(gè)對(duì)象通過特定的Hash函數(shù)計(jì)算出對(duì)應(yīng)的key值,然后散列到Hash環(huán)上。如下圖:

Hash(object1) = key1;

Hash(object2) = key2;

Hash(object3) = key3;

Hash(object4) = key4;  

 

 

將機(jī)器通過hash算法映射到環(huán)上

在采用一致性哈希算法的分布式集群中將新的機(jī)器加入,其原理是通過使用與對(duì)象存儲(chǔ)一樣的Hash算法將機(jī)器也映射到環(huán)中(一般情況下對(duì)機(jī)器的hash計(jì)算是采用機(jī)器的IP或者機(jī)器唯一的別名作為輸入值),然后以順時(shí)針的方向計(jì)算,將所有對(duì)象存儲(chǔ)到離自己最近的機(jī)器中。

假設(shè)現(xiàn)在有NODE1,NODE2,NODE3三臺(tái)機(jī)器,通過Hash算法得到對(duì)應(yīng)的KEY值,映射到環(huán)中,其示意圖如下:

Hash(NODE1) = KEY1;

Hash(NODE2) = KEY2;

Hash(NODE3) = KEY3;  

 

 

通過上圖可以看出對(duì)象與機(jī)器處于同一哈希空間中,這樣按順時(shí)針轉(zhuǎn)動(dòng)object1存儲(chǔ)到了NODE1中,object3存儲(chǔ)到了NODE2中,object2、object4存儲(chǔ)到了NODE3中。在這樣的部署環(huán)境中,hash環(huán)是不會(huì)變更的,因此,通過算出對(duì)象的hash值就能快速的定位到對(duì)應(yīng)的機(jī)器中,這樣就能找到對(duì)象真正的存儲(chǔ)位置了。

機(jī)器的刪除與添加

普通hash求余算法最為不妥的地方就是在有機(jī)器的添加或者刪除之后會(huì)照成大量的對(duì)象存儲(chǔ)位置失效,這樣就大大的不滿足單調(diào)性了。下面來分析一下一致性哈希算法是如何處理的。

1. 節(jié)點(diǎn)(機(jī)器)的刪除

以上面的分布為例,如果NODE2出現(xiàn)故障被刪除了,那么按照順時(shí)針遷移的方法,object3將會(huì)被遷移到NODE3中,這樣僅僅是object3的映射位置發(fā)生了變化,其它的對(duì)象沒有任何的改動(dòng)。如下圖:  

 

 

2. 節(jié)點(diǎn)(機(jī)器)的添加

如果往集群中添加一個(gè)新的節(jié)點(diǎn)NODE4,通過對(duì)應(yīng)的哈希算法得到KEY4,并映射到環(huán)中,如下圖:  

 

 

通過按順時(shí)針遷移的規(guī)則,那么object2被遷移到了NODE4中,其它對(duì)象還保持這原有的存儲(chǔ)位置。通過對(duì)節(jié)點(diǎn)的添加和刪除的分析,一致性哈希算法在保持了單調(diào)性的同時(shí),還是數(shù)據(jù)的遷移達(dá)到了最小,這樣的算法對(duì)分布式集群來說是非常合適的,避免了大量數(shù)據(jù)遷移,減小了服務(wù)器的的壓力。

平衡性

根據(jù)上面的圖解分析,一致性哈希算法滿足了單調(diào)性和負(fù)載均衡的特性以及一般hash算法的分散性,但這還并不能當(dāng)做其被廣泛應(yīng)用的原由,因?yàn)檫€缺少了平衡性。下面將分析一致性哈希算法是如何滿足平衡性的。hash算法是不保證平衡的,如上面只部署了NODE1和NODE3的情況(NODE2被刪除的圖),object1存儲(chǔ)到了NODE1中,而object2、object3、object4都存儲(chǔ)到了NODE3中,這樣就照成了非常不平衡的狀態(tài)。在一致性哈希算法中,為了盡可能的滿足平衡性,其引入了虛擬節(jié)點(diǎn)。

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

以上面只部署了NODE1和NODE3的情況(NODE2被刪除的圖)為例,之前的對(duì)象在機(jī)器上的分布很不均衡,現(xiàn)在我們以2個(gè)副本(復(fù)制個(gè)數(shù))為例,這樣整個(gè)hash環(huán)中就存在了4個(gè)虛擬節(jié)點(diǎn),***對(duì)象映射的關(guān)系圖如下: 

 

根據(jù)上圖可知對(duì)象的映射關(guān)系:object1->NODE1-1,object2->NODE1-2,object3->NODE3-2,object4->NODE3-1。通過虛擬節(jié)點(diǎn)的引入,對(duì)象的分布就比較均衡了。那么在實(shí)際操作中,正真的對(duì)象查詢是如何工作的呢?對(duì)象從hash到虛擬節(jié)點(diǎn)到實(shí)際節(jié)點(diǎn)的轉(zhuǎn)換如下圖: 

 

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

Hash(“192.168.1.100”);

引入“虛擬節(jié)點(diǎn)”后,計(jì)算“虛擬節(jié)”點(diǎn)NODE1-1和NODE1-2的hash值:

Hash(“192.168.1.100#1”); // NODE1-1

Hash(“192.168.1.100#2”); // NODE1-2

Java實(shí)現(xiàn): 

  1. public class Shard<S> { // S類封裝了機(jī)器節(jié)點(diǎn)的信息 ,如namepassword、ip、port等    
  2.     private TreeMap<Long, S> nodes; // 虛擬節(jié)點(diǎn)    
  3.     private List<S> shards; // 真實(shí)機(jī)器節(jié)點(diǎn)    
  4.     private final int NODE_NUM = 100; // 每個(gè)機(jī)器節(jié)點(diǎn)關(guān)聯(lián)的虛擬節(jié)點(diǎn)個(gè)數(shù)    
  5.     public Shard(List<S> shards) {   
  6.         super();   
  7.         this.shards = shards;   
  8.         init();   
  9.     }   
  10.     private void init() { // 初始化一致性hash環(huán)    
  11.         nodes = new TreeMap<Long, S>();   
  12.         for (int i = 0; i != shards.size(); ++i) { // 每個(gè)真實(shí)機(jī)器節(jié)點(diǎn)都需要關(guān)聯(lián)虛擬節(jié)點(diǎn)    
  13.             final S shardInfo = shards.get(i);   
  14.             for (int n = 0; n < NODE_NUM; n++)   
  15.                 // 一個(gè)真實(shí)機(jī)器節(jié)點(diǎn)關(guān)聯(lián)NODE_NUM個(gè)虛擬節(jié)點(diǎn)    
  16.                 nodes.put(hash("SHARD-" + i + "-NODE-" + n), shardInfo);   
  17.         }   
  18.     }   
  19.     public S getShardInfo(String key) {   
  20.         SortedMap<Long, S> tail = nodes.tailMap(hash(key)); // 沿環(huán)的順時(shí)針找到一個(gè)虛擬節(jié)點(diǎn)    
  21.         if (tail.size() == 0) {   
  22.             return nodes.get(nodes.firstKey());   
  23.         }   
  24.         return tail.get(tail.firstKey()); // 返回該虛擬節(jié)點(diǎn)對(duì)應(yīng)的真實(shí)機(jī)器節(jié)點(diǎn)的信息    
  25.     }   
  26.     /**  
  27.      *  MurMurHash算法,是非加密HASH算法,性能很高,  
  28.      *  比傳統(tǒng)的CRC32,MD5,SHA-1(這兩個(gè)算法都是加密HASH算法,復(fù)雜度本身就很高,帶來的性能上的損害也不可避免)  
  29.      *  等HASH算法要快很多,而且據(jù)說這個(gè)算法的碰撞率很低.  
  30.      *  http://murmurhash.googlepages.com/  
  31.      */  
  32.     private Long hash(String key) {       
  33.         ByteBuffer buf = ByteBuffer.wrap(key.getBytes());   
  34.         int seed = 0x1234ABCD;   
  35.         ByteOrder byteOrder = buf.order();   
  36.         buf.order(ByteOrder.LITTLE_ENDIAN);   
  37.         long m = 0xc6a4a7935bd1e995L;   
  38.         int r = 47;   
  39.         long h = seed ^ (buf.remaining() * m);   
  40.         long k;   
  41.         while (buf.remaining() >= 8) {   
  42.             k = buf.getLong();   
  43.             k *= m;   
  44.             k ^= k >>> r;   
  45.             k *= m;   
  46.             h ^= k;   
  47.             h *= m;   
  48.         }   
  49.         if (buf.remaining() > 0) {   
  50.             ByteBuffer finish = ByteBuffer.allocate(8).order(   
  51.                     ByteOrder.LITTLE_ENDIAN);   
  52.             // for big-endian version, do this first:    
  53.             // finish.position(8-buf.remaining());    
  54.             finish.put(buf).rewind();   
  55.             h ^= finish.getLong();   
  56.             h *= m;   
  57.         }   
  58.         h ^= h >>> r;   
  59.         h *= m;   
  60.         h ^= h >>> r;   
  61.         buf.order(byteOrder);   
  62.         return h;   
  63.     }   
  64.  

【本文為51CTO專欄作者“王森豐”的原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)注明出處】

責(zé)任編輯:龐桂玉 來源: 神算子
相關(guān)推薦

2021-02-05 08:00:48

哈希算法?機(jī)器

2025-09-08 07:25:16

2021-07-27 08:57:10

算法一致性哈希哈希算法

2020-07-20 08:30:37

算法哈希分布式系統(tǒng)

2021-02-02 12:40:50

哈希算法數(shù)據(jù)

2021-09-15 07:46:42

哈希一致性哈希算法

2023-12-12 08:00:50

節(jié)點(diǎn)哈希算法

2018-07-05 09:41:08

一致性哈希算法

2019-11-01 09:13:37

算法哈希緩存

2022-11-10 07:49:09

hash算法代碼

2017-07-25 14:38:56

數(shù)據(jù)庫一致性非鎖定讀一致性鎖定讀

2023-06-25 09:44:00

一致性哈希數(shù)據(jù)庫

2016-02-15 10:46:40

JavaHash算法

2023-06-26 07:17:48

負(fù)載均衡策略Dubbo

2022-03-22 09:54:22

Hash算法

2023-12-20 08:11:02

Redis節(jié)點(diǎn)通信

2023-12-09 14:30:29

哈希數(shù)據(jù)分片

2020-11-24 09:03:41

一致性MySQLMVCC

2023-12-05 14:44:01

2021-11-12 08:38:26

一致性哈希算法數(shù)據(jù)結(jié)構(gòu)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

亚洲激情成人| 欧洲国产伦久久久久久久| 国产精品亚洲综合天堂夜夜| 美女写真理伦片在线看| 成人污污视频在线观看| 国产高清不卡av| 国产成人精品亚洲线观看| 亚洲第一av网站| 天堂av电影在线观看| 91丨九色丨尤物| 麻豆一区区三区四区产品精品蜜桃| 韩国女主播一区二区三区| 日韩精品视频在线免费观看| 国产中文字幕在线视频| 亚洲日本丝袜连裤袜办公室| 日本丰满少妇xxxx| 日本美女一区二区| 国产精品久久亚洲7777| 免费看成人哺乳视频网站| 久久夜色撩人精品| 都市激情亚洲综合| 精品久久一区二区| av网站无病毒在线| 亚洲午夜日本在线观看| 97在线免费| 久久综合给合久久狠狠狠97色69| 亚洲免费av网| 国产精品嫩草99av在线| 97久久人人超碰caoprom欧美| 精品国产aⅴ| 91大神福利视频在线| 日韩视频一二区| 久久久国产一区| 中文字幕日韩亚洲| 日韩在线免费av| 成人免费av电影| 欧美精品一区男女天堂| a在线免费观看| 欧美一区二区大片| 麻豆传媒视频在线| 欧美老女人在线| 淫片在线观看| 欧美日韩视频在线观看一区二区三区 | www.亚洲高清| 国产在线精品一区二区| 欧美日韩精品久久久免费观看| 欧美久久综合| 国产精品国产三级欧美二区| 欧美午夜一区二区福利视频| 亚洲一区二区三区在线免费观看 | 91精品国模一区二区三区| 国产高清视频在线| 色菇凉天天综合网| 欧美成人三区| 亚洲国产福利在线| 99久久伊人| 色视频www在线播放国产成人| 成人国产精品入口免费视频| 日韩一区视频在线| 欧美视频三区| 日韩美女在线观看一区| 午夜免费一区| 91视频免费在线观看| 国产精品一页| 蜜臀av性久久久久蜜臀av| 99精品视频在线免费观看| 国产福利在线免费| 婷婷夜色潮精品综合在线| 77777影视视频在线观看| 亚洲精品一区二区在线观看| 99久久婷婷国产综合精品首页 | 久久久久久久久蜜桃| 男插女免费视频| 亚州欧美一区三区三区在线| 国产一二精品视频| www日韩在线观看| 亚洲国产精品久久不卡毛片| 国产在线观看高清视频| 亚洲福利影片在线| 欧美黄色网络| 国产一区红桃视频| 久久99久久久欧美国产| 成人免费网站视频www| 欧美色综合久久| 久久三级毛片| 3d蒂法精品啪啪一区二区免费| 久久精品久久精品| 久久mv成人精品亚洲动漫| 91精品国产入口| 国产电影一区| 精品不卡在线| 中文字幕第一区第二区| 国产高清在线看| 亚洲视频视频在线| av在线不卡顿| 无码日本精品xxxxxxxxx| 亚洲一区二区在线观看视频| 91破解版在线观看| 国产精品久久久久久久久久久久久久| 日本啊v在线| 欧日韩免费视频| 亚洲天堂男人天堂| 香蕉久久国产| 日本在线观看天堂男亚洲| 亚洲精品看片| 国产成人无码一二三区视频| 无遮挡在线观看| 亚洲精品欧美专区| 天堂中文av在线资源库| 国产欧美最新羞羞视频在线观看| 激情综合网最新| 亚洲52av| 韩国日本不卡在线| 另类人妖一区二区av| 亚洲日本一区二区三区在线观看| 色偷偷av亚洲男人的天堂| 亚洲视频成人| 中出在线观看| 欧美成人在线免费视频| 日韩国产欧美一区二区三区| 天堂男人av| 不卡中文字幕av| 丝袜亚洲另类欧美综合| 簧片在线观看| 久久久久北条麻妃免费看| 青椒成人免费视频| 麻豆导航在线观看| 韩国精品久久久999| www.99精品| 激情国产在线| 精品乱色一区二区中文字幕| 亚洲精品一卡二卡| av毛片精品| www.日日操| 久久久国产精品一区| 国产精品1区二区.| 91美女主播在线视频| 久久国产精品99久久久久久丝袜 | 国产精品一区专区| www在线观看播放免费视频日本| 成人午夜两性视频| 亚洲另类中文字| 波多野结衣一区二区三区免费视频| 亚洲 欧洲 日韩| 亚洲国产精品人人爽夜夜爽| 亚洲免费网址| 国产丝袜在线| 免费在线国产精品| 在线观看亚洲精品| 欧美成人日韩| 日本一区高清| 成人黄色免费网站在线观看| 亚洲综合男人的天堂| 国产毛片一区二区三区| www.大网伊人| 欧美综合在线观看| 一区二区三区中文在线| 国产精品一线天粉嫩av| 可播放的18gay1069| 国产精品久久激情| 精品福利在线视频| 欧美日韩蜜桃| 成人黄视频在线观看| 欧美亚洲国产免费| 51精品国产| 成人在线精品视频| 日韩欧美在线观看| 伊人久久婷婷| 91探花在线观看| 日本免费a视频| 欧美成人精品在线播放| 中文字幕在线观看不卡视频| 免费欧美视频| 第一福利在线| 亚洲人体一区| 久久久999精品| 亚洲男人天堂av| 欧美精品麻豆| 午夜av在线免费观看| av中文字幕av| 欧美老妇交乱视频| 一区二区激情小说| 激情综合激情| 日韩电影毛片| 天天干天天玩天天操| 91久久精品国产91久久| 欧美日韩黄色一区二区| 九色|91porny| 视频二区欧美| 一二三在线视频社区| 日韩精品国内| 欧美xxxx14xxxxx性爽| 亚洲黄色免费电影| 亚洲神马久久| www 久久久| 欧美日韩影视| 少妇大叫太大太粗太爽了a片小说| 8x海外华人永久免费日韩内陆视频 | 色播五月综合网| 91香蕉电影院|