首页
/ Nacos 顶层设计规范深度解析:从设计意图到资源模型、领域划分与模块架构

Nacos 顶层设计规范深度解析:从设计意图到资源模型、领域划分与模块架构

2026-09-09 20:35:18作者:晏闻田Solitary

本文以仓库 specs/en/design/nacos-design-spec.md 为绝对主体,结合 resource-model-spec.mdcore-capabilities-spec.mdfoundation-capabilities-spec.md 等配套规范与仓库源码展开。本文不是对 Nacos 全貌的泛泛介绍,而是聚焦"顶层设计意图"这一层:Nacos 为什么这样设计、资源如何被标识、领域如何划分、模块如何归属、一致性如何选型,以及新特性如何被约束。读者读完可以掌握 Nacos 的资源层级模型、五大设计原则、五个核心领域、接口族与模块架构的对应关系,以及判断一个新功能是否"有资格成为稳定契约"的完整检查清单。

一、定位:Nacos 是什么

Nacos 是一个面向云原生与 AI 原生应用的动态服务发现、配置管理、服务管理与 AI 智能体(Agent)管理平台。它首先是为"以服务为中心"的应用架构提供的基础设施(infrastructure)。

在 Nacos 的顶层设计语境里,"服务"是一个广义概念,可以是:

  • 微服务(microservice)、RPC 服务;
  • 可通过 DNS 发现的端点(endpoint);
  • 网关后端;
  • MCP Server
  • A2A Agent
  • Prompt、Skill、AgentSpec 等 AI 运行时资源;

也可以是任何"需要被发现、需要动态配置、需要生命周期管理、需要治理、需要安全分发"的运行时资源。这一"服务即一等公民"的定位,直接决定了后续所有设计目标与领域划分——Nacos 不止管理微服务,它把 AI 资源也纳入了同一套资源治理框架。

二、设计目标:六大目标

Nacos 顶层设计明确提出了六个设计目标(Design Goals):

  1. 易于注册/发现/配置/治理/观测:让运行时资源"容易"被注册、发现、配置、治理和观测;
  2. 免重部署变更:让应用可以在不重新部署的情况下修改配置、路由、发现策略以及 AI 资源选择(例如将某个 Skill 的 latest 标签从版本 v3 重指到 v4);
  3. 统一控制面:为配置、命名、服务元数据、AI 注册表(AI Registry)资源提供统一控制面;
  4. 多租户与多环境隔离:通过命名空间(namespace)和权限边界支持多租户、多环境隔离;
  5. 生产级能力:面向大规模集群与高并发负载保持生产级可用性;
  6. 开放生态:通过标准协议、SDK、API 与插件扩展点保持开放生态。

值得注意的是,这六大目标与仓库根目录 README.md 中"dynamic service discovery and configuration and service management"的传统定位一脉相承,但设计规范进一步把 AI Registry(MCP Server、A2A Agent、Prompt、Skill、AgentSpec) 明确为与配置、命名平级的"一等公民"领域,这正是当前版本(2026 版权声明下)的核心演进方向。

三、设计原则:六条约束一切实现的红线

3.1 易用性(Easy To Use)

Nacos 应提供简单的 API、SDK、命令行工具与控制台工作流来完成常见运行时和管理任务。用户不需要理解内部存储、共识协议或传输细节,就能正确使用 Nacos。这是一条"对外隐藏复杂性"的原则——后续所有领域规范、接口规范都以此为前提。

3.2 面向标准(Standards Oriented)

凡是业界已有标准与生态协议的地方,Nacos 都应与之对齐,包括:

  • 云原生服务发现;
  • HTTP API;
  • gRPC 传输;
  • MCP(Model Context Protocol);
  • A2A(Agent-to-Agent);
  • Kubernetes / Spring / Dubbo / Spring AI 集成模式。

原则中有一条关键约束:当 Nacos 增加协议适配层时,Nacos 资源模型是内部语义的唯一真源(source of semantic truth),协议模型只是该模型的适配器(adapters)。也就是说,MCP 模型、A2A AgentCard 模型等在内部都只是"视图/适配",不能反向定义资源语义。这一点在 resource-model-spec.mdAI Registry Spec 中会被反复强化。

3.3 运行时动态(Runtime Dynamic)

Nacos 资源预期会在运行时发生变化:配置内容、服务实例、端点、AI 资源、标签、可见性、元数据都可能变化,且无需应用重新部署。面向运行时的 API 与 SDK 应支持:

  • 订阅(subscription);
  • 推送(push);
  • 本地缓存(local cache);
  • 安全的降级(safe fallback)。

3.4 高可用(High Availability)

  • 单机模式(standalone):面向本地开发与测试场景;
  • 集群模式(cluster):面向生产场景,通过每个领域合适的一致性(consistency)与复制(replication)机制提供可用性与水平扩展。

注意措辞:"通过每个领域合适的机制"——不同领域(配置、命名、AI、核心运维)可以选用不同的一致性策略,而不是一刀切。

3.5 可扩展(Extensible)

Nacos 应保持清晰的模块边界,并为横切关注点暴露插件扩展点

  • 认证(authentication);
  • 可见性(visibility);
  • 数据源(datasource);
  • 加密(encryption);
  • 链路追踪(tracing);
  • 控制(control);
  • 环境(environment);
  • AI 发布流水线(AI publish pipelines)。

同时明确一条不可逾越的边界:扩展不得重新定义核心资源身份、API 响应语义或授权边界。例如 plugin/ai 目录下的 AI 相关插件只能在资源语义之上做能力扩展,而不能发明新的资源身份。

3.6 安全与可治理(Secure And Governable)

Nacos 管理着敏感的运行时与 AI 资产,安全是设计的一部分,而不是可选附加项

  • 受保护 API 的认证与授权应默认启用且显式化;
  • AI 资源应支持所有权(ownership)、可见性(visibility)、版本治理(version governance)、评审(review)、分发(distribution)与审计(auditability);
  • 宽泛的读与管理类 API 属于 Admin / Maintainer 面(surface);
  • 运行时客户端面应只暴露最小权限能力。

从源码结构看,这一原则已落地为 auth 模块与 plugin/auth 目录(含默认认证插件、LDAP 插件、OIDC 插件),以及 plugin/visibility 可见性插件;具体语义由 specs/en/auth/auth-permission-spec.mdspecs/en/auth/visibility-plugin-spec.md 定义。

四、统一资源层级:一切资源的身份骨架

设计规范给出了 Nacos 所有资源的顶层统一层级

NamespaceId -> Group/resourceType -> resourceName
层级 含义 适用范围
NamespaceId 租户、团队、环境或管理域的隔离边界 所有租户级资源
Group/resourceType 二级分类器:微服务资源用 Group,AI 资源用 resourceType 领域相关
resourceName 父作用域内标识具体资源的稳定名称 所有具名资源

规范特别强调 GroupresourceType 不是同一个字段

  • Group 是微服务资源的业务分组,主要用于配置与命名资源;
  • resourceType 是共享治理模型下资源的类型分类器,主要用于 AI Registry 资源。

由此衍生出两条资源模型分支:

  • 微服务资源模型NamespaceId -> Group -> resourceName
  • AI 资源模型NamespaceId -> resourceType -> resourceName

版本(version)、标签(label)、状态(status)、可见性(visibility)、所有者(owner)与元数据(metadata)都是资源的治理属性,除非领域规范明确声明,否则不参与顶层三层身份。详细的层级语义、命名空间字段别名(如 tenant/tenantId)、DEFAULT_GROUP 默认值、各领域 concrete resourceName(配置的 dataId、命名的 serviceName、MCP 的 mcpName、Agent 的 agentName、Prompt 的 promptKey 等)见 specs/en/design/resource-model-spec.md

4.1 配置领域(Configuration Domain)

管理以 namespace + group + dataId 标识的动态配置资源,拥有:

  • 配置内容、类型、md5、元数据;
  • 监听器(listener)与模糊监听(fuzzy watch);
  • 灰度/测试(gray/beta)发布;
  • 历史(history)、回滚(rollback)、转储(dump)与故障转移(failover)行为。

详细规则由 specs/en/config/config-spec.md 定义。实现侧由 config 模块承载,对外 API 由 api/src/main/java/com/alibaba/nacos/api/config/ConfigService.java 等 SDK 接口暴露。

4.2 命名领域(Naming Domain)

管理以 namespace + group + serviceName 标识的服务发现资源,拥有:

  • 服务元数据、实例、集群;
  • 健康状态;
  • 临时服务(ephemeral)与持久服务(persistent)语义;
  • 订阅者、客户端视图与服务变更推送。

详细规则由 specs/en/naming/naming-spec.md 定义,实现位于 naming 模块,SDK 接口见 api/src/main/java/com/alibaba/nacos/api/naming/NamingService.java

4.3 AI Registry 领域

管理 MCP Server、A2A AgentCard、Prompt、Skill、AgentSpec 等 AI 资源,顶层身份为 NamespaceId -> resourceType -> resourceName。领域拥有:

  • AI 资源元数据、版本、标签、可见性、端点;
  • 工具/Skill 描述符;
  • 发布流水线状态;
  • 下载/分发与面向审计的追踪信息。

规范特别强调:AI Registry 不是 Nacos 内部独立的产品模型,而是 Nacos 的一等公民领域,与配置、命名共用同一套命名空间、API、SDK、认证、插件与资源治理原则。实现侧可以从 ai/src/main/java/com/alibaba/nacos/ai/controller 下的控制器族得到印证:McpAdminController/McpClientControllerAgentAdminController/AgentClientControllerPromptAdminController/PromptClientControllerSkillAdminController/SkillClientControllerAgentSpecAdminController/AgentSpecClientController 分别对应 Admin 与 Client 两个 API 面;持久化层见 ai/src/main/java/com/alibaba/nacos/ai/service/repository/AiResourcePersistService.java。详细规范见 specs/en/ai/ai-registry-spec.md

4.4 核心与运维领域(Core And Operation Domain)

拥有命名空间管理、集群成员、服务器状态、就绪/存活(readiness/liveness)、服务器生命周期与环境、连接管理、请求过滤与运行时上下文、内部 RPC、日志级别操作、插件状态等控制面资源。这些能力本质上是管理性质的,应通过 Admin API、Console API 或 Maintainer SDK 暴露,而不是运行时 Client SDK 面。对应规范见 specs/en/core/core-operations-spec.mdspecs/en/design 目录下的 foundation 系列子规范。

4.5 安全与可见性领域(Security And Visibility Domain)

拥有认证、授权、身份传播、API 分类、动作分类与可见性执行,并且应一致地应用于 HTTP API、gRPC 调用、SDK、控制台操作与插件提供的 API。这解释了为什么仓库中 auth 是一个独立模块而非散落在各领域内——安全是横切关注点。

五、接口架构:同一套资源语义,多族接口

Nacos 通过多个接口族暴露相同的资源语义

接口族 定位
HTTP API Open / Admin / Console / Auth / 插件 API
gRPC API 高频运行时通信、推送、订阅、客户端-服务器控制消息
Client SDK 运行时应用与 Agent 框架使用
Maintainer SDK 管理、UI、网关与运维集成使用
Console 与 CLI 人与自动化工作流

关键约束:接口可以使用不同的传输模型,但必须保持相同的资源身份、校验、授权、生命周期与错误语义。例如配置资源在 HTTP 与 gRPC 下的 dataId 必须指向同一个资源。相关接口规范见 specs/en/http-api/api-spec.mdspecs/en/grpc-api/api-spec.mdspecs/en/sdk/sdk-spec.md

从源码印证:AI 领域同时存在 HTTP 控制器(ai/src/main/java/com/alibaba/nacos/ai/controller)与 gRPC 请求处理器(ai/src/main/java/com/alibaba/nacos/ai/remote/handler),两者共享同一套 OperationService/PersistService 业务层,正是"同一语义、多传输"的落地形态。

六、模块架构:所有权规则

设计规范为每个顶层模块划定了明确的所有权:

  • apiclientclient-basic:定义公开客户端模型、SDK 接口与传输契约(对应仓库 apiclientclient-basic 目录);
  • confignamingai:拥有各自资源的领域行为(confignamingai);
  • core:拥有集群、命名空间、服务器、插件与运维基础(core);
  • commonconsistencypersistence:提供事件、任务、AP/CP 协议与存储等共享基础能力(commonconsistencypersistence);
  • auth 与插件模块:拥有可扩展的安全与策略行为(authplugin);
  • maintainer-client:在 Admin API 语义之上提供类型化的 Java 管理入口(maintainer-client);
  • console:暴露面向 UI 的后端 API,不得独立重新定义领域语义console)。

规范同时给出两条模块治理规则:

  1. 共享模型应放在其 API 兼容性要求明确的地方;
  2. 服务器专属实现细节不得泄漏进公开 SDK 契约

这两条规则与上文"协议模型是资源模型的适配器"一脉相承,保证客户端 SDK 不受服务端存储/共识实现变更的影响。

七、一致性与存储:按资源语义选型

设计规范明确:每个领域应根据资源语义选择一致性与存储行为

资源类型 一致性/存储要求
配置资源 需要持久化存储、版本/历史感知、可靠的变更通知
命名资源 需要快速运行时更新、健康驱动的可用性、清晰的临时/持久语义
AI 资源 需要持久化元数据、不可变已发布版本(如适用)、基于标签的路由、可见性与评审/审计元数据
服务器与集群资源 需要显式的管理控制与运维安全

实现上可以使用数据库持久化、本地缓存、Distro、Raft 或其他机制,但公开语义必须由领域规范表达,而不是由存储实现细节表达。这是一个"语义与实现解耦"的强约束:存储选型属于 foundation 层能力,领域规范负责决策与约束。

specs/en/design/foundation-capabilities-spec.md 中,选型被进一步归纳为一张决策表:

  • 运行时、高频、客户端持有、一次性、最终收敛状态 → AP 一致性(Distro 风格协议);
  • 持久化、管理持有、可快照恢复、强有序状态 → CP 一致性(Raft/JRaft 风格协议);
  • 带本地服务缓存的持久化数据库状态 → 持久化 + dump + 领域定义的缓存失效。

源码侧可以找到对应的协议实现:

规范还提醒:协议选择是语义决策,领域不能因为"实现路径方便"就随意使用 Distro 或 Raft。共享基础能力(服务器生命周期、成员、连接生命周期、请求过滤、内部 RPC、AP/CP 一致性、持久化与 dump、任务执行、事件分发、观测钩子)的完整边界由 specs/en/design/foundation-capabilities-spec.md 及其子规范定义。

7.1 请求过滤与运行时上下文(源码佐证)

在设计规范中,"请求过滤与运行时上下文"是 foundation 层的关键能力之一:HTTP 与 gRPC 入口必须填充 RequestContext(协议、目标、身份、应用、用户代理、远端地址等),认证、控制、参数检查与命名空间校验是横切守卫而非领域实现。源码印证:

八、新特性设计规则:成为稳定契约的八问

设计规范最后给出了一套新特性准入门槛。每一个新的 Nacos 特性都必须定义:

  1. 拥有该特性的领域(domain);
  2. 资源类型与资源身份(resource type & identity);
  3. 该特性是运行时面向、管理面向,还是两者兼具
  4. API 受众:Open / Admin / Console / Auth / 插件 / gRPC / Client SDK / Maintainer SDK;
  5. 相关的命名空间、组、版本、标签、状态与可见性行为;
  6. 认证、授权与审计要求;
  7. 对现有 API 与 SDK 的兼容性与弃用影响
  8. 使规范可执行的测试或校验规则

规范以一句极具约束力的话收尾:

如果一个特性无法回答这些问题,它就没有准备好成为 Nacos 的稳定契约(stable Nacos contract)。

配套的 specs/en/design/core-capabilities-spec.md 将能力组织为 设计意图 -> 资源模型 -> 基础能力 -> 领域能力 -> HTTP/gRPC/SDK 接口 -> 扩展与安全规则 六个层次,并给出了"能力边界检查清单"(拥有领域与模块、资源身份与第二层是 groupName 还是 resourceType、受众、暴露面、持久化/缓存/事件/一致性/恢复预期、安全要求、兼容性影响)。此外,specs/en/design/resource-model-spec.md 第十节"新资源检查清单"与 specs/en/design/foundation-capabilities-spec.md 第十二节"基础边界规则"共同构成三层约束:任何新资源、新能力、新基础设施都不能越界重新定义资源身份与领域语义。

九、总结与阅读路径

Nacos 顶层设计规范的价值不在于罗列功能,而在于建立一套从设计意图到具体实现的约束链条

  • 设计原则约束一切实现的红线(易用、面向标准、运行时动态、高可用、可扩展、安全可治理);
  • 统一资源层级 NamespaceId -> Group/resourceType -> resourceName 是所有领域的身份骨架;
  • 五个领域(配置、命名、AI Registry、核心运维、安全可见性)各司其职,AI Registry 是复用了同一套治理原则的一等公民领域;
  • 五族接口共享同一资源语义,模块所有权明确、服务器细节不泄漏进 SDK;
  • 一致性与存储按资源语义选型(AP/Distro、CP/Raft、持久化+dump),语义表达在领域规范而非存储实现;
  • 新特性八问确保任何新增功能在成为稳定契约前完成领域、身份、受众、安全与兼容性论证。

建议的进一步阅读顺序:

  1. 资源身份细化:specs/en/design/resource-model-spec.md
  2. 能力分层与领域清单:specs/en/design/core-capabilities-spec.md
  3. 基础能力清单与协议选型:specs/en/design/foundation-capabilities-spec.md
  4. 各领域详细规范:specs/en/config/config-spec.mdspecs/en/naming/naming-spec.mdspecs/en/ai/ai-registry-spec.mdspecs/en/core/core-operations-spec.md
  5. 接口规范:specs/en/http-api/api-spec.mdspecs/en/grpc-api/api-spec.mdspecs/en/sdk/sdk-spec.md
  6. 对应实现源码:api(SDK 契约)、core(集群/共识/过滤)、config(配置领域)、naming(命名领域)、ai(AI Registry 领域)、plugin(扩展点)。
登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
docsdocs
暂无描述
Markdown
899
5.83 K
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.14 K
2.76 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
860
1.35 K
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
925
1.85 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.84 K
1.02 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
533
601
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.37 K
1.46 K
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
548
395
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
1.04 K
525