一致性hash演算法

2021-08-27 22:55:27 字數 2049 閱讀 4152

在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...