Redis分散式概覽

weixin_33766168發表於2019-03-05


1 Redis分散式演算法原理

1.1 傳統分散式演算法

舉個例子


藍色表與4個節點時相同槽

1.2 Consistent hashing一致性演算法原理

  • 環形 hash 空間:按照常用的 hash 演算法來將對應的 key 雜湊到一個具有 232 個桶的空間,即(0-232-1)的數字空間中,現在我們將這些數字頭尾相連,想象成一個閉合的環形
  • 把資料通過一定的 hash 演算法對映到環上
  • 將機器通過一定的 hash 演算法對映到環上
  • 節點按順時針轉動,遇到的第一個機器,就把資料放在該機器上



在移除 or 新增一個 cache 時,他能夠儘可能小的改變已經存在 key 對映關係

刪除CacheB後,橙色區為被影響範圍

也許心中的分散式這樣的
但實際會這樣擁擠-即傾斜性

1.3 Hash傾斜性


為解決此類事件,引入了虛擬節點


伺服器臺數n,新增伺服器數m

2 Redis分散式環境配置

啟動兩臺Redis-server

3 Redis分散式服務端及客戶端啟動

4封裝分散式Shared Redis API

4.1 SharedJedis原始碼解析

ShardedJedis.png

封裝RedisSharedPool

測試程式碼

整合測試

5 Redis分散式環境驗證

6 叢集和分散式

  • 分散式:不同的業務模組拆分到不同的機器上,解決高併發的問題。 工作形態 redis伺服器各工作方式不同一般稱為Redis分散式
  • 叢集:同一個業務部署在多臺機器上,提高系統可用性 是物理形態,一般稱Tomcat叢集
    叢集可能執行著一個或多個分散式系統,也可能根本沒有執行分散式系統;分散式系統可能執行在一個叢集上,也可能執行在不屬於一個叢集的多臺(2臺也算多臺)機器上。

你前臺頁面有10個使用者,分別傳送了1個請求,那麼如果不是叢集的話,那這10個請求需要並行在一臺機器上處理,如果每個請求都是1秒鐘,那麼就會有一個人等待10秒鐘,有一個人等待9秒鐘,以此類推;那麼現在在叢集環境下,10個任務並分發到10臺機器同時進行,那麼每個人的等待時間都還是1秒鐘;
當然,你說的浪費確實是,如果系統的併發不是很高,只有一臺或者兩臺機器就能處理的話,那確實是有很大的浪費

7 參考

[Java企業級電商專案架構演進之路
Tomcat叢集與Redis分散式
](https://coding.imooc.com/class/162.html)

相關文章