Apollo配置中心-配置熱釋出如何實現

wfxx發表於2024-08-18

引言
配置中心在微服務架構體系中是非常重要的基礎設施服務,承擔著分散式配置集中管理、配置熱釋出以及審計等重要的職責。本文主要探討​​Apollo​​配置中心的配置熱釋出特性如何實現。

配置熱釋出如何實現

1、配置釋出主流程
如上圖所示,配置釋出的主流程如下:

(1)使用者透過​​Portal​​向​​AdminService​​釋出配置資訊;

(2)​​AdminService​​在配置釋出後會往​​ReleaseMessage​​表插入一條訊息記錄;

(3)​​ConfigService​​中包含了一個定時執行緒,該定時執行緒每秒掃描一次​​ReleaseMessage​​表,檢查表中是否有新的訊息記錄;

(4)如果存在配置更新,​​ConfigService​​就會通知所有的訊息監聽器;

(5)通知​​Controller​​會根據釋出的配置資訊通知對應的客戶端;

客戶端與配置中心的大致互動如下所示:

這裡的配置更新推送其實並不是真正進行資訊推送,而是透過長輪詢來實現配置的更新。實際上並不是配置的更新推送,而是配置更新通知的推送,客戶端拿到通知後需要進一步獲取具體的變化的配置資訊。

2、長輪詢
(1)如果使用​​Push​​方式推送資料會有什麼問題?

服務端需要與客戶端建立長連線,服務端有資料更新的時候可以進行資料推送,資料更新比較及時。但是服務端無法感知客戶端的處理能力,可能會造成資料積壓。另外叢集情況下部分節點不線上會通知失敗,等客戶端又線上後需要進行補償推送,節點還有可能存在擴容等各種情況。對於配置中心這種業務場景來說,透過​​Push​​方式實現資料推動顯得複雜了。

(2)如果使用​​Pull​​方式拉取資料會有什麼問題?

​​Pull​​模式主要是透過客戶端主動向配置中心進行資料請求,拉取對應的配置資訊。由於是客戶端主動拉取,因此不會出現資料堆積的問題。但是資料如何去拉,什麼時間去拉,拉的頻率如何控制,這些都是問題。如果頻率過高,而配置並未更新,那麼就會對服務端造成不必要的連線壓力。如果頻率過低,那麼配置更新就會存在延時的問題。因此同樣不適合配置中心的業務場景。

(3)長輪詢

客戶端向配置中心進行請求,配置中心不會立即返回響應,而是會​​hold​​住這個請求直到指定時間超時後進行返回。如果沒有配置變更,則返回​​Http​​狀態碼​​304​​給客戶端。超時返回後,客戶端將再次發起請求。

如果存在配置變更,將返回對應的​​namespace​​資訊,客戶端根據namespace資訊獲取對應的配置資訊。

另外為了保證配置的有效性,客戶端也會定時請求配置資訊,防止配置更新可能出現的異常情況,是一種資料保證的兜底​​fallback​​機制。另外當獲取到配置後,會同步到本地配置檔案中 。這樣即便客戶端與配置中心無法通訊,客戶端也可以從本地配置檔案中獲取配置資訊。

那麼問題來了,為什麼不直接在長輪詢的響應中直接回復配置資訊呢?主要是由於本身已經存在了定時拉取配置的步驟,那麼為了保證單一原則以及程式碼上的簡潔以及複用。所以透過這種獲取配置更新後再進行資料拉取的方式。

3、客戶端獲取配置資訊
我們一起看下客戶端如何工作流程,如下圖:

(1)​​ConfigServiceLocator​​:主要負責向​​Eruka​​註冊中心獲取​​ConfigService​​地址列表資訊;

(2)​​RemoteConfigLongPollService​​:從​​ConfigServiceLocator​​獲取到地址列表資訊後,透過長輪詢的方式獲取配置變更資訊;

(3)​​RemoteConfigReposity​​:從​​ConfigService​​獲取變更的配置資料;

(4)​​LocalFileConfigReposity​​:把配置資料固化到本地,同時作為本地配置資料的來源;

(5)​​DefaultConfig​​:主要和業務方進行互動,提供配置獲取方法,同時可以註冊配置變更事件。

總結
本文主要探討了​​Apollo​​配置中心配置熱釋出的相關內容,分析了為什麼長輪詢是比較適合配置中心的資料互動方式。在今後的架構設計中我們也可以以此來作為參考。另外客戶端的設計中,也體現了了分層以及職責單一的程式碼風格,我們自己在實際專案開發中也比較有借鑑的意義

————————————————————————————————————————————————
©著作權歸作者所有:來自51CTO部落格作者慕楓技術筆記的原創作品,請聯絡作者獲取轉載授權,否則將追究法律責任
Apollo配置中心如何實現配置熱釋出
https://blog.51cto.com/u_15474618/4905554
————————————————————————————————————————————————
可參考:
微服務架構~攜程Apollo配置中心架構剖析
官方文件

相關文章