
- hash環
- 將各個服務器使用相似的Hash算式進行一個哈希,這樣每臺機器就能肯定其在哈希環上的位置
- 將數據key使用相同的函數Hash計算出哈希值,
- 並肯定此數據在環上的位置,今後位置沿環順時針「行走」,
- 第一臺遇到的服務器就是其應該定位到的服務器!

- 說到這裏可能會有疑問,爲何hash一致性的數據空間範圍是2^32次方?
- 由於,java中int的最大值是2^31-1最小值是-2^31,2^32恰好是無符號整形的最大值;
- 進一步追尾基礎,爲何java中int的最大值是2^31-1最小值是-2^31?
- 由於,int的最大值最小值範圍設定是由於一個int佔4個字節,一個字節佔8位,二進制中恰好是32位。(基礎忘記的須要惡補一下了)
容錯性和可擴展性(增長和減小一個服務器節點處理相似)html
- 假設Node C不幸宕機,能夠看到此時對象A、B、D不會受到影響,只有C對象被重定位到Node D。
- 通常的,在一致性Hash算法中,若是一臺服務器不可用,
- 則受影響的數據僅僅是此服務器到其環空間中前一臺服務器(即沿着逆時針方向行走遇到的第一臺服務器)之間數據,
- 其它不會受到影響

Hash環的數據傾斜問題

- 增長虛擬節點解決
- 數據定位算法不變,只是多了一步虛擬節點到實際節點的映射
http://www.javashuo.com/article/p-gikuqujl-hd.htmljava