對一致性hash演算法的理解

2021-08-09 21:13:26 字數 1083 閱讀 6560

首先說明其用途,目前主要用在分布式快取中。

為什麼使用一致性hash:

假設有n個快取伺服器,普通的快取策略是hash(obj)%n,當其中乙個伺服器掛掉,或者伺服器不夠而需要新增伺服器時,快取策略需要改變成hash(onj)%(n-1)或(n+1),這也就意味著所有的快取全部失效,那所有的訪問都會到後台伺服器,是不是想到了鹿晗和關曉彤,恐怖!程式設計師結婚還得中途暫停,去修復伺服器。

所以就有了一致性hash,那一致性hash怎麼就解決了上述的問題了呢?我們希望的是,當刪除或者新增伺服器節點時,盡量少的影響已經快取的內容。如下圖所示,想象出乙個環,通過相同的hash演算法,將伺服器和快取內容hash到環上的某乙個位置,然後快取內容只需順時針找到離它最近的伺服器進行快取即可。這就是一致性hash。

那這麼做有什麼優點呢?剛才說一致性hash演算法當刪除或新增伺服器時能夠減少快取失效的數量,還是如上圖,當圖中紅色快取內容對應的伺服器掛掉後,只有它自己快取失效,其他物件均沒有影響。同理,增加伺服器也只會影響到部分內容。

當然,這樣做存在一定問題,就是在極端情況下,如下圖所示,伺服器「扎堆了」,所有快取或者說很大一部分內容都被快取到了同一臺伺服器上,這樣的一致性hash跟普通hash還有什麼區別!

然後就有了虛擬節點的概念,首先看下圖,其中每種顏色對應兩個伺服器(當然,也可以有多個),其實他們都是某個真實的伺服器虛擬出來的,我的理解是給某個伺服器起了多個名字,這樣它就能存在多個地方(當然不是真的存在,可以把虛擬節點想象成乙個類似**的東西,多個**,最後快取當然還是放在真實的伺服器上),這樣就比較均衡了。

以上。個人理解,有錯誤和不當之處,還請多多批評。圍笑。

一致性hash演算法的理解

用hash做快取,假如有三颱伺服器,1,2,3,有三萬張,我想將平均快取到我三颱伺服器上,乙個伺服器大概一萬張,怎麼去實現這個辦法呢,可以用hash來取餘數進行操作,加入我們是以的名字作為key進行hash計算,hash 名稱 n 其中n為我們伺服器的個數,我們將hash 名稱 這一部分進行計算後得...

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

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

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

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