一致性哈希 与 普通哈希对比
普通哈希算法
假如有cache主機5臺分別為cacheA、cacheB、cacheC、cacheD、cacheE
當程序進行hash時,首先每個節點要根據自己的唯一參數哈希出一個值來(如根據ip進行哈希)
主機哈希完成后形成的哈希值如下
cacheA 0
cacheB1
cacheC 2
cacheD 3
cacheE 4
主機形成哈希值后,我們以緩存來做實例,比如某個用戶登錄后會有一個唯一的pin值,然后根據
這個pin值進行hash求余。因為求余是用5來求余,所以數值肯定會小宇5 因此就有了落點,然后把
緩存數據進行緩存到落點服務器中
一致性哈希算法
假如有cache主機5臺分別為cacheA、cacheB、cacheC、cacheD、cacheE
當程序進行hash時,首先每個節點要根據自己的唯一參數哈希出一個值來(如根據ip進行哈希)
主機哈希完成后形成的哈希值如下
cacheA key1
cacheBkey2
cacheC key3
cacheD key4
cacheE key5
然后5臺節點圍繞稱一個環形,如圖
主機形成哈希值后,我們以緩存來做實例,比如某個用戶登錄后會有一個唯一的pin值,然后根據
這個pin值進行hash。這里注意和普通hash不一樣的就是這里只hash不求余,當hash出一個數值
后,查看這個這個值介于那兩個值之間比如介于key4和key5之間,然后從這個落點開始順時針查
找遇到第一個cache服務器后就把這個服務器當作此次緩存的落點,從而把這個緩存放到這個落點
上。如圖:
兩者比較:
經過上面的介紹我們能看出,假如普通的哈希當其中任意一臺機器down掉后,我們整個的
緩存都將安然無存,為什么這么說呢?
因為當某臺cache down掉后我們需要重選算落點,除數已經變了,所以都要重新set緩存,
當然不排除有一些兩個pin值算的落點是一樣的,但是當cache服務器增加到一定數量后,前面所
說的可能性幾乎為0,所以稱之為全部緩存都要重新set。
而使用一致性哈希當其中一臺機器down掉后,只有它上面到它這一段的環路緩存失效了,如:
當cache3 down掉后,那落掉在cache2到cache3之間的pin都將失效,那么失效的落點講繼續順時
針查找cache服務器,那么新的落點都將落到cache4上。
總結
以上是生活随笔為你收集整理的一致性哈希 与 普通哈希对比的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qdir
- 下一篇: jar命令|jdt的简单使用