Nacos
Nacos 的关键特性
- 服务发现和服务健康监测
- DNS 和 RPC 2 种方式
- 动态配置服务
- 让配置变更时,不需要重启服务了。
- 动态 DNS 服务
- 服务及其元数据管理
Nacos 基本概念
namespace用于租户隔离 namespace 就是用来做资源隔离的。- 单租户不同的环境:如 dev, test, prod
- 多租户: 如 zhangsan, lisi, wangwu
- 单租户不同的环境:如 dev, test, prod
group: 用于不同的应用户组件使用了相同的配置项, 如 database_url 和 MQ_topicdata-id配置集的 id${prefix}-${spring.profiles.active}-${file-extension}
存储模型
config_info 配置信息的主表
config_info_beta 灰度测试的配置信息表
config_tags_relation 配置的标签表
his_config_info 配置的历史信息表
注册中心
服务注册与发现
雪崩保护
推空保护
模糊订阅
负载策略
监控检查
配置中心
配置中心要满足下面的基础诉求
- 支持动态修改配置 动态
- 动态修改配置要实时生效(越快越好) 实时
- 变更快了之后,如何管理控制变更风险, 如灰度,回滚等。 管控
- 敏感配置如何做安全配置 安全
配置动态生效
模糊订阅
配置灰度
配置版本管理
AI 中心
MCP 管理
MCP Router
动态 prompt
A2A 协议
协议增强
DNS
xDS
Prometheus
一致性模块
Nacos 是要把配置存到数据库的。 在集群环境下,就需要考虑各个节点的数据一致性与数据同步。
分布式环境有一个 CAP 理论。
- Consistency:一致性就是在客户端任何时候看到各节点的数据都是一致的。
- Availability:可用性就是在任何时刻都可以提供读写。
- Partition Tolerance:分区容错性是在网络故障、某些节点不能通信的时候系统仍能继续工作。
三者只能选其二。
引入一个共识算法
Nacos 引入了 Distro(最终一致性算法) 协议和 Raft(强一致性算法) 协议
**Nacos 为什么会引入 2 个协议呢? **
因为这 2 个协议的达到的效果是不一样的。 Distro 能够实现 AP, 即能够保证可用性以及分区容错性。 Raft 能够实现 CP 即一致性和分区容错性。
Nacos 有 2 个功能,注册中心和配置管理。
注册中心在整个微服务系统中是 一个非常重要的组件,因此对服务注册发现中心组件的可用性, 提出了很高的要求(要尽最大可能保证注册中心能够对外提供服务)。 要满足
Availability在这种情况下,强一致性算法就不太合适了。强一致性算法在可用节点没有过半的时候, 不能保证可用性(整个算法会罢工)。应该使用最终一致性算法(AP)。配置数据是直接在 Nacos 服务端进行创建的,必须保证大部分节点都保存了此配置数据 才能任务配置被保存成功了,否则就丢失配置的变更。这种情况下就必须使用强一致性算法。(CP)
Notify 机制
Event 异步化
通信模块
gRpc
HTTP
需求分析:
- client 需要知道有哪些 server 列表,并根据某种策略选取一个节点进行连接。并且在底层连接断开时,需要进行切换 server 进行重连。
- client 基于当前长链接进行配置的增删改查以及监听,取消监听等 RPC 语意接口通信。
- 感知配置变更消息,需要将配置变更消息推送至当前监听的客户端。网络不稳定时,client 接收失败,需要支持重推,并告警。
- 感知客户端连接断开事件,将连接注销,并清空连接对应的上 下文。
- 单个 server 需要获取到集群所有的 server 间的列表,并且为每一个 server 建立长链接。连接断开时需要重连。服务端列表发生变更时,需要创建新节点的长链接,销毁下线的节点长链接。
- Server 间需要进行数据同步,包括配置变更信息同步,当前连接数信息,系统负载信息同步,负载调节信息同步等。
Nacos 核心模块
基础鉴权
集群管理
流量控制
基础监控
负载均衡
插件机制
事件机制
日志模块
回调机制
寻址机制
推送通道
容量管理
流量管理
缓存机制
启动模式
一致性协议
存储模块
传输通道
Nacos Group
nacos-sync
nacos controller
nacos mcp router
nacos mcp server
nacos bench
nacos 插件
鉴权
配置加解
多数据源
轨迹追踪
环境变量
反脆弱

