Nacos是大型架构的必备中间件,也是微服务的核心,下面我重点详解Nacos架构@mikechen
Nacos
Nacos,全程是“Dynamic Naming and Configuration Service”,是Spring Cloud Alibaba核心组件。
Nacos,是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
Nacos架构
Nacos架构,如下图所示:
+---------------------+ +-------------------+ | Nacos Console | <-----> | Nacos Cluster | +---------------------+ | [Naming + Config] | | + Core Module | +--------------+ +-------------------+ | Service A | <--注册/发现--> Nacos Server Node1 | Service B | <--拉取配置--> Nacos Server Node2 | Service C | <--心跳上报--> Nacos Server Node3 +--------------+ +-------------------+ | +----------+ | MySQL | (共享存储) +----------+
控制层
这一层是用户与Nacos交互的界面,通常是一个Web控制台,它提供直观的图形化操作界面。
注册的服务实例信息,包括健康状态、IP地址、端口等,以及命名空间、用户权限等管理功能。
配置列表,包括:Data ID、Group、Namespace以及配置内容。
并且, 控制层通过调用Nacos的服务层API,来执行相应的管理操作。
服务层
这是Nacos的核心业务逻辑层,对外提供统一的API接口,处理来自Nacos客户端和控制层的各类请求。
服务层的主要职责包括:
- 服务注册与发现: 接收服务实例的注册请求,维护服务实例列表,并响应服务查询请求。
- 配置管理: 处理配置的发布、查询、订阅和更新请求。
- 元数据管理: 存储和管理服务及配置的各种附加信息。
- 集群管理: 协调Nacos服务器集群内部的数据同步和状态维护。
- 认证与授权: 对访问Nacos的客户端和用户进行身份验证和权限控制。
数据层
数据层:是Nacos存储所有服务和配置数据的基础,它负责数据的持久化和一致性保证。
数据层确保了即使Nacos服务器重启或部分节点故障,关键的服务和配置数据也能得到保存和恢复。
Nacos核心模块
Nacos核心模块,如下图所示:
服务注册与发现
主要会包含:
实例注册:通过 REST 接口或 SDK 将服务注册到 Nacos。
服务发现:客户端可通过 Nacos 拉取服务列表,负载均衡调用。
健康检查:服务实例需定期发送心跳,Nacos 会剔除不健康实例。
实例元数据:支持添加 version、env、region 等信息,实现多版本隔离。
配置中心
配置结构:通过 Namespace + Group + DataId
三元组唯一标识配置。
推送机制:基于长轮询(或 gRPC 推送)监听配置变更。
多格式支持:支持 Properties、YAML、JSON、XML 等格式。
动态刷新:支持 Spring Cloud 中的 @RefreshScope
或 @NacosValue
实现自动刷新。
核心功能层
统一配置处理器、服务调度器、推送调度器。
管理服务元数据、缓存与通知机制。
提供任务调度线程池、事件中心与订阅模型。