哈希一致性、哈希取餘、自定義輪詢分片的比較

1、自定義輪詢分片

        

按照上圖所示,本身寫一段邏輯,根據客戶端請求循環寫入不一樣Redis服務器程序員

優勢:redis

  • 理解簡單
  • 數據分佈平均

缺點:算法

  • 若是增長redis內存數據庫服務器,須要改代碼,須要發佈代碼,很麻煩,有風險
  • 數據遷移量較多

2、哈希取餘分片

        

哈希取餘就是一種特殊的自定義分片方式數據庫

優勢:這裏介紹的三種方式最差的服務器

缺點:spa

  • 若是增長redis內存數據庫服務器,須要改代碼,須要發佈代碼,很麻煩,有風險
  • 數據遷移量多,理論是old/new,new = old+increase
  • 數據傾斜,從上圖中能夠看出最左側的redis1服務器上存放的數據最多,最右側的redis4服務器存放最少,若是數據都是幾十億的級別,那麼傾斜就至關嚴重,單臺服務器壓力會過載

3、哈希一致性分片

   它是Jedis採用的分片方式,並提供了JedisShardInfo、JedisPoolConfig、ShardedJedisPool、ShardedJedis 相關API作成redis鏈接池,分片邏輯對程序員透明ip

    用圖來直觀瞭解一下哈希一致性的分片算法,看到下面的圖不要懼怕,根據後面的文字描述搭配着看內存

    

    表明真實的redis服務器循環

    表明虛擬的redis服務器,虛擬服務器隸屬於真實服務器,好比虛擬2服務器須要存放的數據被真實的存放到redis2服務器上請求

    表明數據

    說明:

    1.圖中最大的圓是由2^32個點組成的圓,每一個點是1到2^32中的一個數

    算法:

    1.jedis根據redis服務器的ip+port+其餘輸入信息計算出一個哈希值,並將該哈希值映射到圓上

    2.jedis根據key計算出一個哈希值,並將該哈希值映射到圓上

    3.jedis根據key在圓上的位置順時針找第一個redis服務器哈希值映射的點,該點對於的服務器就是key-value存儲的服務器

    4.若是隻存在redis服務器的點,數據傾斜仍是會常常發生,爲了解決這一問題,jedis根據真是服務器的信息虛擬出n*1000個虛擬服務器,將整個圓分段更多,數據(key-value)存放便更均勻,解決數據傾斜的問題,其中n是真實redis服務器的臺數

    圖中無法畫出4000個虛擬服務器,只是給每一臺真實redis服務器虛擬一臺服務器,且畫的最理想哈希結果,最終每臺服務器存放兩個數據。

相關文章
相關標籤/搜索