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

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. 适用场景:适合需要强一致性的系统(如配置中心、分布式锁服务)。
http://www.xdnf.cn/news/7004.html

相关文章:

  • 欢乐熊大话蓝牙知识4:GATT 协议全解:蓝牙传数据到底怎么传?
  • 费马小定理
  • 数学复习笔记 16
  • 【Linux网络编程】Socket编程:协议理论入门
  • 数据库的规范化设计方法---3种范式
  • AIStarter Windows 版本迎来重磅更新!模型插件工作流上线,支持 Ollama / ComfyUI 等多平台本地部署模型统一管理
  • FPC连接器的未来趋势:柔性时代的核心桥梁
  • 【Redis】Hash 哈希
  • opencv4.11生成ArUco标记 ArUco Marker
  • IP68防水Type-C连接器实测:水下1米浸泡72小时的生存挑战
  • CodeBuddy 开发 JSON 可视化工具实录:JsonVision 的诞生之旅
  • 广东省省考备考(第十三天5.17)——言语:接语选择题(听课后强化练习)
  • 永磁同步电机公式总结——反电动势、磁链、转矩公式;三项、两项电压方程;坐标表换方程
  • 通过多线程获取VENC的H264码流数据
  • 11.1 LangGraph生产级AI Agent开发:状态管理与多智能体系统构建全解析
  • RAID学习笔记
  • USB和串口软件编程控制继电器通断
  • windows系统各版本下载
  • 查看电脑信息的方法-CPU核心数量、线程数量等
  • TXT记录解析技术深度解析与应用实践
  • 医疗大模型技术演进与行业应用全景
  • 在Java中调用Ant命令
  • 动态规划(3)学习方法论:构建思维模型
  • CSP 2024 提高级第一轮(CSP-S 2024)单选题解析
  • 利用SenseGlove触觉手套开发XR手术训练体验
  • profibusDP主站转profinet网关接ABB电机保护单元与1200plc通讯
  • 初探Linux内核:解锁Linux操作系统的基本核心的奥秘
  • StreamCap v0.0.1 直播录制工具 支持批量录制和直播监控
  • 数学复习笔记 17
  • arm-linux平台通过syslog + logrotate + 脚本实现日志管理