傳統配置文件有什么缺點
如果修改了配置文件,需要重新打包發布,而且每個環境變量配置文件復雜。
分布式配置中心
將配置文件注冊到配置中心平台上,可以使用分布式配置中心實時更新配置文件,統一管理,不需要重新打包發布
后面定義的所有相關配置文件信息:除了 server port 其他的不寫在本地哦
什么是分布式配置中心
項目中配置文件比較繁雜,而且不同環境的不同配置修改相對頻繁,每次發布都需要對應修改配置,如果配置出現錯誤,需要重新打包發布,時間成本較高,因此需要做統一的分布式注冊中心,能做到自動更新配置文件信息,解決以上問題
常用分布式配置中心框架
市面上常見的:
Disconf(依賴於zookpeer)、Zookpeer、diamond(阿里巴巴)、Apollo(攜程)、Redis、xxl-conf
ZK的原理:保證配置文件信息實時更新(事件通知)
大型互聯網公司自己內部都有自己獨立分布式配置中心
獨立RPC、獨立分布式各種解決方案
注冊中心解決 rpc服務治理
分布式配置中心 解決分布式配置文件管理
Apollo阿波羅簡介
Apollo(阿波羅)是攜程框架部門研發的分布式配置中心,能夠集中化管理應用不同環境、不同集群的配置,配置修改后能夠實時推送到應用端,並且具備規范的權限、流程治理等特性,適用於微服務配置管理場景。
Apollo阿波羅特點
用戶在Apollo修改完配置並發布后,客戶端能實時(1秒)接收到最新的配置,並通知到應用程序。
統一管理不同環境、不同集群的配置
所有的配置發布都有版本概念,從而可以方便的支持配置的回滾。
配置修改實時生效(熱發布)
用戶在Apollo修改完配置並發布后,客戶端能實時(1秒)接收到最新的配置,並通知到應用程序
版本發布管理
所有的配置發布都有版本概念,從而可以方便的支持配置的回滾
灰度發布
支持配置的灰度發布,比如點了發布后,只對部分應用實例生效,等觀察一段時間沒問題后再推給所有應用實例。
權限管理、發布審核、操作審計
應用和配置的管理都有完善的權限管理機制,對配置的管理還分為了編輯和發布兩個環節,從而減少人為的錯誤。
所有的操作都有審計日志,可以方便的追蹤問題。
客戶端配置信息監控
可以方便的看到配置在被哪些實例使用
提供Java和.Net原生客戶端
提供了Java和.Net的原生客戶端,方便應用集成
支持Spring Placeholder, Annotation和Spring Boot的ConfigurationProperties,方便應用使用(需要Spring 3.1.1+)
同時提供了Http接口,非Java和.Net應用也可以方便的使用
提供開放平台API
Apollo自身提供了比較完善的統一配置管理界面,支持多環境、多數據中心配置管理、權限、流程治理等特性。
不過Apollo出於通用性考慮,對配置的修改不會做過多限制,只要符合基本的格式就能夠保存。
在我們的調研中發現,對於有些使用方,它們的配置可能會有比較復雜的格式,如xml, json,需要對格式做校驗。
還有一些使用方如DAL,不僅有特定的格式,而且對輸入的值也需要進行校驗后方可保存,如檢查數據庫、用戶名和密碼是否匹配。
對於這類應用,Apollo支持應用方通過開放接口在Apollo進行配置的修改和發布,並且具備完善的授權和權限控制
部署簡單
配置中心作為基礎服務,可用性要求非常高,這就要求Apollo對外部依賴盡可能地少
目前唯一的外部依賴是MySQL,所以部署非常簡單,只要安裝好Java和MySQL就可以讓Apollo跑起來
Apollo還提供了打包腳本,一鍵就可以生成所有需要的安裝包,並且支持自定義運行時參數
Apollo整體架構原理
官網: https://github.com/nobodyiam/apollo
原理解讀:
分布式中心管理平台
作用: 增刪改查 配置
項目啟動時候 連接阿波羅配置中心平台
項目進項掃包 獲取當前包下的類 只要屬性加上 @value注解
如果屬性上加上了@Value注解 使用key(value的值)在遠程服務器上面獲取對應value信息
緩存到對應的jvm
應用端向阿波羅服務器獲取配置文件信息
阿波羅平台提供key查詢配置文件信息接口