統一配置中心選型對比


整理筆記時發現之前整理的一些東西,分享給大家。

為什么需要集中配置

程序的發展,需要引入集中配置

  • 隨着程序功能的日益復雜,程序的配置日益增多:各種功能的開關、參數的配置、服務器的地址……
  • 並且對配置的期望也越來越高,配置修改后實時生效,灰度發布,分環境、分集群管理配置,完善的權限、審核機制……
  • 並且隨着采用分布式的開發模式,項目之間的相互引用隨着服務的不斷增多,相互之間的調用復雜度成指數升高,每次投產或者上線新的項目時苦不堪言,因此需要引用配置中心治理。

已有zookeeper、etcd還需要引入嗎

  • 之前的音樂服務項目,通過etcd實現了服務的注冊與發現,且一些業務配置也存儲到etcd中,通過實踐我們收獲了集中配置帶來的優勢
  • 但是etcd並沒有方便的UI管理工具,且缺乏權限、審核等機制
  • 最重要的是,etcd和zookeeper通常定義為服務注冊中心,統一配置中心的事情交給專業的工具去解決。

有哪些開源配置中心

  1. spring-cloud/spring-cloud-config
    https://github.com/spring-cloud/spring-cloud-config
    spring出品,可以和spring cloud無縫配合

  2. 淘寶 diamond
    https://github.com/takeseem/diamond
    已經不維護

  3. disconf
    https://github.com/knightliao/disconf
    java開發,螞蟻金服技術專家發起,業界使用廣泛

  4. 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM