一致性哈希算法的基本原理
題目:
工程師使用服務(wù)器集群來設(shè)計和實(shí)現(xiàn)數(shù)據(jù)緩存,以下是常見的策略
1、無論是添加、查詢還是刪除數(shù)據(jù),都先將數(shù)據(jù)的id通過哈希函數(shù)轉(zhuǎn)化為一個哈希值,標(biāo)記為key
2、如果目前機(jī)器有N臺,則計算key%N的值,這個值就是該數(shù)據(jù)所屬的機(jī)器編號,無論是添加、刪除還是查詢操作,都只在這臺機(jī)器上進(jìn)行
請分析這種緩存策略可能帶來的問題,并提出改進(jìn)的方案
?
潛在問題是添加或刪除機(jī)器,代價會很高,所有的數(shù)據(jù)都需要重新計算一下key值,然后對新的機(jī)器數(shù)取模操作,然后進(jìn)行大規(guī)模數(shù)據(jù)遷移
為了解決問題,提出一致性哈希算法,哈希值范圍是2^32,也就是0-2^32-1數(shù)字空間中
?
首先把該數(shù)據(jù)的id用哈希函數(shù)算出哈希值,并映射到環(huán)中相應(yīng)位置,然后順時針尋找離這個位置最近的機(jī)器,那臺機(jī)器就是該數(shù)據(jù)的歸屬如圖1所示,圖2表示刪除機(jī)器和增加機(jī)器數(shù)據(jù)還是順時針找到最近的機(jī)器
還存在的問題就是機(jī)器負(fù)載不均衡,解決辦法就是一致性哈希算法引入虛擬節(jié)點(diǎn)機(jī)制,即對每一臺機(jī)器通過不同的哈希函數(shù)計算出多個哈希值,對多個位置都放置一個服務(wù)節(jié)點(diǎn),稱為虛擬節(jié)點(diǎn),如圖3所示
也就是說我們讓每臺機(jī)器分配數(shù)量較多的虛擬節(jié)點(diǎn)去搶占哈希環(huán),數(shù)量多起來之后,哈希函數(shù)的離散性就可以得到很好的體現(xiàn),然后每臺機(jī)器就可以按照虛擬節(jié)點(diǎn)的比例來分配負(fù)載均衡啦,這就是虛擬節(jié)點(diǎn)技術(shù)。
總結(jié)
以上是生活随笔為你收集整理的一致性哈希算法的基本原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 找到100亿个URL中重复的URL及搜索
- 下一篇: 岛问题