一疲吸、它是什么?
Apollo是攜程開源,用來管理各項(xiàng)配置并且支持實(shí)時更新月而、灰度發(fā)布等功能特性的系統(tǒng)挨措,屬于C/S架構(gòu)挖滤,
同時也支持分環(huán)境、分集群管理配置浅役,完善的權(quán)限斩松、審核機(jī)制。相關(guān)資料請查看
[https://github.com/ctripcorp](https://github.com/ctripcorp)
首先觉既,Apollo是有一個客戶端和服務(wù)端砸民, 借用git上的兩張圖來說明下程序的運(yùn)行流程:
1.使用者通過Apollo提供的Web頁面進(jìn)行配置更新
2.配置發(fā)布后會實(shí)時更新并推送到應(yīng)用程序的Apollo客戶端
3.客戶端也會定時去Apollo配置中心拉取配置
4.Apollo客戶端接收新文件會保存在內(nèi)存中,并更新本地緩存文件
5.應(yīng)用程序獲取配置更新的通知,并更新配置信息
1.1 Config Service
- 提供配置獲取接口
- 提供配置更新推送接口(基于Http long polling)
- 服務(wù)端使用Spring DeferredResult實(shí)現(xiàn)異步化岭参,從而大大增加長連接數(shù)量
- 接口服務(wù)對象為Apollo客戶端
1.2 Admin Service
- 提供配置管理接口
- 提供配置修改反惕、發(fā)布、推送等接口
- 接口服務(wù)對象為Portal
1.3 Meta Server
- Portal演侯、Cilent通過域名訪問Meta Server獲取Admin Service姿染、Config Service服務(wù)列表(IP+Port)
- Meta Server從Eureka獲取Config Service和Admin Service的服務(wù)信息,相當(dāng)于是一個Eureka Client
- 封裝了Eureka的服務(wù)發(fā)現(xiàn)接口
- Meta Server在部署時和Config Service是在一個JVM進(jìn)程中的秒际,所以IP悬赏、端口和Config Service一致
1.4 Eureka
- 基于Eureka和Spring Cloud Netflix提供服務(wù)注冊和發(fā)現(xiàn)
- Config Service和Admin Service會向Eureka注冊服務(wù),并保持心跳
- 為了簡單起見娄徊,目前Eureka在部署時和Config Service是在一個JVM進(jìn)程中的(通過Spring Cloud Netflix)
1.5 Portal
- 提供Web界面供用戶管理配置
- 通過Meta Server獲取Admin Service服務(wù)列表(IP+Port)闽颇,通過IP+Port訪問服務(wù)
- 在Portal側(cè)做load balance、錯誤重試
1.6 Client
- Apollo提供的客戶端程序寄锐,為應(yīng)用提供配置獲取兵多、實(shí)時更新等功能
- 通過Meta Server獲取Config Service服務(wù)列表(IP+Port),通過IP+Port訪問服務(wù)
- 在Client側(cè)做load balance橄仆、錯誤重試
資料均摘抄自github都能找到剩膘,有興趣可以到官網(wǎng)查閱資料。
二盆顾、配置更新發(fā)布流程
- Apollo啟動后怠褐,Conifg Service和Admin Service會注冊到我們的Eureka,并保持心跳連接檢測
- 配置更新發(fā)布的大致流程如下:
1.Apollo Cilent和Portal經(jīng)過負(fù)載均衡后分配到某個Meta Server
2.Meta Service從Eureka獲取Admin Service和Config Service的服務(wù)列表的(IP + Port)您宪,失敗會重試
3.Portal通過Meta Service提供的IP +Port訪問Admin Service奈懒,更新和發(fā)布配置并保存在Portal DB
4.Admin Service發(fā)送更新消息給各個Config Service(消息通過自實(shí)現(xiàn)的消息隊(duì)列傳遞到其他服務(wù))
5.Config Service收到更新后,通知給對應(yīng)的Client
6.Client讀取數(shù)據(jù)存在內(nèi)存中宪巨,然后在緩存到本地
7.基于第五步Config Service可能出現(xiàn)推送更新失敗磷杏,因此Client會定時通過去拉取配置信息
三、核心概念
核心概念有以下四個:
1.Application(應(yīng)用):關(guān)鍵字appId
這個比較好理解揖铜,就是使用配置的應(yīng)用程序茴丰,Apollo客戶端需要知道當(dāng)前的應(yīng)用是什么,從而獲取對應(yīng)的配置信息
2.環(huán)境(env)
配置信息也有對應(yīng)的環(huán)境天吓,開發(fā)和測試環(huán)境的配置肯定不一樣贿肩,如使用的DB
3.集群(Cluster)
一個應(yīng)用下可以有多個集群,比如上海和深圳兩個機(jī)房相同應(yīng)用的不同實(shí)例分為兩個集群
4.namespace(命令空間)
可以把namespace簡單理解成配置文件龄寞,不同類型的配置放在不同的文件中汰规,比如DBConfig、LimitConfig物邑、TipsConfig等等溜哮,格式為常見的properties滔金、xml、yml茂嗓、yaml餐茵、json等
首先配置一定是基于應(yīng)用的,只有應(yīng)用程序才會使用到這些配置文件述吸;而應(yīng)用又有環(huán)境之分忿族,比如測試、開發(fā)蝌矛、生產(chǎn)環(huán)境等道批;
同時環(huán)境又有集群的區(qū)別,例如應(yīng)用程序上線后在全國各個城市部署入撒,例如北京和深圳部署集群隆豹,雖然都是跑一樣的應(yīng)用服務(wù),都是生成環(huán)境茅逮,但是北京集群要連接數(shù)據(jù)庫地址肯定是連北京機(jī)房的數(shù)據(jù)庫璃赡,深圳連深圳的數(shù)據(jù)庫地址;
所以集群不一樣氮唯,配置也不一樣鉴吹。配置都是key-value形式姨伟,當(dāng)有很多配置信息時需要配置時惩琉,可以先歸類在配置,因此NameSpace可以理解為歸類的配置文件夺荒,同時配置可能會有公共的部分瞒渠,因此可以建立公共的NameSpace,通過繼承去使用技扼。
總結(jié):應(yīng)用的配置文件隸屬于應(yīng)用程序伍玖,由于應(yīng)用區(qū)分環(huán)境,所以不同環(huán)境配置文件也不同剿吻,具體的環(huán)境下面會由于部署的集群不同窍箍,配置也不同,那么組成了應(yīng)用下分環(huán)境丽旅,環(huán)境下分集群椰棘,集群下分NameSpace