📖 本章预览
本章为预览版本,展示部分核心内容。完整内容包含详细源码解析、实战代码和面试要点,加入知识星球即可解锁全部章节。
第一章:前置知识 — Nacos 定位与核心概念
1.1 微服务的两大痛点
微服务架构下,服务实例动态变化(扩缩容、故障、滚动发布),带来两个核心问题:
- 服务发现:调用方如何知道目标服务当前有哪些可用实例?地址是什么?
- 配置管理:分布式环境下如何统一管理配置?修改后如何实时推送到所有节点?
Nacos(Naming + Configuration + Service)就是为了同时解决这两个问题而生的。
1.2 横向对比 — 为什么选 Nacos
| 维度 | Nacos | Eureka | Consul | Apollo |
|---|---|---|---|---|
| 服务发现 | ✅ | ✅ | ✅ | ❌ |
| 配置管理 | ✅ | ❌ | ✅(KV) | ✅ |
| 一致性协议 | AP + CP 可切换 | AP only | CP(Raft) | — |
| 健康检查 | 心跳 + 服务端探测 | 客户端心跳 | Agent 探测 | — |
| 推送模型 | gRPC 长连接推送 | 客户端轮询(30s) | Long Polling | 长轮询 |
| 连接模型 | gRPC 长连接 | HTTP 短连接 | HTTP + gRPC | HTTP |
核心差异点:
- Nacos 是唯一同时支持 AP 和 CP 的注册中心,根据实例类型自动选择协议
- gRPC 长连接模型让推送延迟从秒级降到毫秒级
- 一套系统同时解决服务发现 + 配置管理,减少运维成本
1.3 核心概念模型
Namespace(命名空间)—— 环境隔离(dev / test / prod)
└── Group(分组)—— 逻辑分组,默认 DEFAULT_GROUP
│
├── [Naming 侧]
│ └── Service(服务)
│ └── Cluster(集群,如机房划分)
│ └── Instance(实例 = IP + Port)
│ ├── 临时实例(Ephemeral)—— AP 协议,心跳维持
│ └── 持久实例(Persistent)—— CP 协议,服务端探测
│
└── [Config 侧]
└── DataId(配置唯一标识)
└── 配置内容(properties / yaml / json / xml)
1.4 临时实例 vs 持久实例 — Nacos 最核心的设计
这是理解 Nacos 整个架构的钥匙:
| 维度 | 临时实例(Ephemeral) | 持久实例(Persistent) |
|---|---|---|
| 生命周期 | 客户端心跳维持,心跳停止自动摘除 | 服务端持久化存储,不会自动删除 |
| 健康检查 | 客户端主动上报心跳 | 服务端主动探测(TCP/HTTP) |
| 一致性协议 | AP(Distro)—— 保可用性 | CP(JRaft)—— 保一致性 |
| 适用场景 | 微服务实例(动态扩缩容) | 数据库、中间件等基础设施(相对固定) |
| 不健康时 | 超时后直接摘除 | 标记为不健康,但保留注册信息 |
为什么这样设计?
微服务实例生命周期短、变化快,用 AP 协议保证即使部分节点故障,服务发现仍然可用(可用性优先)。而数据库等基础设施相对稳定,需要强一致性保证所有节点看到的实例列表一致(一致性优先)。
🔒 解锁完整内容
本章剩余内容需要解锁后查看
以上仅为本章部分预览内容,完整内容包含更多深度源码解析、实战代码和面试要点。
加入知识星球你将获得:
- ✅ 全部 17 章完整内容 + 持续更新
- ✅ 配套源码 + 实战项目
- ✅ 一对一答疑 + 面试辅导
- ✅ 简历优化 + 内推机会
📚 本章完整目录
以下为本章完整目录结构,加入知识星球即可解锁全部内容。