Apollo工作原理
下圖是Apollo架構模塊的概覽
各模塊職責
上圖簡要描述了Apollo的總體設計,我們可以從下往上看:
Config Service提供配置的讀取、推送等功能,服務對象是Apollo客戶端
Admin Service提供配置的修改、發布等功能,服務對象是Apollo Portal(管理界面)
Eureka提供服務注冊和發現,為了簡單起見,目前Eureka在部署時和Config Service是在一個JVM進程中的
Config Service和Admin Service都是多實例、無狀態部署,所以需要將自己注冊到Eureka中並保持心跳
在Eureka之上架了一層Meta Server用於封裝Eureka的服務發現接口
Client通過域名訪問Meta Server獲取Config Service服務列表(IP+Port),而后直接通過IP+Port訪問服務,同時在Client側會做load balance、錯誤重試
Portal通過域名訪問Meta Server獲取Admin Service服務列表(IP+Port),而后直接通過IP+Port訪問服務,同時在Portal側會做load balance、錯誤重試
為了簡化部署,我們實際上會把Config Service、Eureka和Meta Server三個邏輯角色部署在同一個JVM進程中
分步執行流程
1. Apollo啟動后,Config/Admin Service會自動注冊到Eureka服務注冊中心,並定期發送保活心跳。
2. Apollo Client和Portal管理端通過配置的Meta Server的域名地址經由Software Load Balancer(軟件負載均衡
器)進行負載均衡后分配到某一個Meta Server
3. Meta Server從Eureka獲取Config Service和Admin Service的服務信息,相當於是一個Eureka Client
4. Meta Server獲取Config Service和Admin Service(IP+Port)失敗后會進行重試
5. 獲取到正確的Config Service和Admin Service的服務信息后,Apollo Client通過Config Service為應用提供配
置獲取、實時更新等功能;Apollo Portal管理端通過Admin Service提供配置新增、修改、發布等功能
核心概念
1. application (應用)
這個很好理解,就是實際使用配置的應用,Apollo客戶端在運行時需要知道當前應用是誰,從而可以去獲取
對應的配置
關鍵字:appId
2. environment (環境)
配置對應的環境,Apollo客戶端在運行時需要知道當前應用處於哪個環境,從而可以去獲取應用的配置
關鍵字:env
3. cluster (集群)
一個應用下不同實例的分組,比如典型的可以按照數據中心分,把上海機房的應用實例分為一個集群,把北
京機房的應用實例分為另一個集群。
關鍵字:cluster
4. namespace (命名空間)
一個應用下不同配置的分組,可以簡單地把namespace類比為文件,不同類型的配置存放在不同的文件中,
如數據庫配置文件,RPC配置文件,應用自身的配置文件等
關鍵字:namespaces
它們的關系如下圖所示:
項目管理
基礎設置
1. 部門管理
apollo 默認部門有兩個。要增加自己的部門,可在系統參數中修改:
進入系統參數設置
2.新增部門
[{"orgId":"TEST1","orgName":"樣例部門1"},{"orgId":"TEST2","orgName":"樣例部門2"},
{"orgId":"micro_service","orgName":"微服務部門"}]
3. 添加用戶
apollo默認提供一個超級管理員: apollo,可以自行添加用戶
新建用戶wgr
4.創建項目
1. 打開apollo-portal主頁:http://192.168.180.137:8070/
2. 點擊“創建項目”:account-service
3. 輸入項目信息
部門:選擇應用所在的部門
應用AppId:用來標識應用身份的唯一id,格式為string,需要和項目配置文件applications.properties
中配置的app.id對應
應用名稱:應用名,僅用於界面展示
應用負責人:選擇的人默認會成為該項目的管理員,具備項目權限管理、集群創建、Namespace創建等
權限
4. 點擊提交
創建成功后,會自動跳轉到項目首頁
5. 賦予之前添加的用戶張三管理account-service服務的權限
使用管理員apollo將指定項目授權給用戶wgr
使用wgr登錄,查看項目配置
5 刪除項目
如果要刪除整個項目,點擊右上角的“管理員工具--》刪除應用、集群...”
首先查詢出要刪除的項目,點擊“刪除應用
6 配置的增刪改查和之前一樣
下面就新增一個配置
然后啟動項目去獲取
7 添加Namespace
添加公共Namespace
在項目開發中,有一些配置可能是通用的,我們可以通過把這些通用的配置放到公共的Namespace中,這樣其他
項目要使用時可以直接添加需要的Namespace
1. 新建common-template項目
pring.http.encoding.enabled = true spring.http.encoding.charset = UTF‐8 spring.http.encoding.force = true server.tomcat.remote_ip_header = x‐forwarded‐for server.tomcat.protocol_header = x‐forwarded‐proto server.use‐forward‐headers = true server.servlet.context‐path = /
關聯公共Namespace
1. 打開之前創建的account-service項目
2. 點擊左側的添加Namespace
3. 添加Namespace
4. 根據需求可以覆蓋引入公共Namespace中的配置,下面以覆蓋server.servlet.context-path為例
5. 修改server.servlet.context-path為:/account-service
6 修改
集群管理
在有些情況下,應用有需求對不同的集群做不同的配置,比如部署在A機房的應用連接的RocketMQ服務器地址和
部署在B機房的應用連接的RocketMQ服務器地址不一樣。另外在項目開發過程中,也可為不同的開發人員創建不
同的集群來滿足開發人員的自定義配置
創建集群
1. 點擊頁面左側的“添加集群”按鈕
切換到對應的集群,修改配置並發布即可