分散式配置管理平臺XXL-CONF
XXL-CONF 詳細介紹
背景(為什麼需要使用xxl-conf) 常規專案開發過程中, 通常會將配置資訊位於在專案resource目錄下的properties檔案檔案中, 配置資訊通常包括有: jdbc地址配置、redis地址配置、活動開關、閾值配置、黑白名單……等等。使用properties維護配置資訊將會導致以下幾個問題:- 1、需要手動修改properties檔案;
- 2、需要重新編譯打包;
- 3、需要重啟線上伺服器 (專案叢集時,更加令人崩潰) ;
- 4、配置生效不及時: 因為流程複雜, 新的配置生效需要經歷比較長的時間才可以生效;
- 5、不同環境上線包不一致: 例如JDBC連線, 不同環境需要差異化配置;
- 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