配置中心擴充
設計目標
配置中心的核心功能是作為鍵值儲存。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 提供樹狀儲存模型,其實作原理如下:
命名空間 (namespace)、群組 (group)、鍵值 (key) 等對應於不同層級的 ZNode 節點,而值 (value) 則儲存為根 ZNode 節點的值。
外部設定中心 dubbo.properties
上圖顯示了 dubbo.properties 檔案在 zookeeper 中兩個不同作用域的儲存結構
- 命名空間 (namespace):dubbo
- 群組 (group):全域層級為 dubbo,所有應用程式共用;應用程式層級為應用程式名稱 demo-provider,僅對此應用程式生效
- 鍵值 (key):dubbo.properties
單一設定項
將優雅關閉事件設定為 15000
- 命名空間 (namespace):dubbo
- 群組 (group):dubbo
- 鍵值 (key):dubbo.service.shutdown.wait
- 值 (value):15000
服務治理規則
上圖顯示了一個應用程式級別的條件路由規則
- 命名空間 (namespace):dubbo
- 群組 (group):dubbo
- 鍵值 (key):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 作為專業的第三方設定中心,擁有專為設定中心設計的儲存結構,包含命名空間、群組、資料 ID (dataid) 等內建概念。這些概念與 Dubbo 框架的抽象設定中心基本上一一對應。
與 Zookeeper 實作的對應關係如下:
參考上述關於 zookeeper 實作的範例,此處的 dataid 可能為:
- 外部設定中心:dubbo.properties
- 單一設定項:dubbo.service.shutdown.wait
- 服務治理規則:org.apache.dubbo.demo.DemoService:1.0.0:group1.configurators
Apollo
Apollo 與 Nacos 類似,請參閱動態設定中心文件中關於 Apollo 的說明。