分布式中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...