Nacos 配置热更新原理
改了 Nacos 上的配置,服务不需要重启就能生效。这背后是长轮询、MD5 对比和 Spring Cloud 的 RefreshScope 在起作用。
一、配置中心的核心能力
- 1.1 配置集中管理——告别每个服务一个 application.yml
- 1.2 动态刷新——运行时修改配置
- 1.3 版本管理——回滚历史配置
- 1.4 灰度发布——按 IP/标签下发配置
二、Nacos 客户端的配置获取
- 2.1
NacosPropertySourceLocator.locate()——启动时加载配置 - 2.2 本地快照——
snapshot-tenant/group/dataId文件 - 2.3 启动优先级——本地快照 > Nacos Server
- 2.4 防止 Nacos 不可用时服务无法启动
三、长轮询(Long Polling)机制
- 3.1 短轮询的缺点——频繁请求、浪费资源
- 3.2 长轮询的原理——Hold 住请求,有变更再返回
- 3.3 Nacos 的长轮询实现——30 秒超时 +
ClientLongPolling - 3.4 MD5 对比——配置内容未变则不推
四、Spring 的配置刷新
- 4.1
@RefreshScope的作用 - 4.2
RefreshScope.refresh()——销毁并重建 Bean - 4.3
@Value的热更新——RefreshScope标注的类 - 4.4
@ConfigurationProperties的热更新——自动刷新 - 4.5
EnvironmentChangeEvent事件的发布与监听
五、灰度配置发布
- 5.1 基于 IP 的灰度——配置灰度到指定机器
- 5.2 基于标签的灰度——结合 Nacos 服务发现的元数据
- 5.3 Beta 发布——先验证再全量
六、生产环境实践
- 6.1 namespace 的规划——多环境隔离
- 6.2 敏感配置加密——Jasypt 集成
- 6.3 配置变更审计——谁在什么时间改了什么
- 6.4 配置变更通知——钉钉/企业微信
七、总结
- 配置中心的三驾马车:长轮询 + MD5 + RefreshScope
- 与 Apollo / Spring Cloud Config 的对比
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 谜思录!