統一配置中心選型對比
阿新 • • 發佈:2019-01-03
整理筆記時發現之前整理的一些東西,分享給大家。
為什麼需要集中配置
程式的發展,需要引入集中配置:
- 隨著程式功能的日益複雜,程式的配置日益增多:各種功能的開關、引數的配置、伺服器的地址……
- 並且對配置的期望也越來越高,配置修改後實時生效,灰度釋出,分環境、分叢集管理配置,完善的許可權、稽核機制……
- 並且隨著採用分散式的開發模式,專案之間的相互引用隨著服務的不斷增多,相互之間的呼叫複雜度成指數升高,每次投產或者上線新的專案時苦不堪言,因此需要引用配置中心治理。
已有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
分類: 架構與選型
標籤: 配置中心
轉載: