Nacos 配置中心執行流程的詳細說明
一、Nacos配置中心執行流程詳解
Nacos配置中心是一個強大的分布式配置管理服務,其執行流程涵蓋了配置的發布、獲取、監聽和更新等核心功能。下面我將從多個維度詳細介紹Nacos配置中心的完整執行流程
由于提供者 或 消費者集成了Nacos Client(Nacos的客戶端),其實也就是提供者或消費者通過Nacos Client(Nacos的客戶端)向Nacos的服務端發送HTTPS獲取Nacos服務端上的配置信息
二、核心架構組件
1、客戶端組件
-
ConfigService:配置服務接口,提供獲取/發布配置的能力
-
ClientWorker:實際執行配置獲取和監聽的核心工作類
-
LongPollingRunnable:長輪詢任務線程
-
CacheData:緩存配置數據及監聽器
2、服務端組件
-
ConfigController:處理配置相關的RESTful請求
-
PersistService:配置持久化服務
-
DumpService:配置轉儲服務
-
NotifyCenter:事件通知中心
三、配置發布流程
1、核心概念

2、控制臺發布配置
i、用戶操作
-
在Nacos控制臺選擇命名空間、分組
-
輸入Data ID和配置內容
-
點擊發布按鈕
ii、Nacos服務端處理控制臺發布的請求

-
Nacos服務端處理:
-
1、校驗配置合法性(格式、長度等)
-
2、持久化到存儲層(默認內嵌 Derby,生產建議 MySQL 集群)
-
3、通過 Raft 協議保證集群一致性(CP 模式)
-
4、觸發監聽器,通知訂閱該配置的客戶端(是指我們的消費者和提供者)
-
-
配置存儲結構:

四、消費者或提供者獲取配置流程
1、初始化階段

-
創建ConfigService
-
初始化ServerHttpAgent處理HTTP請求
-
創建ClientWorker實例
-
-
首次獲取配置

2、獲取配置詳細流程
i、消費者或提供者端發起請求
-
GET請求:/nacos/v1/cs/configs
-
參數:dataId, group, tenant(namespace)
ii、Nacos服務端處理請求
-
檢查本地緩存
-
查詢數據庫(Derby 或 MySQL)獲取配置
-
返回配置內容及MD5值
iii、消費者或提供者端處理響應
-
校驗MD5
-
緩存到本地文件
-
初始化CacheData對象
-
解析配置內容(如 YAML 轉 PropertySource)
-
將配置注入 Spring Environment
3、首次獲取流程

五、配置動態刷新
Nacos 作為配置中心,當消費者或提供者去訪問Nacos動態獲取配置源之后,會緩存到本地內存以及磁盤中。 由于Nacos作為動態配置中心,
意味著后續配置變更之后需要讓所有相關的消費者或提供者端感知,并更新本地內存! 那么這個功能是在哪里實現的呢? 以及它是采用什么樣的方式來實現配置的更新的呢?
1、長輪詢機制(核心)
i、消費者 或 提供者端行為:
-
啟動長輪詢任務,定時(默認 30 秒)檢查配置變更
-
攜帶本地配置的 MD5 和 lastModified 時間戳

ii、Nacos服務端處理:
-
對比消費者或提供者端 MD5 與 Nacos服務端 MD5
-
無變更:掛起請求(默認 30 秒),減少空輪詢
-
有變更:立即返回新配置
2、長輪詢機制流程圖

消費者或提供者端輪詢向Nacos服務端發起一個長連接請求,這個長連接請求最多 30s 就會超時,Nacos 服務端收到請求之后,
將請求攜帶的配置信息 和 服務端配置信息進行 MD5比對, 檢查服務端的配置是否有變化,
-
如果有,則直接返回長連接請求結果
-
如果沒有,則設置一個定時任務,延期
29.5s執行,并且把當前的長連接請求加入allSubs 隊列,這個時候有兩種方式觸發該長連接請求結果返回:-
1、第一種是在
29.5s內任意一個時刻,通過 Nacos Dashboard 或者 API 的方式對配置進行了修改,就會觸發一個事件機制,監聽該事件的任務會遍歷allSubs 隊列,在隊列中找到該長連接請求,觸發請求查詢并返回結果,就完成一次"推送"操作 -
2、第二種是在等待
29.5s后觸發自動檢查機制,這個時候不管配置有沒有發生變化,都會把結果返回消費者或提供者端
-

六、高可用設計
1、消費者 或 提供者端容災
-
本地緩存:
-
配置持久化到 ${user.home}/nacos/config 目錄
-
Nacos服務端不可用時,使用本地緩存
-
-
重試策略:
- 失敗后自動切換其他節點(需配置集群地址)
2、Nacos服務端集群
-
數據持久化:
-
默認內嵌 Derby(測試用)
-
生產建議:外置 MySQL 集群(主從架構)
-
-
一致性協議:
-
配置數據使用 Raft 協議(CP 模式)
-
保證強一致性
-

浙公網安備 33010602011771號