当前位置: 首页 > web >正文

2 Nacos 集群的数据同步机制

非常好,这是一个关于 Nacos 集群最核心的问题。Nacos 集群的数据同步机制是其高可用能力的基石,它不是通过数据库来实现的,而是通过一个自研的分布式一致性协议来完成。

简单来说:数据库(如 MySQL)只是一个最终的持久化存储,而实时的数据同步和一致性是由 Nacos 节点之间通过 Raft 协议自己完成的。

下图清晰地展示了 Nacos 处理两种不同类型数据(配置信息和服务实例信息)的同步流程与架构:


上图展示了 Nacos 采用的两种策略,下面我们来详细解释。


核心机制:Distro + Raft 混合协议

Nacos 巧妙地针对不同类型的数据,使用了两种不同的协议,以在一致性 (Consistency)可用性 (Availability)分区容错性 (Partition Tolerance) 之间取得最佳平衡(即 CAP 理论)。

1. 对于服务实例数据(临时数据) -> 采用 Distro 协议 (AP)

服务注册、心跳、服务发现这类数据是临时性的,其特点是读写频率非常高,对一致性要求不是极端严格(允许秒级的延迟),但要求高可用。

  • 工作原理(如上图 AP 部分所示)
    1. 客户端注册:服务实例向 Nacos 集群中的任意一个节点发起注册请求。
    2. 节点处理:该节点会立即将数据保存在本地,并异步地将数据同步给集群内的其他节点。
    3. 最终一致性:它不要求所有节点同步完成后才返回成功,而是立即返回客户端成功。同步任务会放入一个队列中,逐步扩散到整个集群,保证数据的最终一致性
    4. 健康检查:每个节点独立负责对自己持有的服务实例进行健康检查(如发送心跳检测),并定期将变化后的数据同步给其他节点。
  • CAP 选择:Distro 协议优先保证 A (可用性)P (分区容错性),在 C (一致性) 上做了一些妥协,属于 AP 模式。这意味着在网络分区发生时,Nacos 集群仍可提供服务注册和发现,但不同节点间可能短暂地看到不一致的服务列表。
2. 对于配置数据(持久化数据) -> 采用 Raft 协议 (CP)

配置信息(如 application.properties 的内容)是持久化的、至关重要的数据。它的写请求少,但要求强一致性,绝对不能出现不同节点配置内容不同的情况。

  • 工作原理(如上图 CP 部分所示)
    1. Leader 选举:集群启动时,会通过 Raft 协议选举出一个 Leader 节点,其他节点作为 Follower
    2. 写请求处理
      • 所有客户端的配置写入请求必须发送到 Leader 节点。(如果发到了 Follower,Follower 会拒绝并返回 Leader 的地址给客户端)。
      • Leader 会先将本次写操作作为一条日志 (Log) 复制并持久化到超过半数的 Follower 节点。
      • 一旦多数派确认,Leader 就提交这条日志,将其应用到状态机(即真正修改内存中的配置数据),然后返回客户端成功。
    1. 读请求:任何节点都可以处理读请求,因为数据是强一致的。
  • CAP 选择:Raft 协议优先保证 C (强一致性)P (分区容错性),属于 CP 模式。这意味着当集群中多数派节点存活时,配置数据是可靠的;但如果网络分区导致无法选举出 Leader(即无法形成多数派),整个配置中心将不可用(不可写,也可能不可读),这是为了保证一致性而付出的代价。

数据库的角色

你可能会问,既然有 Distro 和 Raft 来同步数据,为什么还要配 MySQL?

数据库的作用是:

  1. 持久化层:作为所有数据的最终存储地,防止集群全部重启后数据丢失。
  2. 解耦:使得 Nacos 集群节点本身是无状态的。任何一个节点启动时,都可以从同一个数据库中加载全量数据,然后通过上面的协议与其他节点同步增量变化。

重要提示:数据库不参与节点间的实时数据同步。同步过程完全由 Nacos 节点在内存和本地文件中通过 Distro 和 Raft 协议完成。对数据库的操作是异步的、批量的,以避免给数据库造成巨大的 IO 压力。


总结与类比

特性

服务实例数据 (Distro - AP)

配置数据 (Raft - CP)

数据特性

临时性、易失性

持久化、关键性

一致性

最终一致性

强一致性

CAP

AP (高可用)

CP (强一致)

领导者

无领导,任何节点可写

有领导,只能由 Leader 写

同步方式

异步广播、 gossip 扩散

同步复制、多数派确认

类比产品

Eureka (AP 型服务发现)

ZooKeeper/Etcd (CP 型配置中心)

这种混合模式是 Nacos 的一大优势:它在一个产品内同时满足了服务发现(需要高可用)和配置管理(需要强一致)这两种不同场景的需求。你不需要同时部署 Eureka 和 Apollo,Nacos 一站式解决了问题。

http://www.xdnf.cn/news/18477.html

相关文章:

  • 服务发现与负载均衡:Kubernetes Service核心机制深度解析
  • 在Excel和WPS表格中合并多个单元格这样最快
  • Web15- Java Web安全:防止XSS与CSRF攻击
  • 银河麒麟V10系统离线安装zabbix-agent教程
  • 机器学习3
  • 使用WORD实现论文格式的样式化制作【标题样式、自动序列、页号(分节)、自动目录(修改字体类型)】
  • P4175 [CTSC2008] 网络管理 Solution
  • vulhub可用的docker源
  • Python 数据可视化:Matplotlib 与 Seaborn 实战
  • 鸿蒙中网络诊断:Network分析
  • 深度解析:RESTful API中的404错误 - 不是所有404都是Bug
  • stm32学习详细笔记001
  • C++/Qt开发:TCP通信连接软件测试方法:ECHO指令
  • Linux系统:C语言进程间通信信号(Signal)
  • 【网络运维】Linux 文本搜索利器: grep命令
  • Linux-文本搜索工具grep
  • RHCA07-Linux跟踪工具及CPU调优
  • 详解flink table api基础(三)
  • 在Excel和WPS表格中制作可打印的九九乘法表
  • 服务器内存使用buff/cache的原理
  • 单片机驱动继电器接口
  • 图论Day6学习心得
  • 动态规划----8.乘积最大子数组
  • 从“怀疑作弊”到“实锤取证”:在线面试智能监考重塑招聘公信力
  • CMake1:概述
  • 通过自动化本地计算磁盘与块存储卷加密保护数据安全
  • 前端-JavaScript笔记(核心语法)
  • CentOS 系统 Java 开发测试环境搭建手册
  • C/C++嵌入式笔试核心考点精解
  • Kafka如何保证「消息不丢失」,「顺序传输」,「不重复消费」,以及为什么会发生重平衡(reblanace)