1. 程式人生 > >一致性雜湊演算法(consistent hash)的黑科技

一致性雜湊演算法(consistent hash)的黑科技

這是一個來自Google的零記憶體消耗、均勻、快速、簡潔的一致性雜湊演算法 – Jump Consistent Hash

演算法的作者是Google的John Lamping和Eric Veach,論文原文連結 – 點這裡,一些討論 – 點這裡

整篇文章基於對論文原文的翻譯,摻雜自己的一些思想理解,以及對該演算法程式碼的適應場景分析修改,水平有限,難免有偏差:D

一致性雜湊(Jump Consistent Hash)演算法設計目標

平衡性,把物件均勻地分佈在所有桶中。

單調性,當桶的數量變化時,只需要把一些物件從舊桶移動到新桶,不需要做其它移動。

簡單理解就是:m個物件,n個桶,每個桶分到的物件應該在m/n個左右,誤差不應太大;在桶增加或者桶減少1時,影響到的物件應該也在m/n個左右,其餘物件不受影響。

滿足這些目標,Jump Consistent Hash的總體設計思路是:計算當bucket數量變化時,有哪些輸出需要變化

直接上程式碼

01 02 03 04 05 06 07 08 09 10 11 12 int32_t ch(int64_t key, int32_t num_buckets) { srand(key); int32_t b = -1; int32_t j = 0; while (j < num_buckets) {
b = j; double r = rand() / (double)RAND_MAX; j = floor((b + 1) / r); } return b; }

測試用例與輸出

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
理解一致性演算法(consistent hashing)

根據上面的圖解分析,一致性雜湊演算法滿足了單調性和負載均衡的特性以及一般hash演算法的分散性,但這還並不能當做其被廣泛應用的原由,因為還缺少了平衡性。下面將分析一致性雜湊演算法是如何滿足平衡性的。hash演算法是不保證平衡的,如上面只部署了NODE1和NODE3的情況(NODE2被刪除的圖),object1

LintCode Consistent Hashing一致性演算法

一般的資料庫進行horizontal shard的方法是指,把 id 對 資料庫伺服器總數 n 取模,然後來得到他在哪臺機器上。這種方法的缺點是,當資料繼續增加,我們需要增加資料庫伺服器,將 n 變為 n+1 時,幾乎所有的資料都要移動,這就造成了不 consistent。為了減少這種 naive 的 ha

一致性 hash 演算法 consistent hashing

1 基本場景 比如你有 N 個 cache 伺服器(後面簡稱 cache ),那麼如何將一個物件 object 對映到 N 個 cache 上呢,你很可能會採用類似下面的通用方法計算 object 的 hash 值,然後均勻的對映到到 N 個 cache hash(obj

圖解一致性演算法,全網小區區域網最通俗易懂

很多同學應該都知道什麼是雜湊函式,在後端面試和開發中會遇到「一致性雜湊」,那麼什麼是一致性雜湊呢?名字聽起來很厲害的樣子,其實原理並不複雜,這篇文章帶你徹底搞懂一致性雜湊! 進入主題前,先來一場緊張刺激的模擬面試吧。 ![模擬面試表情.png](https://i.loli.net/2020/07/31/f

ELFhash 字串演算法以ELFHash詳解

字串雜湊演算法(以ELFHash詳解)   更多字串雜湊演算法請參考:http://blog.csdn.net/AlburtHoffman/article/details/19641123 先來了解一下何為雜湊: 雜湊表是根據設定的雜湊函式H(key)和處

1109:演算法

目錄 帶著問題來學習: 一、雜湊演算法在分散式系統中的應用 1.負載均衡 1.1.需求 1.2.常規解決方案 1.3.完美解決方案 2.資料分片 2.1.如何統計“搜尋關鍵詞”出現的次數? 2.2.如何快速判斷圖片是否存在相簿中? 3.分散式儲存 3.

1107:演算法

目錄 帶著問題來學習 一、什麼是雜湊演算法? 1.定義 2.如何設計一個優秀的雜湊演算法? 二、雜湊演算法的常見應用有哪些? 1.安全加密 2.唯一標識 3.資料校驗 4.雜湊函式 三、思考 帶著問題來學習: 如何防止資料庫中的使用者資訊被脫庫

data_structure_and_algorithm -- 演算法演算法在分散式系統中有哪些應用?

今天主要看一下雜湊演算法的應用(二),主要參考:前谷歌工程師王爭的課程,感興趣可以通過下面方式微信掃碼購買: 你可能已經發現,這三個應用都跟分散式系統有關。沒錯,今天我就帶你看下,雜湊演算法是如何解決這些分散式問題的。 應用五:負載均衡 我們知道,負載均衡演算法

每天進步一點點——五分鐘理解一致性演算法(consistent hashing)

根據上面的圖解分析,一致性雜湊演算法滿足了單調性和負載均衡的特性以及一般hash演算法的分散性,但這還並不能當做其被廣泛應用的原由,因為還缺少了平衡性。下面將分析一致性雜湊演算法是如何滿足平衡性的。hash演算法是不保證平衡的,如上面只部署了NODE1和NODE3的情況(NODE2被刪除的圖),object1

一致性HashConsistent Hash

一致性Hash演算法簡介 一致性Hash演算法是在1997年由麻省理工提出的一種分散式Hash實現演算法,設計的目標是為了解決英特網中的熱點問題。 一致性Hash演算法提出了在動態變化的Cache環境中,判定Hash演算法好壞的四個定義。 平衡性(Bal

一致性演算法(consistent hashing)

本文要解決的問題: 從原理上理解一致性雜湊演算法。 轉自:http://blog.csdn.net/cywosp/article/details/23397179/ 一致性雜湊演算法在1997年由麻省理工學院提出的一種分散式雜湊(DHT)實現演算法,設計目標是為了解決

詳解一致性演算法(consistent hashing)

根據上面的圖解分析,一致性雜湊演算法滿足了單調性和負載均衡的特性以及一般hash演算法的分散性,但這還並不能當做其被廣泛應用的原由,因為還缺少了平衡性。下面將分析一致性雜湊演算法是如何滿足平衡性的。hash演算法是不保證平衡的,如上面只部署了NODE1和NODE3的情況(NODE2被刪除的圖),object1

[轉]理解一致性演算法(consistent hashing)

[size=medium]一致性雜湊演算法原理[url]http://www.cnblogs.com/lpfuture/p/5796398.html[/url]白話解析一致性雜湊演算法(Excellent)[url]http://www.zsythink.net/archiv

Consistent Hashing 一致性演算法

按照我的理解方式 就是將所有的cache伺服器的標識分別hash到的值分佈到0-pow(2,32)中. 然後將你要取的key的hash值進行比較。取第一個大於key的hash值的伺服器。 如果從0-pow(2,32)也沒有找到,那麼則取最小hash值的伺服器。例如 上圖中, 伺服器 a 的hash值 為 1,