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

Nacos-10--认识Nacos中的Raft协议(Nacos强一致性的实现原理)

Nacos中的Raft协议是一种基于CP(强一致性)的分布式一致性协议,用于确保持久化服务实例(非临时实例)和关键配置数据的强一致性。Raft协议通过领导者选举、日志复制、安全性保证等机制,确保在分布式系统中即使部分节点故障或网络分区,数据仍能保持一致性和可用性。

1、Raft协议的核心设计思想

Raft协议的设计目标是强一致性和容错性

核心思想:

  • 领导者(Leader)主导机制:集群中只有一个Leader,负责处理所有写请求
  • 日志复制(Log Replication):Leader将客户端请求转换为日志条目,并同步到所有Follower节点
  • 半数确认(Majority Acknowledgement):日志条目需半数以上节点确认后才能提交,确保数据一致性
  • 安全性(Safety):通过严格的日志匹配规则和Leader选举规则,避免数据冲突

2、Raft协议的核心概念

1、节点角色

  • Leader:集群中唯一的主节点,负责处理所有写请求,并将日志条目同步到Follower
  • Follower:从节点,被动接收Leader的日志复制请求,并响应心跳
  • Candidate:临时角色,用于Leader选举阶段,发起投票请求

2、任期(Term)

  • Term是逻辑时钟:用于标识Raft协议的时间周期,每个Term从0开始递增。
  • Leader选举触发Term变化:当Follower未收到Leader心跳时,会进入Candidate状态并启动新Term的选举。

3、日志条目(Log Entry)

  • 日志结构:每个日志条目包含客户端请求的命令(如服务注册、配置更新)、任期号(Term)和日志索引(Index)
  • 日志提交(Commit):当 Leader 收到半数以上节点的确认后,日志条目被标记为已提交,状态机执行该命令

3、Raft协议的工作原理

1、领导者选举(Leader Election)

1、初始状态:所有节点初始状态为Follower
2、超时触发选举:

  • Follower在随机时间(如150ms-300ms)内未收到Leader心跳,进入Candidate状态
    3、投票请求:
  • Candidate增加当前Term,向其他节点发送RequestVoteRPC请求。
  • Follower若未投票给其他Candidate,且Candidate的日志至少与自身一样新,则投票给该Candidate
    4、选举成功:
  • Candidate收到半数以上节点的投票,成为新Leader
  • Leader定期发送心跳(AppendEntriesRPC)维持领导权

2、日志复制(Log Replication)

1、客户端请求:

  • 客户端向Leader发送写请求(如服务注册或配置更新)。
    2、日志追加:
  • Leader将请求转换为日志条目(包含命令、Term、Index),追加到本地日志
    3、日志同步:
  • Leader向所有Follower发送AppendEntriesRPC,包含新日志条目
    4、日志提交:
  • 半数以上节点确认日志条目后,Leader提交该日志,并应用到状态机(如更新服务注册表或配置)。
    5、响应客户端:
  • Leader向客户端返回操作结果(如注册成功或配置更新成功)。

3、安全性保证(Safety)

  • 日志匹配规则:
    • Follower收到AppendEntries后,会检查前一日志的Term和Index是否与本地一致
    • 不一致,拒绝接受新日志,Leader需回退日志索引重新同步
  • Leader选举限制:
    • 只有拥有最新日志的节点才能成为Leader(通过Term和日志长度判断)。
  • 脑裂防护:
    • 网络分区恢复后,旧Leader若发现更高Term的新Leader,自动降级为Follower

4、Raft协议在Nacos中的实现

Nacos通JRaft框架实现Raft协议,用于支持持久化服务实例(Ephemeral=false)和关键配置的强一致性。

1、节点状态管理
  • 角色转换:
    • Nacos节点初始为Follower,超时后进入Candidate并发起选举。
    • 选举成功后成为Leader,定期发送心跳维持领导权。
  • 集群元数据同步:
    • 节点启动时通过CliServiceaddPeer注册到Leader,同步全量数据。
2、数据写入流程

1、客户端请求:

  • 客户端注册持久化实例(Ephemeral=false)或更新配置。
    2、Leader处理:
  • Leader将请求转换为日志条目,追加到本地日志。
    3、日志复制:
  • Leader通过AppendEntriesRPC将日志同步到Follower。
    4、提交与应用:
  • 半数以上节点确认后,日志提交并应用到状态机(如更新服务注册表或配置文件)。
    5、响应客户端:
  • Leader返回操作结果(如注册成功)。
3、数据读取流程
  • 强一致性读:
    • 默认从Leader读取数据,确保返回最新提交的日志。
  • 线性一致性读:
    • 通过ReadIndex机制,确保Follower读取时等待日志同步到最新提交索引。
  • Lease Read:
    • Leader使用租约(Lease)机制,在租约有效期内允许Follower读取本地数据(需确保租约未过期)。
4、网络分区与恢复
  • 分区期间:
    • 若Leader所在分区无法与大多数节点通信,会自动放弃领导权。
    • 其他分区若能形成多数派,会选举新Leader。
  • 恢复后:
    • 旧Leader降级为Follower,同步新Leader的日志。
    • 通过日志匹配规则修复数据差异。

5、Raft协议的适用场景

Raft协议适用于需要强一致性和数据可靠性的场景:

  • 持久化服务注册:如金融系统的数据库实例注册(Ephemeral=false)。
  • 关键配置管理:如支付系统的限流规则、数据库连接串等配置。
  • 元数据存储:如服务元数据、命名空间配置等。

6、Raft协议的优缺点

优点:

  • 强一致性:日志提交需半数以上节点确认,确保数据一致性。
  • 容错性容忍少数节点故障(≤ (N- 1)/2)。
  • 可理解性:相比Paxos,Raft的设计更直观,易于实现和调试。
  • 动态成员管理:支持运行时添加或移除节点。

缺点:

  • 性能开销:日志同步需网络通信,写延迟较高
  • 可用性限制:网络分区或Leader故障期间可能暂时不可用
  • 复杂性:实现日志匹配、Leader选举等逻辑需处理大量边界条件。

7、Raft协议与Distro协议对比

在这里插入图片描述
说明:

  • Raft 倾向于一致性和分区容忍性(CP),在网络分区或节点故障时可能暂停服务直到选出新Leader
  • Distro 倾向于可用性和分区容忍性(AP),允许在分区期间继续提供服务,通过异步机制保证最终一致性

8、总结

Nacos中的Raft协议通过领导者选举、日志复制、安全性保证等机制,确保了持久化服务实例和关键配置的强一致性。它适用于对数据可靠性要求极高的场景(如金融、支付系统),但在性能和可用性上需权衡。通过灵活选择Raft(CP)或Distro(AP)协议,Nacos能够满足不同业务场景的需求。

向阳前行,Dare To Be!!!

http://www.dtcms.com/a/343322.html

相关文章:

  • VirtualBox 安装 Ubuntu Server 系统及 Ubuntu 初始配置
  • 区块链联邦学习思路一
  • 14、软件实现与测试
  • 实践题:智能健康监测系统设计方案
  • centos下安装Nginx(搭建高可用集群)
  • 亚马逊产品排名提升策略:从传统运营到AI驱动的智能化突破
  • 《信任链:幽灵签名》
  • 近端策略优化 (PPO) 算法深度解析
  • 智能求职推荐系统
  • mfc140u.dll文件是什么?解决mfc140u.dll文件丢失的有效解决方法分享
  • 密码管理中明文密码与空密码的危害与预防
  • 民国悬爱网剧《春迟》腾讯独播,石雨晴担纲联合出品人与联合制片人
  • Redis 主从复制(重点理解流程和原理)
  • Windows下服务封装
  • mac电脑使用(windows转Mac用户)
  • Java多线程编程——基础篇
  • STM32输入捕获相位差测量技术详解(基于TIM1复位模式)
  • Nacos 深度指南:从入门到高可用集群部署
  • ES6 面试题及详细答案 80题 (01-05)-- 基础语法与变量声明
  • C++宏的高级用法与元编程技巧
  • 数据结构青铜到王者第一话---数据结构基本常识(2)
  • 指数续创新高,期权的几种应对之策
  • 在线《相关性分析》
  • rs-fMRI_一篇文章中分析方法的梳理(翻译)
  • 职星学院企业培训系统:私有化部署赋能企业知识安全
  • 【鸿蒙开发】ArkTS 装饰器全解析:从 @Entry 到 @Observed 的全面指南
  • 资源对象深度解析:Pod生命周期与容器探针、Deployment滚动更新与回滚、StatefulSet有状态应用管理
  • 《MLB美职棒》美国国球是橄榄球还是棒球·棒球5号位
  • DAY44打卡
  • LCR 018. 验证回文串