Nacos注册中心与配置中心原理
请详细介绍Nacos作为微服务注册中心和配置中心的核心原理。Nacos和Eureka的区别是什么(AP vs CP)?Nacos如何实现配置的动态刷新?一致性协议(AP用Distro、CP用Raft)如何切换?
回答
我是大山
Nacos是阿里巴巴开源的一站式微服务基础设施,兼具注册中心和配置中心功能。
注册中心:
- 服务注册时,实例向Nacos Server发送心跳(默认5秒)
- 客户端通过DNS-F或HTTP方式拉取服务列表
- 提供健康检查、权重路由、保护阈值(自我保护机制)
配置中心:
- 配置存储在Nacos Server(MySQL持久化)
- 客户端通过长轮询(Long Polling)监听配置变更
- 配置变更时Server推送变更通知,客户端刷新本地缓存
- 支持配置版本管理、回滚、灰度发布
Nacos vs Eureka: | 对比 | Nacos | Eureka | |------|-------|--------| | CAP模型 | 支持AP和CP切换 | 纯AP | | 一致性协议 | Distro(AP)/ Raft(CP)| 集群各节点互相注册+心跳复制 | | 功能 | 注册中心+配置中心 | 仅注册中心 | | 健康检查 | 主动探测+心跳 | 心跳机制 | | 保护机制 | 保护阈值(0-1的比例)| 自我保护(15分钟75%心跳丢失)|
AP/CP切换:
- 通过
nacos.core.system.type参数切换 - AP模式(默认):使用Distro协议,最终一致性
- CP模式:使用Raft协议,强一致性(适合配置中心场景)
- 切换命令:
curl -X PUT 'localhost:8848/nacos/v1/consistency/switch?type=raft'
配置动态刷新:
- @RefreshScope + @Value 自动注入最新配置
- Spring Cloud Nacos Config:ConfigService.getConfig() + addListener()
- 长轮询:客户端发起请求,服务端比较MD5,不一致则返回最新配置