1. 程式人生 > >分散式配置管理平臺XXL-CONF

分散式配置管理平臺XXL-CONF

XXL-CONF 詳細介紹

背景(為什麼需要使用xxl-conf) 常規專案開發過程中, 通常會將配置資訊位於在專案resource目錄下的properties檔案檔案中, 配置資訊通常包括有: jdbc地址配置、redis地址配置、活動開關、閾值配置、黑白名單……等等。使用properties維護配置資訊將會導致以下幾個問題:
  • 1、需要手動修改properties檔案;
  • 2、需要重新編譯打包;
  • 3、需要重啟線上伺服器 (專案叢集時,更加令人崩潰) ;
  • 4、配置生效不及時: 因為流程複雜, 新的配置生效需要經歷比較長的時間才可以生效;
  • 5、不同環境上線包不一致: 例如JDBC連線, 不同環境需要差異化配置;
最開始接觸spring專案時,覺得*專案中.properties配置檔案還是挺好用的,雖然在最開始實用期間經常還會報錯${***}等配置檔案找不到,後來還是解決了。但是在後來專案業務越來越清晰,業務拆解出多個專案,正式環境,測試環境多種配置檔案交替切換,導致線上部署專案可能也出現測試配置檔案。為了解決這種痛點,我這裡強烈推薦給大家一種配置管理平臺XXL-CONF。 特性
  • 1、簡單易用: 上手非常簡單, 只需要引入maven依賴和一行配置即可;
  • 2、線上管理: 提供配置管理中心, 支援線上管理配置資訊;(有後臺管理系統,隨時檢視配置資訊,更改配置資訊因為使用Zookeeper,並且註冊watch事件,控制檯更改數值以後,客戶端會收到實時推送配置資訊,更新本地值,不需要重啟機器
  • 3、高效能: 使用Encache做本地快取,效率高於,不會存在效能問題;
  • 4、配置備份: 配置資料首先會儲存在Zookeeper中, 同時, 在MySQL中會對配置資訊做備份, 保證配置資料的安全性;
  • 5、HA: 配置中心基於Zookeeper叢集, 只要叢集節點保證存活數量大於N/2+1, 就可保證服務穩定, 避免單點風險;
  • 6、分散式: 可方便的接入線上分散式部署的各個業務線, 統一管理配置資訊;
  • 7、配置共享: 平臺中的配置資訊針對各個業務線是平等的, 各個業務線可以共享配置中心的配置資訊, 當然也可以配置業務內專屬配置資訊;
  • 8、配置分組: 支援對配置進行分組管理, 每條配置將會生成全域性唯一標示GroupKey,在client端使用時,需要通過該值匹配對應的配置資訊;

架構圖:(引用官方架構圖)

目前支援 java平臺,後續官方可能擴充套件。

專案目錄如下:

  • xxl-conf-admin:配置管理中心
  • xxl-conf-core:公共依賴
  • xxl-conf-example: 接入XXl-CONF的Demo專案
  • db用於xxl-conf-admin操作儲存資料,刪除資料,修改資料以後同步到資料中(這裡也就是上述介紹過的資料備份性,資料實際儲存在資料庫中(我這裡使用的是mysql))

接下來介紹大家怎麼使用:

1、首先啟動Zookeeper(xxl-conf依賴zk)

ZK之watcher普及(來源官方文件,以及網路部落格)

1、可以註冊watcher的方法:getData、exists、getChildren。
2、可以觸發watcher的方法:create、delete、setData。連線斷開的情況下觸發的watcher會丟失。
3、一個Watcher例項是一個回撥函式,被回撥一次後就被移除了。如果還需要關注資料的變化,需要再次註冊watcher。
4、New ZooKeeper時註冊的watcher叫default watcher,它不是一次性的,只對client的連線狀態變化作出反應。(推薦ZK初始化時, 主動Watcher如exists)
5、實現永久監聽: 由於zookeeper是一次性監聽,所以我們必須在wather的process方法裡面再設定監聽。
6、getChildren("/path")監視/path的子節點,如果(/path)自己刪了,也會觸發NodeDeleted事件。

2、引入jar包maven 中央倉庫地址

<dependency>
  <groupId>com.xuxueli</groupId>
  <artifactId>xxl-conf-core</artifactId>
  <version>1.3.0</version>
</dependency>
<dependency>
 <groupId>net.sf.ehcache</groupId>
 <artifactId>ehcache</artifactId>
 <version>2.9.1</version>
</dependency>

前置工作完畢,現在開始使用(以Spring專案為例子)

1、在spring配置檔案中加入

<!-- XXL-CONF配置解析器 --><bean id="xxlConfPropertyPlaceholderConfigurer" class="com.xxl.conf.core.spring.XxlConfPropertyPlaceholderConfigurer" />

2、在配置檔案中引用值方式是${xxxx},例項如下:

大家可能會有疑問,例如${jdbc.mysqlurl}這些值是在哪裡設定的呢?接下來給大家介紹xxl-con的後臺管理系統

專案:xxl-conf-admin
作用:查詢和管理線上配置資訊

1、使用maven編譯xxl-conf-admin專案,會在專案target目錄下,生成一個war包(war包丟到web應用伺服器例如tomcat下可以直接執行)

2、xxl-conf-admin連線Zookeeper,因為admin是依賴core的,我們大家一起看看core的原始碼。

以上是core的官方程式碼,這裡是獲取配置檔案中的值。

配置檔案中是連線的zk地址。

這裡我對原始碼進行部分修改,因為上述原始碼中只是基於linux等作業系統。我本地執行環境是windows,根據上述目錄找不到此檔案目錄,這樣會導致連線不上zk,專案無法執行。這裡我把

private static final String ZK_ADDRESS_FILE = "/data/webapps/xxl-conf.properties";

修改為

private static final String ZK_ADDRESS_FILE =System.getProperty("os.name").equals("Linux")?"/data/webapps/xxl-conf.properties": "C:/xxl-conf.properties";

如果是windows作業系統,則在c盤根目錄找到xxl-conf.properties配置檔案。

更改為原始碼以後需要重新編譯core專案跟admin專案

3、 配置jdbc資料來源,資料備份

配置“JDBC連結”

  • 配置檔案位置: 原始碼/xxl-conf/xxl-conf-admin/src/main/resources/jdbc.properties
  • 作用: 配置資料在資料庫中的備份

4、配置後臺管理登入使用者名稱,密碼

配置“登入賬號和密碼”

  • 配置檔案位置: 原始碼/xxl-conf/xxl-conf-admin/src/main/resources/config.properties
後臺管理截圖 增加分組: 增加配置: