配置
配置(Configuration) 這個概念對于廣大程序猿來說應(yīng)該都不陌生飞醉,例如線程池大小芍躏、數(shù)據(jù)庫連接、系統(tǒng)停服開關(guān)等等宪巨。
最開始磷杏,我們的配置都是以key-value的形式存放在配置文件中的,比如 在Java開發(fā)中配置信息通常位于在項目resource目錄下的properties文件中捏卓,
<context:property-placeholder location="classpath:config.properties"/>
在集中式開發(fā)時代极祸,配置文件基本足夠用了,因為那時配置的管理通常不會成為一個很大的問題怠晴,簡單一點來說遥金,系統(tǒng)上了生產(chǎn)之后,如果需要修改一個配置蒜田,登錄到這臺生產(chǎn)機(jī)器上稿械,vi修改這個配置文件,然后reload一下并不是什么很大的負(fù)擔(dān)冲粤。
但是在互聯(lián)網(wǎng)時代美莫,我們的應(yīng)用都是分布式系統(tǒng),部署在N臺機(jī)器上梯捕,讓運維去線上一臺一臺的重啟機(jī)器 肯定不靠譜厢呵。
所以使用配置文件方式存在以下問題:
- 需要手動修改配置文件;
- 配置文件修改后需要重新編譯打包;
- 需要重啟線上服務(wù)器配置才能生效 (項目集群時,更加令人崩潰) ;
- 不同環(huán)境上線包不一致: 例如JDBC連接, 不同環(huán)境需要差異化配置;
什么是配置中心
配置中心用來集中管理應(yīng)用不同環(huán)境(Dev、Test傀顾、Stage襟铭、Prod)、不同集群的配置短曾,配置修改后能夠?qū)崟r推送到應(yīng)用端寒砖。
配置中心提供的核心功能(不僅限如此):
- 提供配置管理中心, 支持在線管理配置信息;
- 集中管理各環(huán)境的配置文件,支持版本管理(可以用來回滾)错英;
- 后臺配置修改之后入撒,客戶端能快速的生效;
- 配置集的導(dǎo)出\導(dǎo)入功能椭岩;
- 需保證高性能茅逮、高可用;
- 客戶端支持各種語言判哥;
可選方案
名稱 | 介紹 | 特點 |
---|---|---|
淘寶(Diamond)[http://code.taobao.org/svn/diamond/trun] | Diamond | 配置實時生效献雅,只支持java |
百度(Disconf)[https://github.com/knightliao/disconf] | 分布式系統(tǒng)配置管理 | 配置實時生效,只支持java |
攜程(Apollo)[https://github.com/ctripcorp/apollo] | Apollo | 配置實時生效塌计,支持java挺身、.Net |
360(QConf)[https://github.com/Qihoo360/QConf] | QConf 是一個分布式配置管理工具 | 配置實時生效,支持c/c++锌仅、shell章钾、php墙贱、python、lua贱傀、java惨撇、go、node 等語言 |
(Spring Cloud Config)[http://cloud.spring.io/spring-cloud-config/] | Spring 配置管理 | 基于git府寒,配置修改后不生效 |
目前已有開源解決方案魁衙,分別如下:
名稱 | 介紹 | 特點 |
---|---|---|
淘寶(Diamond)[http://code.taobao.org/svn/diamond/trun] | Diamond | 配置實時生效,只支持java |
百度(Disconf)[https://github.com/knightliao/disconf] | 分布式系統(tǒng)配置管理 | 配置實時生效株搔,只支持java |
攜程(Apollo)[https://github.com/ctripcorp/apollo] | Apollo | 配置實時生效剖淀,支持java、.Net |
360(QConf)[https://github.com/Qihoo360/QConf] | QConf 是一個分布式配置管理工具 | 配置實時生效纤房,支持c/c++纵隔、shell、php帆卓、python巨朦、lua、java剑令、go糊啡、node 等語言 |
(Spring Cloud Config)[http://cloud.spring.io/spring-cloud-config/] | Spring 配置管理 | 基于git,配置修改后不生效 |
參考資料
淘寶Diamond架構(gòu)分析
阿里中間件團(tuán)隊博客 一篇好TM長的關(guān)于配置中心的文章