Disconf
Distributed Configuration Management Platform(分布式配置管理平臺)
專注于各種「分布式系統(tǒng)配置管理」的「通用組件」和「通用平臺」, 提供統(tǒng)一的「配置管理服務(wù)」

主要目標(biāo):
- 部署極其簡單:同一個上線包,無須改動配置,即可在 多個環(huán)境中(RD/QA/PRODUCTION) 上線
- 部署動態(tài)化:更改配置,無需重新打包或重啟,即可 實(shí)時生效
- 統(tǒng)一管理:提供web平臺,統(tǒng)一管理 多個環(huán)境(RD/QA/PRODUCTION)、多個產(chǎn)品 的所有配置
- 核心目標(biāo):一個jar包,到處運(yùn)行
demos && 文檔 && 協(xié)作
- demos: https://github.com/knightliao/disconf-demos-java
- wiki: https://github.com/knightliao/disconf/wiki
- 文檔: http://disconf.readthedocs.io
- 協(xié)作開發(fā): 在 master 分支上提pull request
- 提問題: https://github.com/knightliao/disconf/issues 提issue
版本
- dev(dev branch): 2.6.36
- master(latest && cooperate && contribute branch):2.6.36
- stable(release && stable branch): 2.6.36
功能特點(diǎn)
- 支持配置(配置項(xiàng)+配置文件)的分布式化管理
- 配置發(fā)布統(tǒng)一化
- 配置發(fā)布、更新統(tǒng)一化:
- 同一個上線包 無須改動配置 即可在 多個環(huán)境中(RD/QA/PRODUCTION) 上線
- 配置存儲在云端系統(tǒng),用戶統(tǒng)一管理 多個環(huán)境(RD/QA/PRODUCTION)、多個平臺 的所有配置
- 配置更新自動化:用戶在平臺更新配置,使用該配置的系統(tǒng)會自動發(fā)現(xiàn)該情況,并應(yīng)用新配置。特殊地,如果用戶為此配置定義了回調(diào)函數(shù)類,則此函數(shù)類會被自動調(diào)用。
- 配置發(fā)布、更新統(tǒng)一化:
- 極簡的使用方式(注解式編程 或 XML無代碼侵入模式):我們追求的是極簡的、用戶編程體驗(yàn)良好的編程方式。目前支持兩種開發(fā)模式:基于XML配置或者基于注解,即可完成復(fù)雜的配置分布式化。
注:配置項(xiàng)是指某個類里的某個Field字段。
Disconf的功能特點(diǎn)描述圖:

其它功能特點(diǎn)
- 低侵入性或無侵入性、強(qiáng)兼容性:
- 低侵入性:通過極少的注解式代碼撰寫,即可實(shí)現(xiàn)分布式配置。
- 無侵入性:通過XML簡單配置,即可實(shí)現(xiàn)分布式配置。
- 強(qiáng)兼容性:為程序添加了分布式配置注解后,開啟Disconf則使用分布式配置;若關(guān)閉Disconf則使用本地配置;若開啟Disconf后disconf-web不能正常Work,則Disconf使用本地配置。
- 支持配置項(xiàng)多個項(xiàng)目共享,支持批量處理項(xiàng)目配置。
- 配置監(jiān)控:平臺提供自校驗(yàn)功能(進(jìn)一步提高穩(wěn)定性),可以定時校驗(yàn)應(yīng)用系統(tǒng)的配置是否正確。
安裝依賴軟件
- 安裝Mysql(Ver 14.12 Distrib 5.0.45, for unknown-linux-gnu (x86_64) using EditLine wrapper)
- 安裝Tomcat(apache-tomcat-7.0.50)
- 安裝Nginx(nginx/1.5.3)
- 安裝 zookeeeper (zookeeper-3.3.0)
- 安裝 Redis (2.4.5)
準(zhǔn)備配置
將你的配置文件放到此地址目錄下(以下地址可自行設(shè)定):
/home/work/dsp/disconf-rd/online-resources
如果不確定如何配置,可以拷貝/disconf-web/profile/rd/目錄下的文件,拷貝過去后修改即可。
配置文件包括:
- jdbc-mysql.properties (數(shù)據(jù)庫配置)
- redis-config.properties (Redis配置,主要用于web登錄使用)
- zoo.properties (Zookeeper配置)
- application.properties (應(yīng)用配置)
注意,記得執(zhí)行將application-demo.properties復(fù)制成application.properties:
cp application-demo.properties application.properties
注意,即使只有一個redis,也應(yīng)該配置兩個redis client,否則將造成內(nèi)部錯誤。
設(shè)置War包將要被部署的地址(以下地址可自行設(shè)定):
/home/work/dsp/disconf-rd/war
構(gòu)建
ONLINE_CONFIG_PATH=/home/work/dsp/disconf-rd/online-resources
WAR_ROOT_PATH=/home/work/dsp/disconf-rd/war
export ONLINE_CONFIG_PATH
export WAR_ROOT_PATH
cd disconf-web
sh deploy/deploy.sh
這樣會在 /home/work/dsp/disconf-rd/war 生成以下結(jié)果:
-disconf-web.war
-html
-META-INF
-WEB-INF
上線前的初始化工作
初始化數(shù)據(jù)庫:
可以參考 sql/readme.md 來進(jìn)行數(shù)據(jù)庫的初始化。注意順序執(zhí)行
0-init_table.sql
1-init_data.sql
201512/20151225.sql
20160701/20160701.sql
里面默認(rèn)有6個用戶(請注意線上環(huán)境刪除這些用戶以避免潛在的安全問題)
| name | pwd |
|---|---|
| admin | admin |
| testUser1 | MhxzKhl9209 |
| testUser2 | MhxzKhl167 |
| testUser3 | MhxzKhl783 |
| testUser4 | MhxzKhl8758 |
| testUser5 | MhxzKhl112 |
如果想自己設(shè)置初始化的用戶名信息,可以參考代碼來自己生成用戶:
src/main/java/com/baidu/disconf/web/tools/UserCreateTools.java
部署War
修改server.xml文件,在Host結(jié)點(diǎn)下設(shè)定Context:
<Context path="" docBase="/home/work/dsp/disconf-rd/war"></Context>
并設(shè)置端口為 8015
啟動Tomcat,即可。
部署 前端
修改 nginx.conf
upstream disconf {
server 127.0.0.1:8015;
}
server {
listen 8081;
server_name disconf.com;
access_log /home/work/var/logs/disconf/access.log;
error_log /home/work/var/logs/disconf/error.log;
location / {
root /home/work/dsp/disconf-rd/war/html;
if ($query_string) {
expires max;
}
}
location ~ ^/(api|export) {
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_pass http://disconf;
}
}