為什么需要集中配置
程序的發(fā)展宏榕,需要引入集中配置:
- 隨著程序功能的日益復雜,程序的配置日益增多:各種功能的開關侵佃、參數(shù)的配置麻昼、服務器的地址……
- 并且對配置的期望也越來越高,配置修改后實時生效馋辈,灰度發(fā)布抚芦,分環(huán)境、分集群管理配置迈螟,完善的權限叉抡、審核機制……
- 并且隨著采用分布式的開發(fā)模式,項目之間的相互引用隨著服務的不斷增多答毫,相互之間的調用復雜度成指數(shù)升高卜壕,每次投產或者上線新的項目時苦不堪言,因此需要引用配置中心治理烙常。
已有zookeeper轴捎、etcd還需要引入嗎?
- 之前的音樂服務項目蚕脏,通過etcd實現(xiàn)了服務的注冊與發(fā)現(xiàn)侦副,且一些業(yè)務配置也存儲到etcd中,通過實踐我們收獲了集中配置帶來的優(yōu)勢
- 但是etcd并沒有方便的UI管理工具驼鞭,且缺乏權限秦驯、審核等機制
- 最重要的是,etcd和zookeeper通常定義為服務注冊中心挣棕,統(tǒng)一配置中心的事情交給專業(yè)的工具去解決译隘。
有哪些開源配置中心
spring-cloud/spring-cloud-config
https://github.com/spring-cloud/spring-cloud-config
spring出品亲桥,可以和spring cloud無縫配合淘寶 diamond
https://github.com/takeseem/diamond
已經不維護disconf
https://github.com/knightliao/disconf
java開發(fā),百度固耘,業(yè)界使用廣泛ctrip apollo
https://github.com/ctripcorp/apollo/
Apollo(阿波羅)是攜程框架部門研發(fā)的開源配置管理中心题篷,具備規(guī)范的權限、流程治理等特性厅目。
配置中心對別
功能特性
我們先從功能層面來對別
功能點 | 優(yōu)先級 | spring-cloud-config | ctrip apollo | disconf | 備注 |
---|---|---|---|---|---|
靜態(tài)配置管理 | 高 | 基于file | 支持 | 支持 | |
動態(tài)配置管理 | 高 | 支持 | 支持 | 支持 | |
統(tǒng)一管理 | 高 | 無番枚,需要github | 支持 | 支持 | |
多環(huán)境 | 中 | 無,需要github | 支持 | 支持 | |
本地配置緩存 | 高 | 無 | 支持 | 支持 | |
配置鎖 | 中 | 支持 | 不支持 | 不支持 | 不允許動態(tài)及遠程更新 |
配置校驗 | 中 | 無 | 無 | 無 | 如:ip地址校驗损敷,配置 |
配置生效時間 | 重啟生效葫笼,或手動refresh生效 | 實時 | 實時 | 需要結合熱加載管理, springcloudconfig需要 git webhook+rabbitmq 實時生效 | |
配置更新推送 | 高 | 需要手工觸發(fā) | 支持 | 支持 | |
配置定時拉取 | 高 | 無 | 支持 | 配置更新目前依賴事件驅動拗馒, client重啟或者server端推送操作 | |
用戶權限管理 | 中 | 無路星,需要github | 支持 | 支持 | 現(xiàn)階段可以人工處理 |
授權芜辕、審核菠齿、審計 | 中 | 無赖欣,需要github | 支持 | 無 | 現(xiàn)階段可以人工處理 |
配置版本管理 | 高 | Git做版本管理 | 界面上直接提供發(fā)布歷史和回滾按鈕 | 操作記錄有落數(shù)據庫廊佩,但無查詢接口 | |
配置合規(guī)檢測 | 高 | 不支持 | 支持(但還需完善) | ||
實例配置監(jiān)控 | 高 | 需要結合springadmin | 支持 | 支持,可以查看每個配置在哪些機器上加載 | |
灰度發(fā)布 | 中 | 不支持 | 支持 | 不支持部分更新 | 現(xiàn)階段可以人工處理 |
告警通知 | 中 | 不支持 | 支持筛峭,郵件方式告警 | 支持,郵件方式告警 | |
依賴關系 | 高 | 不支持 | 不支持 | 不支持 | 配置與系統(tǒng)版本的依賴系統(tǒng)運行時的依賴關系 |
技術路線兼容性
引入配置中心,需要考慮和現(xiàn)有項目的兼容性触菜,以及是否引入額外的第三方組件。我們的java項目以SpringBoot為主哀峻,需要重點關注springboot支持性涡相。
功能點 | 優(yōu)先級 | spring-cloud-config | ctrip apollo | disconf | 備注 |
---|---|---|---|---|---|
SpringBoot支持 | 高 | 原生支持 | 支持 | 與spring boot無相關 | |
SpringCloud支持 | 高 | 原生支持 | 支持 | 與spring cloud無相關 | |
客戶端支持 | 低 | Java | Java、.Net | java | |
業(yè)務系統(tǒng)侵入性 | 高 | 侵入性弱 | 侵入性弱 | 侵入性弱剩蟀,支持注解及xml方式 | |
依賴組件 | 高 | Eureka | Eureka | zookeeper |
可用性與易用性
引入配置中心后催蝗,所有的應用都需要依賴配置中心,因此可用性需要重點關注育特,另外管理的易用性也需要關注丙号。
功能點 | 優(yōu)先級 | spring-cloud-config | ctrip apollo | disconf | 備注 |
---|---|---|---|---|---|
單點故障(SPOF) | 高 | 支持HA部署 | 支持HA部署 | 支持HA部署,高可用由zookeeper保證 | |
多數(shù)據中心部署 | 高 | 支持 | 支持 | 支持 | |
配置獲取性能 | 高 | unkown | unkown(官方說比spring快) | ||
配置界面 | 中 | 無缰冤,需要通過git操作 | 統(tǒng)一界面(ng編寫) | 統(tǒng)一界面 |
最終選擇
綜上犬缨,ctrip apollo是較好的選擇方案,最終選擇apollo棉浸。
- 支持不同環(huán)境(開發(fā)怀薛、測試、生產)迷郑、不同集群
- 完善的管理系統(tǒng)枝恋,權限管理创倔、發(fā)布審核、操作審計
- SpringBoot集成友好 焚碌,較小的遷移成本
- 配置修改實時生效(熱發(fā)布)
- 版本發(fā)布管理
部署情況
- 管理Web:http://config.***.com/
- 三個環(huán)境MetaServer:
- Dev: config.devmeta.***.com
- Test: config.testmeta.***.com
- PRO: config.prometa.***.com