redis分布式一致性hash演算法

2021-08-24 17:32:39 字數 1035 閱讀 1547

當我們在部署redis節點時,使用者鏈結redis儲存資料會通過hash演算法來定位具體鏈結那個redis節點,在redis節點數量沒有改變的前提下,之前的使用者通過hash演算法會固定的鏈結某一台redis節點,但是若此時我們增加了redis節點,使用者再次hash時,能會hash到別的redis機器上,導致使用者在redis節點上讀取不到對應的資料,這就是redis命中的問題。

redis一致性hash演算法:

將使用者和redis節點的hash值對應到乙個32位的環形資料結構上,環形結構首尾封閉,使用者通過hash演算法來定位在環形結構上,redis節點也通過hash演算法來定位到環形結構上,此時的命中問題就變成了,使用者節點通過順時針旋轉,在旋轉的過程中若碰到redis節點,就在該節點上讀取資料,若此時在環形結構上增加新的redis節點,由於是順時針尋找對應的redis節點,所以使用者此時的redis命中率還是很高的,不會因為增加了一台redis節點就導致大量的使用者命中失敗的情況出現。

hash傾斜:

上述情況是發生在redis節點均勻分布在環形結構上的情況下,但是若redis節點分布密集,並且集中在環形結構上一側,那麼就會出現,大量的使用者節點請求同一臺redis伺服器,而其餘redis伺服器處於低請求的情況,若此時再加入乙個redis節點,那麼同樣會導致命中率失敗變高。這種情況叫做    hash傾斜。

hash傾斜的解決辦法:

增加虛擬節點,假如有1 ,2兩台redis節點分布在32位環形結構上,那麼我們可以增加大量的虛擬的 1, 2節點在環形結構上。使用者命中到虛擬節點之後,在hash到真實的redis機器上。

雖然增加虛擬節點可以解決此問題,但是依然存在hash傾斜的問題,但是隨著虛擬節點的大量增加,就會使得出現hash命中失敗的現象降到最低。一致性hash演算法公式:1-n/(n + m) * 100%   n表示真實的redis節點,m表示增加的虛擬節點,可以看到隨著虛擬節點的增加,命中失敗越來越低。

分布式一致性Hash演算法

介紹一致性hash演算法之前,先簡單回顧一下分布式以及hash演算法,便於理解為什麼要有一致性hash演算法。當我們也無需求很複雜時,單台機器io以及頻寬等都會成為瓶頸,所以對業務進行拆分,部署在不同的機器上,當有請求訪問時,根據某些特點將這些請求分散到各個伺服器上,這所有的伺服器組成的網路,我們稱...

分布式一致性

分布式一致性是指在分布式環境中對某個副本資料進行更新操作時,必須確保其他副本也會更新,避免不同副本資料不一致。分布式系統乙個重要的問題時解決資料複製,一是為了增加系統的可用性防止單點故障,二是提高系統可用性,通過負載聚恆,使分布在不同位置的資料副本能夠提供服務。理想狀態下,當然希望分布式系統能夠實現...

分布式一致性

分布式系統的乙個重要問題是資料的複製。對資料的複製一般有兩個原因 資料複製的主要難題是保持各個副本的一致性。即在更新乙個副本時,必須確保同時更新其他的副本,否則資料的各個副本將不再相同。一致性模型實質上是程序和資料儲存之間的乙個約定。正常情況下,乙個資料項上執行讀操作時,它期待該操作返回的是該資料在...