配置中心擴充

設計目標

配置中心的核心功能是作為鍵值儲存。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

命名空間 (namespace)、群組 (group)、鍵值 (key) 等對應於不同層級的 ZNode 節點,而值 (value) 則儲存為根 ZNode 節點的值。

  1. 外部設定中心 dubbo.properties

    image-20190127225608553

    上圖顯示了 dubbo.properties 檔案在 zookeeper 中兩個不同作用域的儲存結構

    • 命名空間 (namespace):dubbo
    • 群組 (group):全域層級為 dubbo,所有應用程式共用;應用程式層級為應用程式名稱 demo-provider,僅對此應用程式生效
    • 鍵值 (key):dubbo.properties
  2. 單一設定項

    image-20190127225608553

    將優雅關閉事件設定為 15000

    • 命名空間 (namespace):dubbo
    • 群組 (group):dubbo
    • 鍵值 (key):dubbo.service.shutdown.wait
    • 值 (value):15000
  3. 服務治理規則

    image-20190127225608553

    上圖顯示了一個應用程式級別的條件路由規則

    • 命名空間 (namespace):dubbo
    • 群組 (group):dubbo
    • 鍵值 (key):governance-conditionrouter-consumer.condition-router,其中 governance-conditionrouter-consumer 為應用程式名稱,condition-router 代表條件路由

    注意事項

    Dubbo 同時支援應用程式和服務兩個粒度的服務治理規則。這兩個粒度的鍵值規則如下:

    • 應用程式粒度:{應用程式名稱 + 規則後綴}。例如:demo-application.configuratorsdemo-application.tag-router 等。
    • 服務粒度:{服務介面名稱:[服務版本]:[服務群組] + 規則後綴},其中服務版本和服務群組是選填的,如果已設定,則會反映在鍵值中,如果未設定,則使用 ":" 作為佔位符。例如 org.apache.dubbo.demo.DemoService::.configuratorsorg.apache.dubbo.demo.DemoService:1.0.0:group1.configurators

Etcd 與 Consul

Etcd 和 Consul 本質上是與 zookeeper 類似的樹狀儲存結構。實作方式請參考 zookeeper。

Nacos

Nacos 作為專業的第三方設定中心,擁有專為設定中心設計的儲存結構,包含命名空間、群組、資料 ID (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)