Nacos 深入教程 · 服务发现 + 配置中心

把 Nacos 当成一个"按数据类型切换一致性"的系统

基于 Nacos 2.x(稳定基线)+ 3.x 前沿标注,Spring Cloud Alibaba 2023.x。 目标读者:有 Spring Boot 基础、想系统理解 Nacos(面试 / 选型 / 排障)的工程师。 篇幅:约半天(深入)。代码片段为说明性示例,未在本机运行 Nacos 集群验证。

·适合谁

这份教程为你写,如果你符合下面三条——具体到能力,不是"了解过":

前置能力

  • 用 Spring Boot 写过 REST 服务,知道 application.yml 怎么配、怎么注入一个配置项。
  • 知道"多个服务实例的地址会变,不能写死 IP"这个问题是存在的(不要求你已经会解决)。
  • 听过 CAP、最终一致这些词,知道它们指向"分布式系统要做取舍"(不要求你能展开证明)。

·不适合谁(请看他山资源)

  • 完全没碰过微服务 / Spring:先过一遍 Spring 官方 guides,再回来。
  • 只想"把 Nacos 跑起来"、不关心原理:直接看 Nacos 官方 quickstart,半小时能起一个单机实例。
  • 要给 Nacos 提 PR / 改源码:本教程深入到机制层(类名、协议流程)为止,再往下看 GitHub 源码。

·读完之后你能做到什么

一句带走 · 文档不会替你串起来的话

Nacos 的"AP/CP 可切换"不是一个全局开关,而是按每条数据的 ephemeral 字段逐条路由的结果。 理解这一点,三件看似无关的事会塌缩成同一个设计决策的三个侧面:临时实例为什么在网络分区时不丢、持久实例为什么下线后要手动删、配置中心为什么天然强一致。

具体地,读完你能:

  • 画出 Nacos 的双协议分流图,并对任意一条数据判断它走 AP 还是 CP。
  • 解释临时实例 5s / 15s / 30s 三段健康检查为什么是这个节奏,以及客户端为什么仍会调用到已下线的实例。
  • 说清配置中心长轮询 29.5 秒这个数字的来历,以及 @RefreshScope 的刷新边界在哪。
  • 选型:在 Nacos / Eureka / Consul / ZooKeeper 之间为注册中心做选择,在 Nacos / Apollo 之间为配置中心做选择,并讲出取舍依据。
  • 排查三类高频故障:实例剔除抖动、配置改了不刷新、2.x 升级后客户端连不上(端口偏移)。

·一句话本质

一句话本质 · 整份教程的脊柱

Nacos 不是一个"AP 或 CP"的系统,而是用 ephemeral 字段把一致性级别逐条数据路由:临时实例(默认)走 AP,持久实例与配置走 CP。

  • 临时实例(ephemeral=true)→ AP:Distro 协议、内存存储、异步复制、客户端心跳。分区时各节点继续可读可写,宁可返回稍旧的列表也不拒绝服务。
  • 持久实例 + 配置(ephemeral=false)→ CP:Raft 协议、磁盘持久化、多数派提交。保证强一致,代价是选主 / 分区期间不可写。

·现状速览(截至 2026-06)

什么稳定 · 什么在变 · 什么已被取代

稳定:注册 / 配置两大核心 API 与数据模型自 Nacos 2.0(2021-03) 起稳定;2.x 用 gRPC 长连接取代了 1.x 的 HTTP + UDP 推送,单机实例承载量约提升 10 倍;端口 8848 / 9848 / 9849 固定下来。

快速演进(2025-04 至今):Nacos 3.0(2025-04) 起重心转向 AI 基础设施——MCP Registry、A2A(Agent-to-Agent)、配合 Higress 的 0-code「API→MCP」转换;3.0 到 3.2.2(2026-05)仍在快速迭代。3.x 默认开启鉴权,老部署升级时要注意。

已被取代:1.x 的 HTTP 短 / 长轮询 + UDP 推送模型;Eureka 2.x 开源版已停止维护。

本教程以 2.x 为稳定基线(生产现实),3.x 的 AI / MCP 能力作为带日期的前沿单独标注,不与核心机制混讲。

·开始前:一个关于"读得顺"的警告

流畅感 ≠ 学会了

这份教程会刻意在原理处放慢、让你预测、让你自测。如果你出现下面三种自我感觉,多半是熟悉感在冒充掌握,而不是真的学会了:

· "我读得很顺" —— 顺,往往因为每个概念在你眼前都被提前铺好了,合上教程不一定复述得出。
· "我做题很快" —— 快,往往因为答案就在上一段,是再读一遍,不是回忆。
· "我没卡壳" —— 没卡,往往因为你没真的去碰那条分流线(ephemeral → AP / CP)。

对策:每章末的自测,先合上页面写答案,再展开对照。预测题先停十秒再点开。

·概念地图

这张图是后面所有细节的挂钩点。中间是 Nacos,往下分叉的那条线——ephemeral 决定一条数据走 AP 还是 CP——就是整份教程的脊柱。

客户端 SDK gRPC 长连接 · 本地容灾 Nacos 服务端 注册 + 配置二合一 数据模型 命名空间→服务→实例 注册·订阅 三级定位 服务发现 配置中心 临时实例 ephemeral=true 默认 持久实例 ephemeral=false ephemeral? AP · Distro 内存·异步复制·心跳 CP · Raft 磁盘·多数派提交 强一致
图 0Nacos 的脊柱是 ephemeral 字段,它把数据分流到两套一致性协议。 注意三件事:① 配置中心和持久实例落在同一侧(CP·Raft);② 临时实例独自落在 AP·Distro;③ 这条红色分流线会贯穿后面每一章。

·学习路径建议

顶部 breadcrumb 就是默认线性路径。按你的目的,也可以走这三条:

·目录

·学完之后往哪走

  • Sentinel(流控降级):在你的 schema 上加"服务调用的稳定性治理",与 Nacos 同属 Spring Cloud Alibaba。
  • Spring Cloud Gateway / Higress:加"流量入口",Higress 还是 Nacos 3.x「API→MCP」的落地网关。
  • Dubbo 3 + Nacos:加"RPC 框架如何复用同一个注册中心"。
  • Raft / JRaft 协议本身:加"CP 这一半的底层细节",把本教程 04 章的 Raft 补到论文级。
  • Nacos 3.x MCP Registry:加"注册中心在 AI Agent 时代的新角色"——把服务注册的思路迁移到 MCP Server / Agent。