Skip to content

参考: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 地址(不频繁上下线)
分区行为各节点都能注册(高可用)少数派不可写(强一致)

三、配置三级模型

层级默认值用途
Namespacepublic环境(dev/test/prod)或多租户隔离
GroupDEFAULT_GROUP业务分组(ORDER_GROUP/PAYMENT_GROUP)
DataId配置集(如 order-service-dev.yaml
  • DataId 约定${服务名}-${profile}.${格式}(如 order-service-dev.yaml)。
  • 共享配置shared-configs 引用公共配置(如 common.yaml)。

四、一致性协议分工

数据类型协议模式原因
临时实例(服务数据)DistroAP频繁上下线,要高可用,容忍最终一致
永久实例RaftCP不常变,要强一致
配置数据Raft + MySQLCP绝不能丢/错,强一致 + 持久化
Nacos 元数据RaftCP集群状态需强一致

五、常用命令与 API

命令行

bash
# 单机模式(开发)
sh bin/startup.sh -m standalone
sh bin/shutdown.sh

# 集群模式(生产)
sh bin/startup.sh -m cluster        # 需配 conf/cluster.conf + MySQL

Open 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=配置历史

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 做服务发现

权威链接