Redis

Redis 註冊中心的基本用法與工作原理

前提條件

使用說明

<dubbo:registry address="redis://10.20.153.10:6379" />

或者

<dubbo:registry address="redis://10.20.153.10:6379?backup=10.20.153.11:6379,10.20.153.12:6379" />

或者

<dubbo:registry protocol="redis" address="10.20.153.10:6379" />

或者

<dubbo:registry protocol="redis" address="10.20.153.10:6379,10.20.153.11:6379,10.20.153.12:6379" />

選項

  • 您可以透過 <dubbo:registry group="dubbo" /> 設定 Redis 中 key 的前綴,預設為 dubbo
  • 可以透過 <dubbo:registry cluster="replicate" /> 設定 Redis 集群策略,預設為 failover
    • failover:只寫入和讀取其中一個,失敗時重試另一個,伺服器端需要自行配置資料同步
    • replicate:用戶端同時寫入所有伺服器,只讀取單個伺服器,伺服器端無需同步,註冊中心集群增加,效能壓力也會更大

工作原理

基於 Redis [^1] 實現的註冊中心。

Redis 過期資料透過心跳檢測髒資料,伺服器時間必須同步,且對伺服器有一定壓力,否則過期檢測會不準確

/user-guide/images/dubbo-redis-registry.jpg

使用 Redis 的 Key/Map 結構儲存資料結構

  • 主要的 key 是服務名稱和類型
  • Map 中的 Key 是 URL 位址
  • Map 中的 Value 是過期時間,用於判斷髒資料,髒資料會被監控中心刪除 [^3]

使用 Redis 的發布/訂閱事件通知資料變更

  • 透過事件的值區分事件類型:registerunregistersubscribeunsubscribe
  • 一般消費者會直接訂閱指定服務提供者的 Key,只會收到指定服務的 registerunregister 事件。
  • 監控中心透過 psubscribe 函數訂閱 /dubbo/*,將會收到所有服務的所有變更事件。

呼叫流程

  1. 當服務提供者啟動時,將目前提供者的位址加入至 Key:/dubbo/com.foo.BarService/providers
  2. 並發送 register 事件至 Channel:/dubbo/com.foo.BarService/providers
  3. 當服務消費者啟動時,訂閱來自 Channel:/dubbo/com.foo.BarService/providersregisterunregister 事件。
  4. 將目前消費者的位址加入至 Key:/dubbo/com.foo.BarService/consumers
  5. 服務消費者在收到 registerunregister 事件後,會從 Key:/dubbo/com.foo.BarService/providers 取得提供者位址列表。
  6. 當服務監控中心啟動時,訂閱來自 Channel:/dubbo/*registerunregistersubscribeunsubscribe 事件。
  7. 服務監控中心在收到 registerunregister 事件後,會從 Key:/dubbo/com.foo.BarService/providers 取得提供者位址列表。
  8. 服務監控中心在收到 subscribeunsubscribe 事件後,會從 Key:/dubbo/com.foo.BarService/consumers 取得消費者位址列表。

最後修改日期:2023 年 1 月 2 日:增強英文文件 (#1798) (95a9f4f6c1c)