一致性Hash原理解析

2021-09-26 11:05:00 字數 884 閱讀 2964

一.什麼是一致性hash演算法?

顧名思義,該演算法為了解決hash演算法一致性問題,一般的hash演算法,採用hash(比如使用者id)%n,當新增或下線伺服器時,使用者id與伺服器的對映關係會大量失效。一致性hash則利用了hash環對其進行了改進,對最大整數(2^23)取模。

具體實現思路:首先將n臺伺服器的ip位址對映到hash環上,然後對使用者id同樣對映到hash環,在環上伺服器之間左側的使用者id會交給該伺服器處理。

二.應用場景?

主要應用於分布式、負載均衡等

例如:你有 n 個 cache 伺服器,那麼如何將乙個物件object 對映到 n 個 cache 上呢,你很可能會採用取模(key%n)的方法計算 object 的 hash 值,然後均勻的對映到到 n 個 cache伺服器。當乙個伺服器掛了或者增加了乙個,那麼得到的hash值=key%(n-1)(或者key%(n+1)),造成的後果大量的快取在同一時間失效,大量請求壓在後端伺服器上,造成快取雪崩,這不是我們想看到的。

三.一致性hash實現:

1、首先計算出每個節點的hash值,並將其配置到0~(2的32次方)的圓(continuum)上。

2、用同樣的hash函式計算出儲存資料的hash值,並對映到相同的圓上。

3、然後從資料對映到的位置開始順時針查詢,將資料儲存到找到的第乙個節點上。如果超過(2的32次方)仍然找不到伺服器,就會儲存到第一台memcached伺服器上。

風險均攤,同時避免快取雪崩,同時引入虛擬節點連線物理機器分配資料儲存位址,保障新增伺服器後資料處理壓力均攤。

解決一致性hash偏斜問題,增加虛擬節點(複製已有節點)。

Hash環 一致性Hash原理

當前,memcached redis這類分布式kv快取已經非常普遍。從本篇開始,本系列將分析分布式快取相關的原理 使用策略和最佳實踐。我們知道memcached的分布式其實是一種 偽分布式 也就是它的伺服器結點之間其實是相互無關聯的,之間沒有網路拓撲關係,由客戶端來決定乙個key是存放到哪台機器。具...

一致性hash演算法 面試必備 一致性hash演算法

最近公司在招人,我們準備的問題中有一道是關於一致性hash演算法的問題,只有一些面試者能夠回答上來,而且答的也不是很全面,有的面試者只是聽說過,有的連聽都沒聽過,下面我把一致性hash演算法整理一下分享給大家 一致性雜湊演算法在1997年由麻省理工學院的karger等人在解決分布式cache中提出的...

一致性hash演算法虛擬節點 一致性hash演算法

hash 演算法也叫做雜湊演算法,他可以讓任意長度的資料m對映成為長度固定的值h。hash演算法的第乙個作用就是資料的快速儲存與查詢。寫過程式的人都知道,基本上主流的程式語言裡面都有個資料結構叫做map dictionary或者 hash table 它是根據key來直接訪問結果的資料結構。key的...