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. 并向 Channel:/dubbo/com.foo.BarService/providers 发送 register 事件
  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/*registerunregister 以及 subscribeunsubscribe 事件
  7. 服务监控中心接收到 registerunregister 事件后,从 Key:/dubbo/com.foo.BarService/providers 获取提供者地址列表
  8. 服务监控中心接收到 subscribeunsubscribe 事件后,从 Key:/dubbo/com.foo.BarService/consumers 获取消费者地址列表

上次修改时间:2023 年 1 月 2 日: 增强英文文档 (#1798) (95a9f4f6c1c)