tft每日頭條

 > 生活

 > hash值長度固定嗎

hash值長度固定嗎

生活 更新时间:2024-12-18 21:08:24

hash值長度固定嗎(一緻性Hash算法你理解了嗎)1

什麼是 常規的 hash算法?

以分布式緩存為例,假設現在有3台緩存服務器(S0,S1,S2),要将一些 文件 盡可能平均地分配到不同的服務器上,hash算法的做法是:

(1) 以 文件 的名稱作為key,然後對其做hash運算。

(2) 将hash值對服務器數量進行求餘,得到服務器編号,最後存入即可。

舉個demo:

1111.txt 需要存入, 我們就得到hash(csdn.jpg) = 5

-------> 5%3 = 2 得到數據存入S2

上面的算法

好像可以把文件均衡地分配到不同的服務器,當獲取數據的時候也可以根據同樣的思路訪問對應的服務器,避免全局掃描。

但這個時候服務器進行了擴容,加入了S4,我們還能否正常獲取數據呢?

假設還是根據同樣的思路獲取1111.txt,我們就會得到 hash(csdn.jpg)%4 = 1。

我們去S1是無法獲取數據的,

這個時候就有可能會引發緩存的血崩,大量的請求落到數據庫上。

一緻性Hash算法

對于節點的增減都隻需要 重定位 環空間中的一小部分數據,具有較好的容錯性和可擴展性。

一緻性Hash算法也是使用取模的方法,隻是,剛才描述的取模法是對服務器的數量進行取模,而一緻性Hash算法是對2^32取模,什麼意思呢?

簡單來說,一緻性Hash算法将整個哈希值空間組織成一個虛拟的圓環,如假設某哈希函數H的值空間為0-2^32-1(即哈希值是一個32位無符号整形)

hash值長度固定嗎(一緻性Hash算法你理解了嗎)2

同樣以1111.txt 為例,我們照樣算出 hash(csdn.jpg)%2^32 的值,然後映射到hash環上,然後以該點出發,順時針遇到的第一個服務器,即為數據即将存儲的服務器。

雖然增加了節點D後,1111.txt 的緩存失效了,

但是,分布在 A-B,B-C 以及 D-A上面的數據仍然有效,

失效的隻是C-D段的數據(原來的數據存在A節點,但是此時順時針獲取的服務器是D)。

這樣就保證了緩存數據不會像hash算法那樣大面積失效,同樣起到減輕數據庫壓力的效果

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved