Nacos 微服务注册与配置中心入门

知识库
知识库文档
/tech-stacks/nacos/tutorial/Nacos 微服务注册与配置中心入门.md

文档

前言

在微服务架构中,服务实例的 IP/端口是动态变化的,如果每个服务都硬编码调用地址,系统将寸步难行。Nacos 作为阿里开源的注册 + 配置中心,解决了"服务在哪"和"配置怎么管"两个核心问题。


第一章:理解服务注册与发现

1.1 没有注册中心时

ServiceA 调用 ServiceB
  → 需要在代码/配置文件里写死 ServiceB 的地址
  → ServiceB 扩容、缩容、迁移 → 必须修改 ServiceA 的配置
  → 修改 → 重启 → 中断服务

1.2 有了 Nacos 后

ServiceB 启动 → 向 Nacos 注册(IP:Port)
ServiceA 启动 → 从 Nacos 订阅 ServiceB 的地址列表
ServiceB 扩容 → Nacos 推送新实例给 ServiceA
ServiceB 宕机 → Nacos 健康检查剔除,ServiceA 自动感知

1.3 Nacos 核心概念

概念 说明 类比
Namespace(命名空间) 环境隔离(dev/test/prod) Git 分支
Group(分组) 同一环境下的业务分组 文件夹
Service(服务) 一组提供相同功能的实例 一个应用
Instance(实例) 一个具体的服务节点 一台机器上的进程
Data ID(配置标识) 唯一标识一个配置 文件名
Config(配置内容) 具体的配置项 文件内容

第二章:AP 与 CP 模式的选择

2.1 CAP 回顾

  • C(Consistency):所有节点同一时刻数据一致
  • A(Availability):每个请求都能收到响应
  • P(Partition Tolerance):网络分区时系统仍能工作

CAP 不可兼得,只能三选二。

2.2 Nacos 的独特之处:AP + CP 可切换

# AP 模式(默认):优先保证可用性
nacos.core.protocol.raft.strictMode=false

# CP 模式:优先保证一致性(适合对数据一致性要求高的场景)
nacos.core.protocol.raft.strictMode=true
模式 适用场景 取舍
AP 一般微服务注册发现 网络分区时各节点可独立工作,恢复后自动合并
CP 金融/支付等强一致场景 网络分区时少数节点拒绝写入

这是 Nacos 相比 Eureka(纯 AP)和 ZooKeeper(纯 CP)的核心优势。

2.3 健康检查机制

临时实例(ephemeral=true,默认)
  → 客户端主动心跳(5s 间隔)
  → 15s 无心跳 → 标记不健康
  → 30s 无心跳 → 剔除

永久实例(ephemeral=false)
  → Nacos Server 主动探测(TCP/HTTP/MySQL)
  → 探测失败 → 标记不健康但不剔除

第三章:配置管理深入

3.1 配置的三级隔离

Namespace(环境)→ Group(业务域)→ Data ID(配置项)

示例:
  dev → ORDER_GROUP → order-service.yaml
  prod → ORDER_GROUP → order-service.yaml

3.2 配置优先级(Spring Cloud)

1. 命令行参数(最高)
2. Nacos 扩展配置(shared-configs → extension-configs)
3. Nacos 主配置(${spring.application.name}.${file-extension})
4. application.yml(本地)
5. bootstrap.yml(本地,最低)

3.3 灰度配置发布

# 在 Nacos 控制台:配置管理 → 灰度发布
# 指定 IP 白名单,仅对特定实例生效
gray-ip-list: 192.168.1.100,192.168.1.101

3.4 配置回滚

Nacos 自动保存每次发布的快照(最多 30 个版本),控制台一键回滚到任意历史版本。


第四章:Nacos 集群部署要点

4.1 推荐架构

                  ┌─────────────┐
                  │   Nginx LB  │
                  └──────┬──────┘
          ┌──────────────┼──────────────┐
    ┌─────┴─────┐  ┌─────┴─────┐  ┌─────┴─────┐
    │ Nacos #1  │  │ Nacos #2  │  │ Nacos #3  │
    └─────┬─────┘  └─────┬─────┘  └─────┬─────┘
          └──────────────┼──────────────┘
                  ┌──────┴──────┐
                  │    MySQL    │  ← 外部存储(共享)
                  └─────────────┘

4.2 关键配置

# cluster.conf(每个节点都要配置)
192.168.1.10:8848
192.168.1.11:8848
192.168.1.12:8848

三个节点形成 Raft 集群,Leader 负责写,Follower 可读。


第五章:与其他注册中心对比

特性 Nacos Eureka Consul ZooKeeper
CAP 模型 AP/CP 可切换 AP CP CP
配置中心 ✅ 内置 ✅ Key/Value ❌(需 Curator)
健康检查 TCP/HTTP/MySQL/心跳 心跳 TCP/HTTP/gRPC KeepAlive
控制台 ✅ 功能完整 ✅ 只读 ❌(需第三方)
多数据中心
Spring Cloud ✅ 原生 ✅ 原生
Dubbo 支持 ✅ 首选
雪崩保护

思考题

  1. 在 CAP 理论中,Nacos 如何做到 AP 和 CP 模式切换?底层的 Raft 协议扮演什么角色?
  2. 配置热更新时,Nacos 客户端是如何感知到配置变化的?长轮询机制的原理是什么?
  3. 如果 Nacos 集群全部宕机,已注册的服务之间还能互相调用吗?为什么?
  4. 为什么 Nacos 2.x 将 gRPC 作为默认通信协议?相比 HTTP 有什么优势?

下一步

  • 学习 Spring Cloud Gateway + Nacos 实现动态路由
  • 学习 Sentinel + Nacos 实现限流规则持久化
  • 学习 Dubbo + Nacos 实现 RPC 服务治理

信息

路径
/tech-stacks/nacos/tutorial/Nacos 微服务注册与配置中心入门.md
更新时间
2026/5/31