Dubbo Configuration Center Extensions
Design Purpose
The key function of CC(Configuration Center) is to act as a Key-Value store. Dubbo Framework tells CC the key it care about, CC return the corresponding value.
Divided by application scenarios, CC mainly undertake the following responsibilities in Dubbo Framework:
- As a external configuration center, CC store configuration files like dubbo.properties, where the key is usually file name like dubbo.properties, and value is content of the file.
- Store single configuration items, like all kinds of switchs, contants, etc.
- Store service governance rules, where the key is usually formated like “ServiceName+RuleType”, while value is the specific governance rule.
Dubbo CC also introduced concepts of namespace
and group
to better manage Key-Value pairs by group, those concepts are already built-in in many professional third-party configuration centers. In most cases, namespace
is used to isolate different tetants, while group
is used to divid the key set from one tetant into groups.
Dubbo CC has currently supported Zookeeper, Nacos, Etcd, Consul, Apollo, next we will see how Dubbo CC is mapped to a specific third-party implementation.
Extension Interface
org.apache.dubbo.configcenter.DynamicConfigurationFactory
org.apache.dubbo.configcenter.DynamicConfiguration
Existing Extension
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
Implementation
Zookeeper
Zookeeper provided a tree-structure storage model, the implementation is as follows:
namespace, group, key are corresponded to different levels of ZNodes, while value is content of the key ZNode.
External configuration cetner dubbo.properties
The figure above shows the storage structure of the dubbo.properties file in two different scopes in zookeeper:
- namespace: both are ‘dubbo’
- group: ‘dubbo’ is globally shared by all applications; ‘demo-provider’ is application level, only affect the specific application
- key: dubbo.properties
Single configuration item
The figure above shows how we set the shutdown wait time to 15000:
- namespace: dubbo
- group: dubbo
- key: dubbo.service.shutdown.wait
- value: 15000
Service governance rule
The figure above shows an application-level conditional routing rule:
- namespace:dubbo
- group:dubbo
- key:governance-conditionrouter-consumer.condition-router, in wich governance-conditionrouter-consumer is application name, condition-router represents condition router.
Notice:
Dubbo support two level of governance rules: application, service. The key format are as follows:
- application level {application name + rule suffix}, such as:
demo-application.configurators
,demo-application.tag-router
, etc. - service level {service interface name:[version]:[group] + rule suffix}, in which version and group are optional, such as:
org.apache.dubbo.demo.DemoService::.configurators
,org.apache.dubbo.demo.DemoService:1.0.0:group1.configurators
, etc.
Etcd & Consul
Etcd and Consul are essencially tree-structure storage like Zookeeper, see zookeeper for implementation.
Nacos
Nacos is a professional third-party configuration center, it has a storage structure designed specifically for the configuration center, including built-in concepts like namespace, group, dataid, etc. And these concepts basically correspond to the configuration center of the Dubbo framework abstraction.
The correspondence with the Zookeeper implementation is as follows:
Refer to the example described in the zookeeper implementation above, where dataid might be:
- External configuration center: dubbo.properties
- Single configuration item: dubbo.service.shutdown.wait
- Service governance rule: org.apache.dubbo.demo.DemoService:1.0.0:group1.configurators
Apollo
Apollo is similar to Nacos. Please refer to the documentation on the Apollo section.