前言
关于什么是nacos可以去nacos官网看一下 https://nacos.io/zh-cn/docs/what-is-nacos.html,这篇文章的重点描述在nacos是如何实现动态配置的。
重要概念
官方概念
nameSpace:命名空间,主要应用场景是区分线上测试环境。
group:代表一组配置集,可以使用项目名当做组名。
dataId:动态配置的key。
本文中一些规定词语
ConfigKey:nameSpace+group+dataId,全局唯一表示一个动态配置的key,之后简称为key
ConfigValue:ConfigKey所对应的值,之后简称value
Config:键值对,<ConfigKey,ConfigValue>
客户端重要模块
Listener:监听器,动态配置修改后,进行回调的模块。
CacheData:Config和Listener组成。
ClientWorker:管理CacheData的模块,通过长轮询的方式从服务端获取最新的动态配置,从而更新本地的动态配置。
ConfigService:动态配置服务模块,提供给调用方的模块,提供动态配置的读,写,添加监听器等功能。
HttpAgent: 提供发起http请求的功能。
模块交互
发布动态配置
ConfigService直接将Config透传给HttpAgent发起http请求,服务端收到请求后落db。
获取动态配置
ConfigService直接将Key透传给ClientWorker,然后再透传给HttpAgent发起http请求,服务端收到请求后返回value。
- 这里为什么要经过ClientWorker呢?
- 从模块划分角度来看,ClientWorker管理客户端的动态配置数据
- 由ClientWorker获取动态配置时,可以将数据存入db,这样可以在降级时使用。
监听器的注册
ConfigService直接将Config和Listener透传给ClientWorker,ClientWorker先查找configKey是否有对应的CacheData,如果有,拿到之前注册的CacheData,并且将监听器注册到CacheData,否则新创建一个CacheData。
监听器触发回调
ClientWorker通过长轮询的方式访问服务端,如果发现服务端的动态配置有所改变,则更新本地动态配置并触发监听器。