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