分布式中hash取模演算法中的問題

2021-07-22 10:32:16 字數 812 閱讀 9485

分布式中hash取模演算法中的問題

常用的演算法是對hash結果取餘數 (hash() modn):對機器編號從0到n-1,按照自定義的hash()演算法,對每個請求的hash()值按n取模,得到餘數i,然後將請求分發到編號為i的機器。

但這樣的演算法方法存在致命問題,如果某一台機器宕機,那麼應該落在該機器的請求就無法得到正確的處理,這時需要將當掉的伺服器從演算法從去除,此時候會有(n-1)/n的伺服器的快取資料需要重新進行計算;」

為何是 (n-1)/n 呢?解釋如下:

比如有 3 臺機器,hash值 1-6 在這3台上的分布就是:

host 1:14

host 2:25

host 3: 3 6

如果掛掉一台,只剩兩台,模數取 2 ,那麼分布情況就變成:

host 1:13 5

host 2:24 6

可以看到,還在資料位置不變的只有2個: 1,2,位置發生改變的有4個,佔共6個資料的比率是 4/6 = 2/3這樣的話,受影響的資料太多了,勢必太多的資料需要重新從 db 載入到 cache 中,嚴重影響效能

【consistent hashing 的辦法】

上面提到的 hash 取模,模數取的比較小,一般是負載的數量,而 consistent hashing 的本質是將模數取的比較大,為 2的32次方減1,即乙個最大的 32 位整數。然後,就可以從容的安排資料導向了,那個圖還是挺直觀的。

分布式快取 Hash演算法

size large color darkblue 一 根據餘數計算分布 hash mod n color size 就是 根據伺服器台數的餘數進行分散 求得鍵的整數雜湊值,再除以伺服器台數,根據其餘數來選擇伺服器。img img 根據餘數計算分散的缺點 餘數計算的方法簡單,資料的分散性也相當優秀,...

分布式系統中的分布式事務

分布式事務中可以借助mq訊息系統來進行事務控制,這一點與可靠訊息最終一致方案一樣。看來mq中介軟體確實在乙個分布式系統架構中,扮演者重要的角色。最大努力通知方案是比較簡單的分布式事務方案,它本質上就是通過定期校對,實現資料一致性。中介軟體如何保證訊息的一致性 問題的問法多種多樣,怎麼保證兩個伺服器的...

Tensorflow 中的分布式

執行,打入1 python tf code sever.py job name ps task index 0 2 python tf code sever.py job name ps task index 1 3 python tf code sever.py job name work tas...