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

Etcd用的是Raft算法

Raft 共识算法

什么是 Raft?

Raft 是一种为了管理复制日志的共识算法,由 Diego Ongaro 和 John Ousterhout 在 2013 年设计。它的主要目标是提供一个更容易理解的共识算法,同时保持与 Paxos 算法相同的可靠性和性能。

ETCD、Consul 等知名的分布式系统都采用了 Raft 算法作为其共识机制。

原文地址: https://javapub.net.cn/posts/

文章目录

  • Raft 共识算法
    • 什么是 Raft?
    • Raft 的核心概念
    • 服务器状态
    • 领导者选举
    • 日志复制
    • 如何学习 Raft 算法(适合小白)
    • Raft 与 Paxos 的比较
    • 常见分布式系统使用的共识算法
      • ZAB 协议与 Raft 的区别
    • 总结

Raft 的核心概念

Raft 将共识问题分解为三个相对独立的子问题:

  1. 领导者选举(Leader Election):当现有领导者失效时,必须选出一个新的领导者
  2. 日志复制(Log Replication):领导者必须从客户端接收日志条目,并将它们复制到集群中的其他服务器
  3. 安全性(Safety):如果任何服务器已经应用了一个特定的日志条目到其状态机,那么其他服务器不能在同一个日志索引位置应用不同的命令

服务器状态

在 Raft 中,服务器可以处于三种状态之一:

  • 领导者(Leader):处理所有客户端请求,如果客户端联系追随者,追随者会将请求重定向给领导者
  • 追随者(Follower):被动状态,不会发起请求,只响应来自领导者或候选人的请求
  • 候选人(Candidate):用于选举新领导者的中间状态

领导者选举

Raft 使用心跳机制触发领导者选举。当服务器启动时,它们都是追随者状态。只要追随者从领导者或候选人那里接收到有效的 RPC,它就会保持追随者状态。

如果追随者在一段时间内(称为选举超时)没有收到通信,它会假设没有可用的领导者,并开始选举:

  1. 追随者增加当前任期号并转换为候选人状态
  2. 候选人给自己投票并向其他服务器发送请求投票的 RPC
  3. 候选人保持候选人状态,直到以下三种情况之一发生:
    • 它赢得选举(获得大多数服务器的投票)
    • 另一个服务器成为领导者
    • 一段时间过去没有选出领导者

日志复制

一旦选出领导者,它就开始为客户端请求提供服务。每个客户端请求包含一个要被复制状态机执行的命令:

  1. 领导者将命令附加到其日志中作为新条目
  2. 领导者并行发送 AppendEntries RPC 给追随者
  3. 当条目被安全复制后,领导者应用该条目到其状态机并返回结果给客户端
  4. 如果追随者崩溃或运行缓慢,领导者会无限重试 AppendEntries RPC

如何学习 Raft 算法(适合小白)

作为初学者,以下是学习 Raft 算法的建议步骤:

  1. 理解问题背景:先了解分布式系统中为什么需要共识算法

  2. 可视化学习:访问 Raft 可视化网站,这个交互式演示能直观地展示 Raft 的工作原理

  3. 阅读简化版论文:Raft 论文的作者专门为了易于理解而设计了这个算法,可以从 Raft 论文 开始

  4. 动手实践

    • 尝试用自己熟悉的编程语言实现一个简单版本的 Raft
    • 或者研究 etcd 的源代码中 Raft 的实现
  5. 逐步深入

    • 先理解基本的领导者选举和日志复制
    • 然后学习成员变更、日志压缩等高级特性
  6. 参考资源

    • Raft 官方网站
    • etcd Raft 实现
    • MIT 6.824 分布式系统课程

Raft 与 Paxos 的比较

Raft 和 Paxos 都是解决分布式共识问题的算法,但 Raft 被设计为更容易理解和实现:

特性RaftPaxos
设计目标可理解性理论完备性
复杂度相对简单复杂
角色划分明确(领导者、追随者、候选人)不明确
实现难度较低较高
使用案例etcd, ConsulChubby, Spanner

常见分布式系统使用的共识算法

不同的分布式系统选择了不同的共识算法来保证一致性:

分布式系统共识算法特点
etcdRaft易于理解,强领导者模型
ConsulRaft易于理解,强领导者模型
ZookeeperZAB类似于 Raft,但有所不同
ChubbyPaxos理论完备,实现复杂
SpannerPaxos理论完备,实现复杂

ZAB 协议与 Raft 的区别

ZAB (Zookeeper Atomic Broadcast) 协议是 Zookeeper 使用的共识算法,与 Raft 有一些相似之处,但也有明显区别:

  1. 相似点

    • 都使用强领导者模型
    • 都有类似的领导者选举机制
    • 都通过日志复制来保证一致性
  2. 不同点

    • ZAB 使用的是"恢复模式"和"广播模式"两个阶段
    • ZAB 的领导者选举算法细节不同
    • ZAB 协议设计更早,而 Raft 是为了可理解性而设计的

对于初学者来说,理解 Raft 后再学习 ZAB 会更容易,因为 Raft 的设计初衷就是为了易于理解。

总结

Raft 通过将复杂的共识问题分解为更易于理解的子问题,并引入了强领导者模型,使得分布式系统中的共识算法变得更加清晰和易于实现。这也是为什么 etcd 等现代分布式系统选择 Raft 而非 Paxos 作为其共识算法的原因。

对于初学者来说,理解 Raft 是进入分布式系统世界的一个很好的起点。通过可视化工具和简化的解释,即使没有深厚的分布式系统背景,也能逐步掌握这个重要的算法。

ETCD 用了哪个共识算法。

相关文章:

  • Linux上位机开发实践(超越MPP去开发产品)
  • 青少年编程与数学 02-014 高中数学知识点 07课题、专业相关性分析
  • Blender模型导入虚幻引擎设置
  • 静态住宅IP的应用、设置及好处
  • 开发相关的一些网址收藏(持续更新中)
  • [原创](Modern C++)现代C++的关键性概念: 如何正确地返回函数指针?
  • 【Linux高级IO(一)】理解五种IO模型
  • MySQL篇(一):慢查询定位及索引、B树相关知识详解
  • springboot整合Thymeleaf web开发出现Whitelabel Error Page
  • R语言——获取数据1
  • Python Websockets库深度解析:构建高效的实时Web应用
  • MySQL和Oracle常见语法差异详解
  • 【Easylive】AppInterceptor和WebAppConfigurer 基于 Token 的请求拦截验证机制
  • 高级java每日一道面试题-2025年3月20日-虚拟化操作系统篇[Docker篇]-如何控制docker容器的启动顺序?
  • 【FAQ】HarmonyOS SDK 闭源开放能力 —Push Kit(12)
  • 文件系统--软硬链接/动静态库
  • C# 窗体应用(.FET Framework ) 打开文件操作
  • 万字解析Spring简易版实现方案!
  • Linux系统安装RabbitMQ
  • Unity中 粒子系统使用整理(一)
  • 马克思主义理论研究教学名师系列访谈|鲍金:给予学生一碗水、自己就要有一桶水
  • 预告:央行等部门将发声,介绍“一揽子金融政策支持稳市场稳预期”有关情况
  • 今年五一档电影票房已破7亿
  • 云南禄丰一尾矿干堆场坍塌致5人被埋
  • 特朗普:对所有在国外制作进入美国的电影征收100%关税
  • 国铁集团:5月4日全国铁路预计发送旅客2040万人次