一、Apollo簡介
1、Apollo是攜程框架部門研發的分布式配置中心
2、集中化管理應用的不同環境和不同集群的配置
3、配置修改后能夠實時推送到應用端
4、具備規范的權限、流程治理等特性
二、Apollo組成部分
Apollo包括服務端和客戶端
服務端:基于Spring Boot和SpringCloud開發,打包后可以直接運行,不需要額外安裝Tomcat等應用容器
java客戶端:不依賴任何框架,能夠運行于所有Java運行時環境,同時對Spring/Spring Boot環境也有較好的支持
三、Apollo特性
1、同意管理不同環境、不同集群的配置
2、配置修改實時生效(熱發布)
3、版本發布管理–所有配置都有版本概念,便于配置的回滾
4、灰度發布–點了發布后只對部分應用實例生效,等觀察一段時沒問題后再推送給所有應用實例
5、權限管理、發布審核、操作審計
權限管理–有完善的權限管理
發布審核–配置管理分了編輯發布兩個環節,減少人為錯誤
操作審計–所有操作都有審計日志,可以方便追蹤問題
6、客戶端配置信息監控–可以在界面上方便看到配置在被那些實例使用
7、提供java和.net原生客戶端,方便應用集成
8、提供了http接口,非java和.net應用也可以方便地使用
9、提供開放平套API
10、部署非常簡單,只要安裝好Java和MySQL就可以讓Apollo跑起來
四、執行流程
?
1、用戶在配置中心對配置進行修改并發布
2、配置中心通知Apollo客戶端有配置更新
3、Apollo客戶端從配置中心拉取最新的配置、更新本地配置并通知到應用
五、工作原理
?
上圖簡要描述了Apollo的總體設計,我們可以從下往上看:
1、Config Service提供配置的讀取、推送等功能,服務對象是Apollo客戶端
2、Admin Service提供配置的修改、發布等功能,服務對象是Apollo Portal(管理界面)
3、Config Service和Admin Service都是多實例、無狀態部署,所以需要將自己注冊到Eureka中并保持心跳
4、在Eureka之上我們架了一層Meta Server用于封裝Eureka的服務發現接口
5、Client通過域名訪問Meta Server獲取Config Service服務列表(IP+Port),而后直接通過IP+Port訪問服務,同時在Client側會做load balance、錯誤重試
6、Portal通過域名訪問Meta Server獲取Admin Service服務列表(IP+Port),而后直接通過IP+Port訪問服務,同時在Portal側會做load balance、錯誤重試
7、為了簡化部署,我們實際上會把Config Service、Eureka和Meta Server三個邏輯角色部署在同一個JVM進程中