CodeWalk

Nacos注册中心与配置中心原理

作者:我是大山 · 2026-05-30 12:55

请详细介绍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,不一致则返回最新配置