Apollo分佈式配置中心

1、apollo是什麼

官網地址:apollo官網github地址git

官方文檔很全,也很詳細,本文是在官網的基礎上精簡而來做爲筆記github

1.apollo是攜程框架部門研發的分佈式配置中心,可以集中化管理應用不一樣環境、不一樣集羣的配置,配置修改後可以實時推送到應用端spring

2.特性:api

1).統一管理不一樣環境、不一樣集羣的配置

2).配置修改實時生效(熱發佈)

3).版本發佈管理(配置文件回滾)

4).灰度發佈

*:點了發佈後,只對部分應用實例生效,等觀察一段時間沒問題後再推給全部應用實例

5).權限管理、發佈審覈、操做審計
*:對配置的管理分爲編輯和發佈兩個環節

3.發佈流程:緩存

1).用戶在配置中心對配置進行修改併發布
2).配置中心通知Apollo客戶端有配置更新
3).Apollo客戶端從配置中心拉取最新的配置、更新本地配置並通知到應用

2、部署配置

3、Java接入

1.api整合方式springboot

Config config = ConfigService.getAppConfig();// 獲取application配置文件 Config config = ConfigService.getConfig(somePublicNamespace);// 根據名稱獲取配置文件網絡

2.和spring整合架構

` xmlns:apollo="http://www.ctrip.com/schema/apollo" xsi:schemaLocation="http://www.ctrip.com/schema/apollo http://www.ctrip.com/schema/apollo.xsd"併發

apollo:config/<!—最簡單的配置形式,注入application配置文件--> `app

3.springboot接入方式

1). Maven引入私服中apollo-client包
*:在打包以前須要先配置apollo-core中apollo-env.properties的地址
2). resources目錄下建立META-INF目錄並新建app.properties文件
	app.id=應用ID
3). 啓動類上加@EnableApolloConfig註解
4). 本地文件設置環境信息:server.properties  env=DEV

4.Spring方式接入

1). Maven引入私服中apollo-client包
*:在打包以前須要先配置apollo-core中apollo-env.properties的地址
2). resources目錄下建立META-INF目錄並新建app.properties文件
app.id=應用ID
3). 配置文件加入<apollo:config/>
4). 本地文件設置環境信息:server.properties  env=DEV

4、apollo架構

一、Config service提供配置讀取、推送等功能, 服務對象是apollo客戶端

二、Admin service提供配置修改、發佈等功能, 服務對象是portal管理界面

三、Meta server(邏輯角色)主要用於封裝eureka服務發現接口(經過http獲取服務信息,不須要關心背後實際的服務註冊和發現組件)

5、刨根問底

配置發佈後實時推送設計

1.ReleaMessage

1)、Admin Service在配置發佈後會往ReleaseMessage表插入一條消息記錄,消息內容就是配置發佈的AppId+Cluster+Namespace

2)、Config Service有一個線程會每秒掃描一次ReleaseMessage表,看看是否有新的消息記錄

3)、Config Service若是發現有新的消息記錄,那麼就會通知到全部的消息監聽器

2.Config Service通知客戶端的實現

1).客戶端會發起一個Http請求到Config Service的notifications/v2接口

2).NotificationControllerV2不會當即返回結果,而是經過Spring DeferredResult把請求掛起

3).若是在60秒內沒有該客戶端關心的配置發佈,那麼會返回Http狀態碼304給客戶端

4).若是有該客戶端關心的配置發佈,NotificationControllerV2會調用DeferredResult的setResult方法,傳入有配置變化的namespace信息,同時該請求會當即返回

5).客戶端從返回的結果中獲取到配置變化的namespace後,會當即請求Config Service獲取該namespace的最新配置

3.客戶端的設計

1)、客戶端和服務端保持了一個長鏈接,從而能第一時間得到配置更新的推送

2)、定時從Apollo配置中心服務端拉取應用的最新配置(默認5分鐘,爲了防止推送機制失效致使配置不更新)

3)、客戶端獲取到最新的配置後會保存在內存中,而後同步到本地緩存文件 (網絡不通或服務不可用時依然能從本地恢復)

4)、應用程序從apollo客戶端中獲取最新的配置

相關文章
相關標籤/搜索