一致性Hash算法

  • hash環
    • 由2^32個點組成的圓環稱爲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

相關文章
相關標籤/搜索