1. 程式人生 > >關於一致性雜湊

關於一致性雜湊

解決問題

解決單機的壓力,讓多機進行壓力負載。

原理

hash範圍為0-23212^{32}-1,可以把這個範圍看作為一個圓環,將多臺機器通過hash算出機器在圓環中的位置,當request進行put或get,只需要進行對key進行hash,然後尋找離當前hash值最近的機器,進行put或get。

實現方式

可以利用一個數組,將機器的ip進行hash,然後排序。當request時,通過對key進行hash,然後查詢離陣列最近的那個ip的hash的陣列下表即可。(多臺伺服器用的是相同hash函式)

出現問題

①當機器數量小時,機器在環中位置,分佈不均。 ②多臺機器負責的部分負載不均。 ③當有機器追加或者移除時,隻影響一臺機器,其他機器無影響。(雖然資料遷移代價很低了)

解決方式

利用虛擬節點技術,將虛擬節點代替環中的機器,當有key命中虛擬節點,然後通過查詢路由表,找到真實機器的地址。