nacos–基础–1.3–理论–架构
1、基本架构及概念
1.1、服务 (Service)
- 是指一个或一组软件功能(例如特定信息的检索或一组操作的执行),其目的是不同的客户端可以为不同的目的重用(例如通过跨进程的网络调用)。
- Nacos 支持主流的服务生态,举例如下
- Kubernetes Service
- gRPC | Dubbo RPC Service
- Spring Cloud RESTful Service。
1.2、服务注册中心 (Service Registry)
- 服务注册中心,它是服务实例及元数据的数据库。
- 服务实例在启动时注册到服务注册表,并在关闭时注销。
- 服务和路由器的客户端查询服务注册表以查找服务的可用实例。
- 服务注册中心可能会调用服务实例的健康检查 API 来验证它是否能够处理请求。
1.3、服务元数据 (Service Metadata)
- 服务端点(endpoints) 信息
- 服务标签 信息
- 服务版本号 信息
- 服务实例权重 信息
- 路由规则 信息
- 安全策略等 信息
1.4、服务提供方 (Service Provider)
是指提供可复用和可调用服务的应用方。
1.5、服务消费方 (Service Consumer)
是指会发起对某个服务调用的应用方。
1.6、配置 (Configuration)
- 在系统开发过程中,开发者通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在。
- 目的是让静态的系统工件或者交付物(如 WAR,JAR 包等)更好地和实际的物理运行环境进行适配。
员完成这个步骤。配置变更是调整系统运行时的行为的有效手段之一。
1.7、配置管理 (Configuration Management)
在数据中心中,系统中所有配置的编辑、存储、分发、变更管理、历史版本管理、变更审计等所有与配置相关的活动统称为配置管理。
1.8、名字服务 (Naming Service)
- 提供分布式系统中所有对象(Object)、实体(Entity)的"名字"到关联的元数据之间的映射管理服务
- 举例:
- ServiceName -> Endpoints Info
- Distributed Lock Name -> Lock Owner/Status Info
- DNS Domain Name -> IP List
- 服务发现和 DNS 就是名字服务的2大场景。
1.9、配置服务 (Configuration Service)
在服务或者应用运行过程中,提供动态配置或者元数据以及配置管理的服务提供者。
2、逻辑架构及其组件介绍
2.1、服务管理(功能列表)
- 服务CRUD
- 域名CRUD
- 服务健康状态检查
- 服务权重管理
2.2、配置管理(功能列表)
- 配置管理CRUD
- 版本管理
- 灰度管理
- 监听管理
- 推送轨迹
- 聚合数据
2.3、元数据管理
提供元数据CURD 和打标能力
2.4、插件机制
- 实现三个模块可分可合能力
- 实现扩展点SPI机制
2.5、事件机制
- 实现异步化事件通知
- 实现sdk数据变化异步通知
2.6、日志模块(功能列表)
- 日志分类
- 日志级别
- 日志可移植性(尤其避免冲突)
- 日志格式
- 异常码+帮助文档
2.7、回调机制
- sdk通知数据,通过统一的模式回调用户处理。
- 接口和数据结构需要具备可扩展性
2.8、寻址模式
- 解决ip,域名,nameserver、广播等多种寻址模式
- 需要可扩展
2.9、推送通道
解决server与存储、server间、server与sdk间推送性能问题
2.10、容量管理
管理每个租户,分组下的容量,防止存储被写爆,影响服务可用性
2.11、流量管理
按照租户,分组等多个维度对请求频率,长链接个数,报文大小,请求流控进行控制
2.12、缓存机制
- 容灾目录
- 使用需要工具
- 本地缓存
- server缓存机制
2.13、启动模式
按照单机模式,配置模式,服务模式,dns模式,或者all模式,启动不同的程序+UI
2.14、一致性协议
解决不同数据,不同一致性要求情况下,不同一致性机制
2.15、存储模块
解决数据持久化、非持久化存储,解决数据分片问题
2.16、Nameserver
- 解决namespace到clusterid的路由问题
- 解决用户环境与nacos物理环境映射问题
2.17、CMDB
- 解决元数据存储,与三方cmdb系统对接问题
- 解决应用,人,资源关系
2.18、Metrics
暴露标准metrics数据,方便与三方监控系统打通
2.19、Trace
暴露标准trace,方便与SLA系统打通,日志平白化,推送轨迹等能力,并且可以和计量计费系统打通
2.20、接入管理
相当于阿里云开通服务,分配身份、容量、权限过程
2.21、用户管理
解决用户管理,登录,sso等问题
2.22、权限管理
解决身份识别,访问控制,角色管理等问题
2.23、审计系统
扩展接口方便与不同公司审计系统打通
2.24、通知系统
核心数据变更,或者操作,方便通过SMS系统打通,通知到对应人数据变更
2.25、OpenAPI
- 暴露标准Rest风格HTTP接口
- 简单易用
- 方便多语言集成
2.26、Console
- 易用控制台
- 做服务管理、配置管理等操作
2.27、SDK
多语言sdk
2.28、Agent
dns-f类似模式,或者与mesh等方案集成
2.29、CLI
命令行对产品进行轻量化管理,像git一样好用
3、领域模型
3.1、数据模型
- Nacos 数据模型 Key 由三元组唯一确定
- Namespace:
- 默认值:public
- 这个就是配置环境,比如
- 开发环境
- 测试环境
- Group:
- 默认值:DEFAULT_GROUP。
- 这个就是配置项目,比如
- OA项目
- service/detaId:
- 具体的配置文件,比如 application.xml
3.2、服务领域模型
3.3、配置领域模型
围绕配置,主要有两个关联的实体
1. 一个是配置变更历史
2. 一个是服务标签(用于打标分类,方便索引),由 ID 关联。
4、类视图
4.1、Nacos-SDK 类视图
5、构建物、部署及启动模式
5.1、两种交付工件
- 支持 标准 Docker 镜像(TODO: 0.2版本开始支持) 的构建物。
- 支持 zip(tar.gz)压缩包 的构建物。
5.2、两种启动模式
- 支持将注册中心(Service Registry)与配置中心(Config Center) 在一个进程合并部署
- 支持将注册中心(Service Registry)与配置中心(Config Center) 分离部署
5.3、免费的公有云服务模式
Nacos 也支持公有云模式,在阿里云公有云的商业产品(如ACM,EDAS) 中会提供 Nacos 的免费的公有云服务。