Nacos 教程
欢迎学习 Nacos!本教程将带你从零基础开始,全面掌握 Nacos 服务发现与配置管理的核心知识和实战技能。
什么是 Nacos?
Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的动态服务发现、配置管理和服务管理平台。它致力于帮助你发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助你快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 名称由来
Nacos 是 "Dynamic Naming and Configuration Service" 的首字母缩写,发音为 /nɑ:kəʊs/。从名称可以看出,Nacos 的核心能力就是命名服务(Naming Service)和配置服务(Configuration Service)。
核心定位
在微服务架构中,Nacos 扮演着"服务注册中心"和"配置中心"的双重角色:
┌─────────────────────────────────────────────────────────────────┐
│ Nacos 核心能力 │
│ │
│ ┌────────────────────────┐ ┌────────────────────────┐ │
│ │ 服务发现 │ │ 配置管理 │ │
│ │ • 服务注册 │ │ • 动态配置 │ │
│ │ • 服务发现 │ │ • 配置热更新 │ │
│ │ • 健康检查 │ │ • 配置版本管理 │ │
│ │ • 负载均衡 │ │ • 灰度发布 │ │
│ └────────────────────────┘ └────────────────────────┘ │
│ │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ 服务治理与元数据管理 │ │
│ │ • 服务描述 • 生命周期管理 • 健康状态 • 流量管理 │ │
│ └────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
Nacos 核心特性
1. 服务发现与健康检查
Nacos 支持 DNS 和 RPC 两种模式的服务发现。服务提供者注册服务后,消费者可以通过 DNS 或 HTTP 接口发现服务。
健康检查机制是 Nacos 保证服务可用性的关键:
- 临时实例:客户端主动向 Nacos Server 发送心跳,默认每 5 秒一次。如果超过 15 秒没有收到心跳,实例会被标记为不健康;超过 30 秒则会被剔除。
- 持久实例:由 Nacos Server 主动探测,支持 TCP、HTTP、MySQL 等多种探测方式。
2. 动态配置管理
动态配置服务让你可以在所有环境中以集中化、外部化和动态化的方式管理所有应用的配置。配置更新后无需重新部署应用,Nacos 会实时推送最新配置到客户端。
配置管理的核心能力包括:
- 配置版本追踪:记录每次配置变更
- 灰度发布:支持配置的灰度推送
- 配置回滚:一键回滚到历史版本
- 客户端状态追踪:监控配置推送状态
3. 动态 DNS 服务
动态 DNS 服务支持权重路由,让你更容易实现中间层负载均衡、灵活的路由策略、流量控制和简单的 DNS 解析服务。
4. 服务治理与元数据管理
Nacos 允许你从微服务平台构建者的角度管理所有服务和元数据,包括服务描述、生命周期、服务静态依赖分析、服务健康状态、服务流量管理、路由和安全规则、服务 SLA 等。
为什么选择 Nacos?
与其他方案的对比
Nacos vs Eureka
| 特性 | Nacos | Eureka |
|---|---|---|
| 配置中心 | 支持 | 不支持,需要 Spring Cloud Config |
| 健康检查 | TCP/HTTP/MySQL/自定义 | 仅心跳 |
| 负载均衡 | 权重配置 | Ribbon 支持 |
| 服务发现 | DNS + RPC | 仅 RPC |
| 跨注册中心同步 | 支持 | 不支持 |
| 维护状态 | 活跃 | 已停止维护(2.x) |
Nacos vs Consul
| 特性 | Nacos | Consul |
|---|---|---|
| 配置管理 | 支持 | 支持(KV 存储) |
| 服务发现 | 支持 | 支持 |
| 一致性协议 | Raft(持久实例)/ Distro(临时实例) | Raft |
| 多语言支持 | Java/Go/Python/Node.js/C# | 多语言 SDK |
| 控制台 | 功能丰富 | 基础功能 |
Nacos vs Apollo
| 特性 | Nacos | Apollo |
|---|---|---|
| 服务发现 | 支持 | 不支持 |
| 配置管理 | 支持 | 支持(功能更丰富) |
| 配置格式 | Properties/YAML/JSON/Text | Properties/YAML/JSON/Text/XML |
| 灰度发布 | 支持 | 支持(更完善) |
| 权限管理 | 基础支持 | 完善 |
Nacos 的优势
- 一站式解决方案:同时提供服务发现和配置管理,无需引入多个组件
- 简单易用:开箱即用,提供直观的控制台界面
- 高性能:支持十万级服务实例,百万级配置
- 生态完善:与 Spring Cloud、Dubbo、Kubernetes 等无缝集成
- 生产验证:阿里巴巴大规模生产环境验证
Nacos 应用场景
1. 微服务注册与发现
这是 Nacos 最核心的应用场景。在微服务架构中,服务实例动态变化,需要一个可靠的注册中心来管理服务地址。
┌──────────────┐ 注册 ┌──────────────┐
│ 服务提供者 │ ───────────> │ │
│ Provider │ │ Nacos │
└──────────────┘ │ Server │
│ │
┌──────────────┐ 发现 │ │
│ 服务消费者 │ <─────────── │ │
│ Consumer │ └──────────────┘
└──────────────┘
2. 动态配置中心
将应用配置从代码中分离出来,集中管理,支持动态更新:
- 数据库连接信息
- 功能开关配置
- 限流阈值配置
- 业务规则参数
3. 多环境配置隔离
通过命名空间(Namespace)实现不同环境的配置隔离:
- 开发环境(dev)
- 测试环境(test)
- 预发布环境(staging)
- 生产环境(prod)
4. 服务流量管理
通过权重配置实现灰度发布和流量控制:
- 新版本灰度发布
- 故障实例流量摘除
- 按权重分配流量
Nacos 核心概念
命名空间(Namespace)
命名空间用于实现多环境、多租户的配置隔离。不同命名空间中可以存在相同 Group 或 Data ID 的配置。最常见的使用场景是区分不同环境的配置,如开发环境、测试环境和生产环境。
分组(Group)
分组是 Nacos 中组织配置的维度之一。通过有意义的字符串(如 Buy、Trade)对配置进行分组,用于区分相同 Data ID 的不同配置。默认分组为 DEFAULT_GROUP。
配置集(Configuration Set)
一组相关或不相关配置项的集合。在系统中,一个配置文件通常就是一个配置集,包含了系统的所有配置,如数据源、线程池、日志级别等配置项。
Data ID
配置集在 Nacos 中的唯一标识。Data ID 通常采用类似 Java 包名的命名规则(如 com.example.app.properties)来确保全局唯一性。
在 Spring Cloud 中,Data ID 的格式为:
${prefix}-${spring.profiles.active}.${file-extension}
其中 prefix 默认为 spring.application.name,file-extension 支持 properties 和 yaml。
服务(Service)
服务是通过网络向客户端提供预定义接口的软件功能。一个服务可以有多个实例。
实例(Instance)
实例是提供服务的进程,具有可访问的网络地址(IP:Port)。
健康检查(Health Check)
以指定方式检查服务下实例的健康状态,确保实例能正常工作。根据检查结果判断实例是否健康,不健康的实例在服务发现时不会被返回。
保护阈值(Protect Threshold)
保护阈值是一个 0 到 1 之间的浮点数。当健康实例占总实例的比例小于此值时,无论实例是否健康都会返回给客户端,防止因部分实例不健康导致流量全部涌向健康实例,引发雪崩效应。
Nacos 架构
逻辑架构
┌─────────────────────────────────────────────────────────────────┐
│ 服务提供者 │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 服务 A │ │ 服务 B │ │ 服务 C │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────────┘
│ │ │
│ 注册/心跳 │ 注册/心跳 │ 注册/心跳
▼ ▼ ▼
┌─────────────────────────────────────────────────────────────────┐
│ Nacos Server │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 核心模块 │ │
│ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │
│ │ │ 服务管理 │ │ 配置管理 │ │ 元数据管理 │ │ │
│ │ └──────────────┘ └──────────────┘ └──────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 一致性协议 │ │
│ │ Raft(持久实例) / Distro(临时实例) │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 存储层 │ │
│ │ 内置存储 / MySQL / PostgreSQL │ │
│ └─────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
│ │ │
│ 发现/订阅 │ 获取配置 │ 订阅配置
▼ ▼ ▼
┌─────────────────────────────────────────────────────────────────┐
│ 服务消费者 │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 应用 A │ │ 应用 B │ │ 应用 C │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────────┘
数据模型
Nacos 的数据模型由三元组唯一确定:
Namespace(命名空间) + Group(分组) + Data ID(配置集ID)
这种设计类似于 Maven 的 GAV 坐标,用于精确定位一个配置或服务。
端口说明
Nacos 默认使用以下端口:
| 端口 | 用途 |
|---|---|
| 8848 | 主端口,客户端、控制台、OpenAPI 使用 |
| 9848 | gRPC 客户端请求端口(8848 + 1000) |
| 9849 | gRPC 服务端请求端口(8848 + 1001) |
| 7848 | Raft 协议端口(8848 - 100) |
教程目录
本教程涵盖从入门到进阶的完整内容:
基础入门
服务发现
配置管理
- 配置管理基础 - 配置管理核心功能
框架集成
集群与运维
速查表
- 速查表 - Nacos 常用配置和命令速查
学习建议
1. 前置知识
学习 Nacos 前建议掌握:
- Java 基础:面向对象、集合、注解(JDK 17+ 用于 Nacos 3.x)
- Spring Boot:自动配置、配置文件、起步依赖
- 微服务概念:了解微服务架构的基本概念
- 分布式基础:CAP 理论、一致性协议
2. 学习路径
基础阶段 核心阶段 进阶阶段 实战阶段
│ │ │ │
▼ ▼ ▼ ▼
环境搭建 → 服务注册发现 → 集群部署 → 项目实战
配置管理 → 配置热更新 → 安全配置 → 性能调优
控制台操作 → 健康检查 → 多环境管理 → 运维监控
3. 实践建议
- 动手实践:本地搭建 Nacos 环境,亲自操作每个功能
- 阅读源码:理解 Nacos 的设计思想和实现原理
- 结合框架:与 Spring Cloud Alibaba 结合学习
- 关注版本:Nacos 迭代较快,注意版本兼容性
版本演进
Nacos 从 2018 年开源以来,经历了多个重要版本的演进,不断提升性能和功能。
Nacos 1.x 系列
Nacos 1.x 是最初的稳定版本系列,主要特点:
- 基于 HTTP 短连接的通信模式
- 支持服务发现和配置管理核心功能
- 使用 Raft 协议保证数据一致性
Nacos 2.x 系列
Nacos 2.x 进行了重大架构升级,主要改进:
| 特性 | 说明 |
|---|---|
| gRPC 长连接 | 减少连接开销,支持服务端主动推送 |
| 连接性能提升 | 单机连接数从 1 万提升到 10 万 |
| 推送延迟优化 | 配置推送延迟从秒级降至毫秒级 |
| 性能大幅提升 | 服务注册 QPS 提升 5 倍 |
推荐版本:3.1.1 是当前推荐的稳定版本,支持 AI 服务注册和 A2A 功能。如需 JDK 8 环境,可使用 2.5.2 版本。
Nacos 3.x 系列
Nacos 3.x 引入了革命性的新特性,标志着 Nacos 从微服务基础设施向 AI 时代基础设施的演进:
| 特性 | 说明 |
|---|---|
| AI 服务注册 | 支持 AI 模型、Prompt、Skill、MCP Server 的注册与管理 |
| MCP Registry | 提供 MCP 协议服务注册中心,支持 AI Agent 工具发现与调用 |
| A2A 注册 | 支持 Agent-to-Agent 发现,AI Agent 间可以直接发现和通信 |
| xDS 协议 | 原生支持 EDS、LDS、RDS、CDS,可与 Istio 等服务网格无缝集成 |
| 插件架构 | 全新的插件系统,支持自定义扩展 |
| 控制台现代化 | 全新的 UI 界面,更好的用户体验 |
| OIDC/OAuth2 | 支持企业级单点登录 |
| 分布式锁 | 实验性分布式锁功能,支持跨服务协调 |
| 性能优化 | 更高的并发处理能力 |
MCP 服务注册
Nacos 3.0 作为 MCP Registry,为 AI 应用提供工具服务发现能力:
- 动态工具管理:支持运行时添加、删除、更新 MCP 工具
- 官方协议支持:完整支持 MCP 官方 Registry 协议(2025-09-16 版本)
- 多语言支持:支持 Java(Spring AI Alibaba)、Python(FastMCP)等多种语言框架
- 全栈集成:与 Spring AI、Higress 网关无缝集成
适用场景:
- AI Agent 工具服务管理
- 企业 AI 中台建设
- MCP 协议服务治理
详细使用方法请参考 MCP 服务注册 章节。
A2A 服务注册
Nacos 3.1.0 引入了 A2A(Agent-to-Agent)注册功能,允许 AI Agent 之间相互发现和通信:
- AgentCard 注册:AI Agent 可以发布自己的 AgentCard,描述能力和端点信息
- Agent 发现:支持按名称发现其他 Agent
- 端点管理:支持批量注册 Agent 端点信息
适用场景:
- 多 Agent 协作系统
- AI Agent 编排和调度
- 企业 AI Agent 平台建设
xDS 协议支持
Nacos 3.0 原生支持 xDS 协议,可以与 Istio、Envoy 等服务网格技术无缝集成:
- EDS(Endpoint Discovery Service):服务端点发现
- LDS(Listener Discovery Service):监听器发现
- RDS(Route Discovery Service):路由发现
- CDS(Cluster Discovery Service):集群发现
适用场景:
- Kubernetes 环境下与服务网格集成
- 统一的服务发现和流量管理
- 多集群服务治理
- 生产环境:推荐使用 3.2.0 稳定版本,支持 AI 服务注册
- JDK 8 环境:可使用 2.3.2 版本
- 版本升级:从 2.x 升级到 3.x 需要升级 JDK 到 17+,从 1.x 升级到 2.x 需要注意端口变化和数据迁移
参考资源
官方资源
相关项目
- Nacos Docker - Nacos Docker 镜像
- Nacos Kubernetes - Nacos Kubernetes 部署
- Nacos Sync - 多注册中心同步工具
社区资源
- Nacos 钉钉群 - 技术交流群
- Nacos Issue - 问题反馈
准备好了吗?
准备好开始学习 Nacos 了吗?本教程将带你深入了解服务发现与配置管理的核心概念和实践技巧。点击下一章开始你的 Nacos 学习之旅!