溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

什么是Java一致性Hash算法

發布時間:2021-11-05 17:02:40 來源:億速云 閱讀:147 作者:iii 欄目:web開發

這篇文章主要介紹“什么是Java一致性Hash算法”,在日常操作中,相信很多人在什么是Java一致性Hash算法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”什么是Java一致性Hash算法”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

數據分片

先讓我們看一個例子吧

我們經常會用 Redis 做緩存,把一些數據放在上面,以減少數據的壓力。

當數據量少,訪問壓力不大的時候,通常一臺Redis就能搞定,為了高可用,弄個主從也就足夠了;

當數據量變大,并發量也增加的時候,把全部的緩存數據放在一臺機器上就有些吃力了,畢竟一臺機器的資源是有限的,通常我們會搭建集群環境,讓數據盡量平均的放到每一臺  Redis 中,比如我們的集群中有 4 臺Redis。

那么如何把數據盡量平均地放到這 4 臺Redis中呢?最簡單的就是取模算法:

hash( key ) % N,N 為 Redis 的數量,在這里 N = 4 ;

什么是Java一致性Hash算法

看起來非常得美好,因為依靠這樣的方法,我們可以讓數據平均存儲到 4 臺 Redis 中,當有新的請求過來的時候,我們也可以定位數據會在哪臺 Redis  中,這樣可以精確地查詢到緩存數據。

02數據分片會遇到的問題

但是 4 臺 Redis 不夠了,需要再增加 4 臺 Redis ;

那么這個求余算法就會變成:hash( key ) % 8 ;

什么是Java一致性Hash算法

那么可以想象一下,當前大部分緩存的位置都會是錯誤的,極端情況下,就會造成 緩存雪崩。

03一致性 Hash 算法

一致性 Hash 算法可以很好地解決這個問題,它的大概過程是這樣的:

把 0 作為起點,2^32-1 作為終點,畫一條直線,再把起點和終點重合,直線變成一個圓,方向是順時針從小到大。0 的右側第一個點是 1 ,然后是 2  ,以此類推。

對三臺服務器的 IP 或其他關鍵字進行 hash 后對 2^32 取模,這樣勢必能落在這個圈上的某個位置,記為  Node1、Node2、Node3。

什么是Java一致性Hash算法

然后對數據 key 進行相同的操作,勢必也會落在圈上的某個位置;然后順時針行走,可以找到某一個 Node,這就是這個 key 要儲存的服務器。

什么是Java一致性Hash算法

如果增加一臺服務器或者刪除一臺服務器,只會影響 部分數據。

什么是Java一致性Hash算法

但如果節點太少或分布不均勻的時候,容易造成 數據傾斜,也就是大部分數據會集中在某一臺服務器上。

什么是Java一致性Hash算法

為了解決數據傾斜問題,一致性 Hash 算法提出了【虛擬節點】,會對每一個服務節點計算多個哈希,然后放到圈上的不同位置。

什么是Java一致性Hash算法

當然我們也可以發現,一致性 Hash 算法,也只是解決大部分數據的問題。

到此,關于“什么是Java一致性Hash算法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女