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

Raft 协议:分布式一致性算法的核心思想


引言

在分布式系统中,数据一致性是核心挑战。Raft 协议作为一种易于理解的一致性算法,被广泛应用于 etcd、Consul 等系统中。


一、Raft 核心概念

1.1 角色与任期(Term)

• 领导者(Leader):处理所有客户端请求,管理日志复制。

• 跟随者(Follower):被动响应领导者的心跳和日志条目。

• 候选人(Candidate):在领导者失效时发起选举。

• 任期(Term):逻辑时钟,用于检测过期的请求。

超时未收到心跳
赢得选举
心跳超时
其他候选人胜出
Follower
Candidate
Leader

1.2 日志结构

• 日志条目(Log Entry):包含命令、任期号和索引。

• 日志匹配原则:若两个日志条目索引相同且任期相同,则后续条目也一致。


二、领导者选举流程

2.1 选举触发条件

• 心跳超时:跟随者未在 election timeout(通常 150-300ms)内收到领导者心跳,则转为候选人。

• 自增任期号:候选人发起选举时递增当前任期号。

2.2 选举过程时序

Follower1 Follower2 Candidate All 请求投票(Term=3) 请求投票(Term=3) 投票成功 广播心跳(Term=3) 心跳响应 Follower1 Follower2 Candidate All

2.3 选举超时随机化

• 避免分割投票:每个节点的超时时间随机化(150-300ms),减少多个候选人同时竞选。


三、日志复制机制

3.1 日志追加流程

Client Leader Follower 提交命令(SET x=1) 写入本地日志(未提交) 发送日志条目(Term=3, Index=5) 确认写入 确认多数派写入 返回成功 Client Leader Follower

3.2 日志一致性规则

  1. 匹配原则:若索引 i 的日志条目在多数节点存在且任期一致,则视为已提交。
  2. 提交规则:领导者只能提交当前任期的日志,旧任期日志需通过新日志间接提交。

四、安全性保障

4.1 领导者完整性

• 日志匹配检查:候选人在选举时需携带最新日志索引和任期,跟随者拒绝日志落后的请求。

4.2 选举限制

• 任期号校验:节点拒绝来自旧任期的请求(如 Term=2 请求在 Term=3 时被丢弃)。

4.3 网络分区容错

心跳超时
赢得选举
脑裂
Leader in Partition A
Candidate in Partition A
New Leader in Partition A
Leader in Partition B
Follower in Partition B

五、Raft 与 Paxos 对比

特性RaftPaxos
设计目标易于理解和实现理论完备性
角色划分明确的三角色模型多角色(Proposer/Acceptor/Learner)
日志复制单领导者线性化复制多领导者并行复制
学习曲线低(状态机清晰)高(多阶段提案机制)

六、实战应用场景

6.1 etcd 中的 Raft 实现

• 元数据管理:通过 Raft 同步集群节点状态。

• 键值存储:客户端请求经 Raft 提交后持久化。

6.2 容错与恢复

• 节点宕机:领导者持续发送心跳,超时后触发新一轮选举。

• 日志恢复:新加入节点通过快照(Snapshot)和日志同步补全数据。


七、总结与延伸

核心结论

  1. 易用性:Raft 通过明确角色和任期机制,大幅降低分布式一致性实现难度。
  2. 强一致性:通过多数派提交和日志匹配原则,确保系统状态严格一致。
  3. 适用场景:适合需要强一致性的系统(如配置中心、分布式锁服务)。

相关文章:

  • 电动调节 V 型球阀:工业流体控制的全能解决方案-耀圣
  • HTTP与HTTPS协议的核心区别
  • 通过多线程获取VENC的H264码流数据
  • 刷leetcodehot100返航版--二叉树
  • 计算机视觉与深度学习 | Python实现EMD-SSA-VMD-LSTM时间序列预测(完整源码和数据)
  • Day12-苍穹外卖(完结篇)
  • ctfshow——web入门254~258
  • 98. 验证二叉搜索树
  • 如何优化关键词长度:2025年SEO实用指南
  • 软件设计师考试《综合知识》创建型设计模式考点分析
  • SAP HCM 0008数据存储逻辑
  • 电池的充放电电流中C的含义
  • 【SpringBoot】关于MP使用中配置了数据库表前缀的问题
  • 在宝塔中使用.NET环境管理部署 .NET Core项目
  • 生产级编排AI工作流套件:Flyte全面使用指南 — Development cycle
  • mysql中limit深度分页详细剖析【爽文】
  • 架构师论文《论模型驱动架构软件开发方法及其应用》
  • 【软件测试】性能测试 —— 工具篇 LoadRunner 介绍与使用
  • Ansible模块——服务管理和设置定时任务
  • 一字典两世界:优雅移除 `NSDictionary` 指定键的最佳实践
  • 蒲慕明院士:好的科普应以“质疑、讨论公众关切的科学问题”为切入点
  • 雅安市纪委监委回应黄杨钿甜耳环事件:相关政府部门正在处理
  • 跨越三十年友情,61岁余隆和60岁齐默尔曼在上海再度合作
  • 韧性十足的中国外贸企业:“不倒翁”被摁下去,还会再弹起来
  • 李强:把做强国内大循环作为推动经济行稳致远的战略之举
  • 苏轼“胡为适南海”?