参考:Nacos 发现与配置速查
基于 Nacos 2.x · 核于 2026-08
速查
- Nacos 定义:阿里开源的服务发现 + 配置管理平台,发现+配置合一,Spring Cloud Alibaba 核心,中国事实标准。
- 两大能力:服务发现(注册/健康检查/订阅推送,AP 默认)+ 配置中心(三级模型/动态推送/灰度/回滚,CP + MySQL 持久化)。
- 双模式:临时实例(ephemeral=true,AP/Distro,主动报心跳)/ 永久实例(ephemeral=false,CP/Raft,服务端探活)。
- 健康检查:临时实例客户端 5s 主动报心跳(15s 不报不健康,30s 摘除);永久实例服务端探活不摘除。
- 配置三级:Namespace(环境/租户)+ Group(业务分组)+ DataId(配置集)。
- 一致性协议:Distro(AP,临时实例)+ Raft(CP,永久实例/配置/元数据)+ MySQL(配置持久化)。
- vs Consul:Nacos AP/主动上报/原生配置/中国/无 DNS;Consul CP/反向探/裸 KV/国际/有 DNS/多 DC。
一、两大能力速查
| 能力 | 核心 | 关键机制 |
|---|---|---|
| 服务发现 | 服务名 → 健康实例列表 | 注册(ephemeral)、心跳(5s/15s/30s)、订阅推送(push) |
| 配置中心 | Namespace+Group+DataId 定位配置 | 长轮询/gRPC 推送、@RefreshScope、灰度、回滚 |
| 集群部署 | 3+ 节点对等 | Distro(AP 服务)+ Raft(CP 配置)+ MySQL(持久化) |
二、临时实例 vs 永久实例
| 维度 | 临时实例(ephemeral=true,默认) | 永久实例(ephemeral=false) |
|---|---|---|
| 一致性 | AP(Distro) | CP(Raft) |
| 健康检查 | 客户端主动上报心跳(5s) | 服务端主动探活(HTTP/TCP) |
| 摘除策略 | 30s 不报自动摘除 | 探不到标不健康,不自动摘除 |
| 典型场景 | 微服务实例(容器/弹性伸缩) | 数据库/MQ 地址(不频繁上下线) |
| 分区行为 | 各节点都能注册(高可用) | 少数派不可写(强一致) |
三、配置三级模型
| 层级 | 默认值 | 用途 |
|---|---|---|
| Namespace | public | 环境(dev/test/prod)或多租户隔离 |
| Group | DEFAULT_GROUP | 业务分组(ORDER_GROUP/PAYMENT_GROUP) |
| DataId | — | 配置集(如 order-service-dev.yaml) |
- DataId 约定:
${服务名}-${profile}.${格式}(如order-service-dev.yaml)。 - 共享配置:
shared-configs引用公共配置(如common.yaml)。
四、一致性协议分工
| 数据类型 | 协议 | 模式 | 原因 |
|---|---|---|---|
| 临时实例(服务数据) | Distro | AP | 频繁上下线,要高可用,容忍最终一致 |
| 永久实例 | Raft | CP | 不常变,要强一致 |
| 配置数据 | Raft + MySQL | CP | 绝不能丢/错,强一致 + 持久化 |
| Nacos 元数据 | Raft | CP | 集群状态需强一致 |
五、常用命令与 API
命令行
bash
# 单机模式(开发)
sh bin/startup.sh -m standalone
sh bin/shutdown.sh
# 集群模式(生产)
sh bin/startup.sh -m cluster # 需配 conf/cluster.conf + MySQLOpen API(HTTP)
| 方法 | 路径 | 用途 |
|---|---|---|
| POST | /nacos/v1/ns/instance | 注册实例 |
| DELETE | /nacos/v1/ns/instance | 反注册 |
| GET | /nacos/v1/ns/instance/list?serviceName=xxx | 查实例列表 |
| GET | /nacos/v1/ns/instance/list?serviceName=xxx&healthyOnly=true | 只看健康 |
| PUT | /nacos/v1/ns/instance/beat | 客户端上报心跳 |
| GET | /nacos/v1/cs/configs?dataId=&group=&tenant= | 读配置 |
| POST | /nacos/v1/cs/configs | 写配置 |
| DELETE | /nacos/v1/cs/configs | 删配置 |
| GET | /nacos/v1/cs/history?dataId=&group=&tenant= | 配置历史 |
- tenant = namespace ID(API 中用 tenant 表示命名空间)。
- 控制台:http://localhost:8848/nacos(默认 nacos/nacos),可视化操作配置与服务。
Java SDK 关键 API
java
// 服务发现
NamingService naming = NamingFactory.createNamingService("127.0.0.1:8848");
naming.registerInstance("order-service", "10.0.0.5", 8080); // 注册
naming.deregisterInstance("order-service", "10.0.0.5", 8080); // 反注册
List<Instance> instances = naming.selectInstances("order-service", true);// 查健康实例
naming.subscribe("order-service", event -> { ... }); // 订阅推送
// 配置中心
ConfigService config = ConfigFactory.createConfigService("127.0.0.1:8848");
String content = config.getConfig("order-service.yaml", "ORDER_GROUP", 5000); // 读
config.addListener("order-service.yaml", "ORDER_GROUP", listener); // 监听
config.publishConfig("order-service.yaml", "ORDER_GROUP", newContent); // 写六、易错点清单
- 「Nacos 是 CP」:错。Nacos 服务发现默认 AP(Distro,临时实例);只有永久实例和配置走 CP(Raft)。可按需切换。
- 「Nacos 健康检查是反向探」:错。临时实例(默认)是客户端主动上报心跳;永久实例才是服务端探活。与 Consul 默认相反。
- 「Nacos 没有配置中心」:错。Nacos 是原生配置中心(三级模型/灰度/回滚/MySQL 持久化),这是它相对 Consul(裸 KV)的核心优势。
- 「临时实例挂了会一直留在目录」:错。临时实例 30s 不报心跳自动摘除。永久实例才不自动摘除。
- 「Nacos 配置改了要重启服务」:错。Nacos 配置动态推送,配合
@RefreshScope秒级生效,无需重启。 - 「Nacos 有 DNS 接口」:错。Nacos 无原生 DNS(不像 Consul 端口 8600),主要走 SDK/Open API。
- 「Nacos 多 DC 原生支持」:错。跨 DC 需集群联邦(非原生),不如 Consul 的 WAN Gossip 开箱即用。
- 「Nacos 配置存内存,重启丢失」:错。配置持久化到外置 MySQL(主从),Nacos 节点重启从 MySQL 恢复。
- 「bootstrap.yml 和 application.yml 一样」:错。配置中心要在应用上下文初始化前拉取,必须配
bootstrap.yml(早于 application 加载)。 - 「临时实例用 CP,永久实例用 AP」:错。正好反了:临时实例 AP(Distro),永久实例 CP(Raft)。
七、进阶方向(链接其他叶)
- Consul —— 同样服务发现,但 CP/反向探/DNS/国际生态,对比 Nacos
- Etcd —— 纯 KV 底座(K8s 用),与 Nacos 的业务注册中心不在同一层
- Istio —— 服务网格,可对接 Nacos 做服务发现