Apollo(阿波羅)是攜程框架部門研發(fā)的開源配置管理中心,能夠集中化管理應(yīng)用不同環(huán)境、不同集群的配置,配置修改后能夠?qū)崟r推送到應(yīng)用端,并且具備規(guī)范的權(quán)限、流程治理等特性。Apollo架構(gòu)模塊圖:

來源:網(wǎng)絡(luò)
各模塊職責(zé)
- Config Service提供配置的讀取、推送等功能,服務(wù)對象是Apollo客戶端
- Admin Service提供配置的修改、發(fā)布等功能,服務(wù)對象是Apollo Portal(管理界面)
- Eureka提供服務(wù)注冊和發(fā)現(xiàn),目前Eureka在部署時和Config Service是在一個JVM進(jìn)程中的
- Config Service和Admin Service都是多實例、無狀態(tài)部署,所以需要將自己注冊到Eureka中并保持心跳
- 在Eureka之上架了一層Meta Server用于封裝Eureka的服務(wù)發(fā)現(xiàn)接口
- Client通過域名訪問Meta Server獲取Config Service服務(wù)列表(IP+Port),而后直接通過IP+Port訪問服務(wù),同時在Client側(cè)會做load balance、錯誤重試
- Portal通過域名訪問Meta Server獲取Admin Service服務(wù)列表(IP+Port),而后直接通過IP+Port訪問服務(wù),同時在Portal側(cè)會做load balance、錯誤重試
為了簡化部署實際上會把Config Service、Eureka和Meta Server三個邏輯角色部署在同一個JVM進(jìn)程中
分步執(zhí)行流程
- Apollo啟動后,Config Service和Admin Service會自動注冊到Eureka服務(wù)注冊中心,并定期發(fā)送保活心跳。
- Apollo Client和Portal管理端通過配置的Meta Server的域名地址經(jīng)由Software Load Balancer(軟件負(fù)載均衡器)進(jìn)行負(fù)載均衡后分配到某一個Meta Server
- Meta Server從Eureka獲取Config Service和Admin Service的服務(wù)信息,相當(dāng)于是一個Eureka Client
- Meta Server獲取Config Service和Admin Service(IP+Port)失敗后會進(jìn)行重試
- 獲取到正確的Config Service和Admin Service的服務(wù)信息后,Apollo Client通過Config Service為應(yīng)用提供配置獲取、實時更新等功能;Apollo Portal管理端通過Admin Service提供配置新增、修改、發(fā)布等功能
核心概念
- Application (應(yīng)用):就是實際使用配置的應(yīng)用,Apollo客戶端在運行時需要知道當(dāng)前應(yīng)用是誰,從而可以去獲取對應(yīng)的配置
關(guān)鍵字:appId - environment (環(huán)境):配置對應(yīng)的環(huán)境,Apollo客戶端在運行時需要知道當(dāng)前應(yīng)用處于哪個環(huán)境,從而可以去獲取應(yīng)用的配置
關(guān)鍵字:env - cluster (集群):一個應(yīng)用下不同實例的分組,比如典型的可以按照數(shù)據(jù)中心分,把上海機房的應(yīng)用實例分為一個集群,把北京機房的應(yīng)用實例分為另一個集群。
關(guān)鍵字:cluster - namespace (命名空間): 一個應(yīng)用下不同配置的分組,可以簡單地把namespace類比為文件,不同類型的配置存放在不同的文件中,如數(shù)據(jù)庫配置文件,RPC配置文件,應(yīng)用自身的配置文件等
關(guān)鍵字:namespaces

0x01:部門管理
Apollo 默認(rèn)部門提供兩個,如需要增加部門,可在系統(tǒng)參數(shù)中修改

添加部門

0x02:用戶管理

添加用戶

0x03:創(chuàng)建項目(應(yīng)用)

創(chuàng)建項目

創(chuàng)建完成后

0x04:授權(quán)管理

賦予用戶huangjj管理payservice服務(wù)的權(quán)限

這樣huangjj用戶登錄就可以看到payservice應(yīng)用了。
0x05:刪除項目

刪除應(yīng)用

集群和Namespace刪除同理
0x06:創(chuàng)建token

輸入相關(guān)參數(shù),點擊創(chuàng)建就

Namespace授權(quán)

0x07:添加配置和發(fā)布配置

添加

發(fā)布

0x08:創(chuàng)建Namespace

創(chuàng)建Namespace

Namespace授權(quán)

0x08:獲取集群下所有Namespace信息接口
curl -H 'Authorization:748aba21fa6717c5ac6210e82d32f05d9a7c61d6'
-H 'Content-Type:application/json;charset=UTF-8'
http://127.0.0.1:8070/openapi/v1/envs/dev/apps/payservice/clusters/default/namespaces/application

返回數(shù)據(jù):
{
"appId": "payservice",
"clusterName": "default",
"namespaceName": "application",
"comment": "default app namespace",
"format": "properties",
"isPublic": false,
"items": [
{
"key": "rule.count",
"value": "100",
"comment": "",
"dataChangeCreatedBy": "apollo",
"dataChangeLastModifiedBy": "apollo",
"dataChangeCreatedTime": "2020-08-08T09:37:13.000+0800",
"dataChangeLastModifiedTime": "2020-08-08T09:37:13.000+0800"
},
{
"key": "port",
"value": "9009",
"comment": "",
"dataChangeCreatedBy": "apollo",
"dataChangeLastModifiedBy": "apollo",
"dataChangeCreatedTime": "2020-08-08T09:37:13.000+0800",
"dataChangeLastModifiedTime": "2020-08-08T09:37:13.000+0800"
}
],
"dataChangeCreatedBy": "apollo",
"dataChangeLastModifiedBy": "apollo",
"dataChangeCreatedTime": "2020-08-08T09:18:59.000+0800",
"dataChangeLastModifiedTime": "2020-08-08T09:18:59.000+0800"
}
結(jié)構(gòu)url的參數(shù)規(guī)則說明:
env所管理的配置環(huán)境appId所管理的配置AppIdclusterName所管理的配置集群名, 一般情況下傳入 default 即可。如果是特殊集群,傳入相應(yīng)集群的名稱即可namespaceName所管理的Namespace的名稱,如果是非properties格式,需要加上后綴名,如sample.yml
詳細(xì)參考:https://github.com/ctripcorp/apollo/wiki/Apollo開放平臺
另外也可以通過JAVAAPI的方式獲取配置
詳細(xì)參考:https://github.com/ctripcorp/apollo/wiki/Java客戶端使用指南