在2023年由麻省理工學院提出的一種分布式雜湊(dht)實現演算法,設計目標是為了解決網際網路中的熱點(hot spot)問題
① 解決網際網路中的熱點問題;
② 基於分布式一致性演算法,實現p2p架構;(無單點)
hash(object)%n演算法;
如果有機器新增或者刪除後,原有的資料就會找不到了;
環形空間,[ 0 , 2^32 - 1];(將這些數字頭尾相連,形成乙個閉環)
例如:現在有node1,node2,node3三颱機器,通過hash演算法得到對應的key值,對映到環中。
將object1、object2、object3、object4四個物件通過特定的hash函式計算出對應的key值
hash(object1) = key1;
hash(object2) = key2;
hash(object3) = key3;
hash(object4) = key4;
這樣按順時針轉動object1儲存到了node1中;
object3儲存到了node2中;
object2、object4儲存到了node3中;
在這樣的部署環境中,hash環是不會變更的,因此,通過算出物件的hash值就能快速的定位到對應的機器中,這樣就能找到物件真正的儲存位置了;
/**
* 1.對所有50個節點,生成160個虛擬結點;
* 2.每四個虛擬結點為一組;
* 3.md5是乙個16位元組長度的陣列,將16位元組的陣列每四個位元組一組,分別對應乙個虛擬結點,這就是為什麼上面把虛擬結點四個劃分一組的原因;
* 4.對於每四個位元組,組成乙個long值數值,做為這個虛擬節點的在環中的惟一key;
** @param nodes
* @param algorithm
* @param virtualnodecount
*/public ketamanodelocator(listnodes, hashalgorithm algorithm, int virtualnodecount) }}
}/**
* 返回hash對應的節點
② 獲取16位的hash值,[ 0~4 , 5~8 , 9~12 , 13~16 ]
[ 0~4 ] = k1 (long值,2^32範圍內)
③ treemap.get(k1);
④ 返回key對應儲存資料的node節點;
/**
* 節點個數
*/private static final integer node_count = 50;
/*** 虛擬節點的個數
*/private static final integer virtual_node_count = 160;
public static void main(string args)
}
一致性hash演算法 面試必備 一致性hash演算法
最近公司在招人,我們準備的問題中有一道是關於一致性hash演算法的問題,只有一些面試者能夠回答上來,而且答的也不是很全面,有的面試者只是聽說過,有的連聽都沒聽過,下面我把一致性hash演算法整理一下分享給大家 一致性雜湊演算法在1997年由麻省理工學院的karger等人在解決分布式cache中提出的...
一致性hash演算法虛擬節點 一致性hash演算法
hash 演算法也叫做雜湊演算法,他可以讓任意長度的資料m對映成為長度固定的值h。hash演算法的第乙個作用就是資料的快速儲存與查詢。寫過程式的人都知道,基本上主流的程式語言裡面都有個資料結構叫做map dictionary或者 hash table 它是根據key來直接訪問結果的資料結構。key的...
一致性hash演算法
july部落格16章開始 第一題 全排列,輸入乙個字串,列印出該字串中字元的所有排列 1.個人思路 回溯法建立的排序樹 2.july部落格 遞迴實現,依次固定第乙個字母,後面的交換,和上面描述的使用回溯法相似 c stl 演算法 next permutation的思想,關於next permutat...