工程設計中常用服務器集羣來設計和實現數據緩存,以下是常見的策略:
- 無論是添加、查詢還是刪除數據,都先將數據的id通過哈希函數轉換成一個哈希值,記爲key
- 如果目前機器有N臺,則計算key%N值,這個值就是該數據所屬的的機器編號,無論是添加、刪除還是查詢操作,都只在這臺機器上進行
請分析這種緩存策略可能帶來的問題,並提出改進的方案
普通Hash算法
緩存策略的潛在問題是如果增加或刪除機器時(N變化)代價會很高,所有的數據都不得不根據id重新計算一遍哈希值,並將哈希值對新的機器數進行取模操作,然後進行大規模的數據遷移
爲了解決這些問題,引入一致性哈希算法。假設數據的id通過哈希函數轉換成的哈希值範圍是2322^{32}2