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服务端发起一个长连接请求,这个长连接请求最多30就会超时,Nacos 服务端收到请求之后,先检查当前配置是否发生了变更,
-
如果有,则直接返回长连接请求结果
-
如果没有,则设置一个定时任务,延期 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 模式)
-
保证强一致性
-