整理筆記時發現之前整理的一些東西,分享給大家。
為什么需要集中配置
程序的發展,需要引入集中配置:
- 隨着程序功能的日益復雜,程序的配置日益增多:各種功能的開關、參數的配置、服務器的地址……
- 並且對配置的期望也越來越高,配置修改后實時生效,灰度發布,分環境、分集群管理配置,完善的權限、審核機制……
- 並且隨着采用分布式的開發模式,項目之間的相互引用隨着服務的不斷增多,相互之間的調用復雜度成指數升高,每次投產或者上線新的項目時苦不堪言,因此需要引用配置中心治理。
已有zookeeper、etcd還需要引入嗎?
- 之前的音樂服務項目,通過etcd實現了服務的注冊與發現,且一些業務配置也存儲到etcd中,通過實踐我們收獲了集中配置帶來的優勢
- 但是etcd並沒有方便的UI管理工具,且缺乏權限、審核等機制
- 最重要的是,etcd和zookeeper通常定義為服務注冊中心,統一配置中心的事情交給專業的工具去解決。
有哪些開源配置中心
-
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開發,螞蟻金服技術專家發起,業界使用廣泛 -
ctrip apollo
https://github.com/ctripcorp/apollo/
Apollo(阿波羅)是攜程框架部門研發的開源配置管理中心,具備規范的權限、流程治理等特性。
配置中心對別
功能特性
我們先從功能層面來對別
功能點 | 優先級 | spring-cloud-config | ctrip apollo | disconf | 備注 |
---|---|---|---|---|---|
靜態配置管理 | 高 | 基於file | 支持 | 支持 | |
動態配置管理 | 高 | 支持 | 支持 | 支持 | |
統一管理 | 高 | 無,需要github | 支持 | 支持 | |
多環境 | 中 | 無,需要github | 支持 | 支持 | |
本地配置緩存 | 高 | 無 | 支持 | 支持 | |
配置鎖 | 中 | 支持 | 不支持 | 不支持 | 不允許動態及遠程更新 |
配置校驗 | 中 | 無 | 無 | 無 | 如:ip地址校驗,配置 |
配置生效時間 | 重啟生效,或手動refresh生效 | 實時 | 實時 | 需要結合熱加載管理, springcloudconfig需要 git webhook+rabbitmq 實時生效 | |
配置更新推送 | 高 | 需要手工觸發 | 支持 | 支持 | |
配置定時拉取 | 高 | 無 | 支持 | 配置更新目前依賴事件驅動, client重啟或者server端推送操作 | |
用戶權限管理 | 中 | 無,需要github | 支持 | 支持 | 現階段可以人工處理 |
授權、審核、審計 | 中 | 無,需要github | 支持 | 無 | 現階段可以人工處理 |
配置版本管理 | 高 | Git做版本管理 | 界面上直接提供發布歷史和回滾按鈕 | 操作記錄有落數據庫,但無查詢接口 | |
配置合規檢測 | 高 | 不支持 | 支持(但還需完善) | ||
實例配置監控 | 高 | 需要結合springadmin | 支持 | 支持,可以查看每個配置在哪些機器上加載 | |
灰度發布 | 中 | 不支持 | 支持 | 不支持部分更新 | 現階段可以人工處理 |
告警通知 | 中 | 不支持 | 支持,郵件方式告警 | 支持,郵件方式告警 | |
依賴關系 | 高 | 不支持 | 不支持 | 不支持 | 配置與系統版本的依賴系統運行時的依賴關系 |
技術路線兼容性
引入配置中心,需要考慮和現有項目的兼容性,以及是否引入額外的第三方組件。我們的java項目以SpringBoot為主,需要重點關注springboot支持性。
功能點 | 優先級 | spring-cloud-config | ctrip apollo | disconf | 備注 |
---|---|---|---|---|---|
SpringBoot支持 | 高 | 原生支持 | 支持 | 與spring boot無相關 | |
SpringCloud支持 | 高 | 原生支持 | 支持 | 與spring cloud無相關 | |
客戶端支持 | 低 | Java | Java、.Net | java | |
業務系統侵入性 | 高 | 侵入性弱 | 侵入性弱 | 侵入性弱,支持注解及xml方式 | |
依賴組件 | 高 | Eureka | Eureka | zookeeper |
可用性與易用性
引入配置中心后,所有的應用都需要依賴配置中心,因此可用性需要重點關注,另外管理的易用性也需要關注。
功能點 | 優先級 | spring-cloud-config | ctrip apollo | disconf | 備注 |
---|---|---|---|---|---|
單點故障(SPOF) | 高 | 支持HA部署 | 支持HA部署 | 支持HA部署,高可用由zookeeper保證 | |
多數據中心部署 | 高 | 支持 | 支持 | 支持 | |
配置獲取性能 | 高 | unkown | unkown(官方說比spring快) | ||
配置界面 | 中 | 無,需要通過git操作 | 統一界面(ng編寫) | 統一界面 |
最終選擇
綜上,ctrip applo是較好的選擇方案,最終選擇applo。
- 支持不同環境(開發、測試、生產)、不同集群
- 完善的管理系統,權限管理、發布審核、操作審計
- SpringBoot集成友好 ,較小的遷移成本
- 配置修改實時生效(熱發布)
- 版本發布管理
部署情況
- 管理Web:http://config.***.com/
- 三個環境MetaServer:
- Dev: config.devmeta.***.com
- Test: config.testmeta.***.com
- PRO: config.prometa.***.com