配置中心扩展

设计目标

配置中心的核心功能是作为键值存储。Dubbo 框架将它关心的键通知配置中心,配置中心返回键对应的值。

根据应用场景,配置中心在 Dubbo 框架中主要承担以下职责

  • 作为外部配置中心,存储 dubbo.properties 配置文件。此时键值通常为文件名,例如 dubbo.properties,值为配置文件的内容。
  • 存储单个配置项,例如各种开关项、常量值等。
  • 存储服务治理规则。此时键通常以“服务名称 + 规则类型”的格式组织,值为具体的治理规则。

为了进一步实现键值的组管理,Dubbo 的配置中心还增加了命名空间和组的概念。这些概念体现在许多专业的第三方配置中心中。通常,命名空间用于隔离不同的租户,组用于对同一租户的键集合进行分组。

目前,Dubbo 配置中心已实现与 Zookeeper、Nacos、Etcd、Consul 和 Apollo 的对接。接下来,让我们看看 Dubbo 的抽象配置中心是如何映射到具体的第三方实现的。

扩展点

  • org.apache.dubbo.configcenter.DynamicConfigurationFactory
  • org.apache.dubbo.configcenter.DynamicConfiguration

已知扩展

  • org.apache.dubbo.configcenter.support.zookeeper.ZookeeperDynamicConfigurationFactory
  • org.apache.dubbo.configcenter.support.nacos.NacosDynamicConfigurationFactory
  • org.apache.dubbo.configcenter.support.etcd.EtcdDynamicConfigurationFactory
  • org.apache.dubbo.configcenter.consul.ConsulDynamicConfigurationFactory
  • org.apache.dubbo.configcenter.support.apollo.ApolloDynamicConfigurationFactory
  • org.apache.dubbo.common.config.configcenter.file.FileSystemDynamicConfigurationFactory

实现原理

Zookeeper

zookeeper 提供了树形存储模型,实现原理如下

image-20190127225608553

命名空间、组、键等对应不同级别的 ZNode 节点,值存储为根 ZNode 节点的值。

  1. 外部配置中心 dubbo.properties

    image-20190127225608553

    上图显示了 dubbo.properties 文件在 zookeeper 中两个不同作用域的存储结构

    • 命名空间:dubbo
    • 分组:全局级别为 dubbo,所有应用共享;应用级别为应用名称 demo-provider,仅对该应用生效
    • 键:dubbo.properties
  2. 单个配置项

    image-20190127225608553

    将优雅关闭事件设置为 15000

    • 命名空间:dubbo
    • 分组:dubbo
    • 键:dubbo.service.shutdown.wait
    • 值:15000
  3. 服务治理规则

    image-20190127225608553

    上图显示了一个应用级别的条件路由规则

    • 命名空间:dubbo
    • 分组:dubbo
    • 键:governance-conditionrouter-consumer.condition-router,其中 governance-conditionrouter-consumer 是应用名称,condition-router 表示条件路由

    注意

    Dubbo 同时支持应用和服务两个粒度的服务治理规则。对于这两种粒度,键值规则如下

    • 应用粒度 {应用名称 + 规则后缀}。例如:demo-application.configurators、demo-application.tag-router 等。
    • 服务粒度 {服务接口名称:[服务版本]:[服务组] + 规则后缀},其中服务版本和服务组是可选的,如果配置了,则会体现在键中,如果没有配置,则使用“:”占位。例如 org.apache.dubbo.demo.DemoService::.configurators、org.apache.dubbo.demo.DemoService:1.0.0:group1.configurators

Etcd 和 Consul

Etcd 和 Consul 本质上是与 zookeeper 类似的树形存储结构。有关实现,请参考 zookeeper。

Nacos

Nacos 作为专业的第三方配置中心,拥有专为配置中心设计的存储结构,包括内置的命名空间、组、dataid 等概念。而这些概念与 Dubbo 框架的抽象配置中心基本一一对应。

与 Zookeeper 实现的对应关系如下

image-20190127225608553

参考上面关于 zookeeper 实现的例子,这里的 dataid 可能是

  • 外部配置中心:dubbo.properties
  • 单个配置项:dubbo.service.shutdown.wait
  • 服务治理规则:org.apache.dubbo.demo.DemoService:1.0.0:group1.configurators

Apollo

Apollo 与 Nacos 类似,请参考动态配置中心文档中关于 Apollo 的描述。


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