餘數分散演算法
快取系統中應用比較多的是餘數計算分散和一致性 hash 計算分散。
原理:餘數計算分散法簡單來說,就是 「 根據伺服器台數的餘數進行分散 」 。
特點:餘數計算的方法簡單,資料的分散性也相當優秀,但也有其缺點。 那就是當新增或移除伺服器時,快取重組的代價相當巨大。 新增伺服器後,餘數就會產生巨變,這樣就無法獲取與儲存時相同的伺服器, 從而影響快取的命中率。
比如你有 n 個 cache 伺服器(後面簡稱 cache ),那麼如何將乙個物件 object 對映到 n 個 cache 上呢,用這個方法計算 object 的 hash 值,然後均勻的對映到到 n 個 cache ;hash(object)%n
一切都執行正常,再考慮如下的兩種情況;
1.乙個 cache 伺服器 m down 掉了(在實際應用中必須要考慮這種情況),這樣所有對映到 cache m 的物件都會失效,怎麼辦,需要把 cache m 從 cache 中移除,這時候 cache 是 n-1 臺,對映公式變成了 hash(object)%(n-1) ;
2.由於訪問加重,需要新增 cache ,這時候 cache 是 n+1 臺,對映公式變成了 hash(object)%(n+1) ;
這意味著突然之間幾乎所有的 cache 都失效了。對於伺服器而言,這是一場災難,洪水般的訪問都會直接衝向後台伺服器;
再來考慮第三個問題,由於硬體能力越來越強,你可能想讓後面新增的節點多做點活,顯然這個 演算法也做不到。
hash 演算法的乙個衡量指標是單調性( monotonicity ),定義如下:
單調性是指如果已經有一些內容通過雜湊分派到了相應的緩衝中,又有新的緩衝加入到系統中。雜湊的結果應能夠保證原有已分配的內容可以被對映到新的緩衝中去,而不會被對映到舊的緩衝集合中的其他緩衝區。
容易看到,這個演算法 hash(object)%n 難以滿足單調性要求。
5814 餘數之和(整數分塊)
描述 給出正整數n和k,計算j n,k k mod 1 k mod 2 k mod 3 k mod n的值 其中k mod i表示k除以i的餘數。例如j 5,3 3 mod 1 3 mod 2 3 mod 3 3 mod 4 3 mod 5 0 1 0 3 3 7 輸入 輸入僅一行,包含兩個整數n,...
金鑰分散演算法簡析
金鑰分算演算法簡稱diversify,是指將乙個雙長度 乙個長度金鑰為8個位元組 的主金鑰 mk 對資料進行分散處理,推導出乙個雙長度的des加密金鑰 dk 該演算法廣泛應用於現在的金融ic卡和其他對於安全要求高的行業。其dk推導過程如下 推導dk左半部分的方法是 1 將分散資料的最右8個位元組作為...
引數分配演算法
具有n個自由度 即關節 的開放式運動鏈的引數分配過程總結如下 從標記所有關節。從標記所有連桿,0表示為固定連桿。繪製線條通過所有關節,定義關節軸。將每個座標系的z軸指定為沿其關節軸指向的點。定義各座標系z軸方向。中間關節 指不是基關節和末端執行器 的端點連線兩個軸和。i從 到n 1,分配 對於ske...