配置管理概览
Nacos 配置管理用于保存和分发应用运行所需的动态配置。应用可以从 Nacos 查询配置,也可以监听配置变更,避免把环境差异、开关、限流参数等内容写死在代码中。
配置管理关注的是配置资源本身的生命周期,包括发布、查询、监听、灰度、历史、回滚、导入、导出、克隆和容量控制。它不是文档库、对象存储、密钥生命周期系统,也不是服务发现模型。
资源模型
一个配置由三个字段标识:
namespaceId -> groupName -> dataId| 字段 | 说明 |
|---|---|
namespaceId | 命名空间,常用于隔离环境、租户或业务域。默认命名空间为 public。 |
groupName | 配置分组,常用于区分应用、模块或业务分组。 |
dataId | 配置名。它是配置内容的主要资源名。 |
配置内容是一个整体。Nacos 保存并分发 content,但不会理解配置文件内部某个业务字段的含义。type 只表示内容类型,例如 TEXT、JSON 或 YAML,用于展示和客户端处理。
运行面和管理面
Nacos 3.x 将运行面和管理面区分得更清楚。
| 接口面 | 面向对象 | 适合做什么 |
|---|---|---|
| Client SDK | 应用程序 | 查询已知配置、监听配置变更、读取本地快照。 |
| Client OpenAPI | 不方便使用 gRPC SDK 的客户端 | 查询单个已知配置。 |
| Admin API | 运维平台、发布平台、自动化工具 | 发布、删除、列表、搜索、灰度、历史、容量和诊断。 |
| Console API | Nacos 控制台 | 支撑控制台配置管理流程。 |
| Maintainer SDK | 运维程序 | 以 Java SDK 方式执行管理操作。 |
普通业务应用建议只读取和监听自己需要的配置。大范围列表、搜索、批量导入、容量调整和本地缓存修复属于管理操作,应交给控制台、Admin API 或 Maintainer SDK。
读取路径
配置内容会持久化保存。服务端运行时查询通常从本地缓存和本地 dump 文件读取,避免高频查询直接打到数据库。
写入成功后,Nacos 会发布配置变更事件。每个节点收到事件后,会从持久化层重新加载受影响的配置,并刷新本地缓存和 dump 文件。
这意味着:
- 持久化层是权威数据源。
- 本地 dump 是服务端缓存,不是新的权威存储。
- 客户端收到变更推送后,应再次查询配置内容。
- 节点刚完成写入后,其他节点可能需要等待本地 dump 完成后才能看到最新运行时视图。
md5 和变更判断
Nacos 使用 md5 表示配置内容版本。客户端监听配置时,会比较本地持有的 md5 和服务端状态。配置发布、删除、灰度变更后,客户端收到通知,再重新查询内容。
不要把变更推送理解为完整配置内容。推送只是提醒“这个配置可能变了”。