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

什么是 Paxos和Raft

Raft 和 Paxos 是两种经典的分布式一致性算法(Consensus Algorithms),广泛应用于数据库、分布式系统、微服务架构中,用来确保在多个节点中即使有部分节点故障,系统仍然可以就“某一值”达成一致(即:分布式共识)。

它们不是区块链专属,但在联盟链、私有链或数据库复制系统中常被用来替代 PoW、PBFT 等共识机制


一、什么是 Paxos?

定义:

Paxos 是一种保证在部分节点失效或网络延迟时,多个分布式节点能就某个值达成一致的协议,由计算机科学家 Leslie Lamport 提出。

场景背景:

  • 服务器节点间无法完全信任;
  • 网络可能延迟或断连;
  • 仍需要 ** 选出“被大家同意的提案/值” ** 作为决策结果。

核心角色:

角色说明
Proposer提出提案(某个值)
Acceptor接受并投票是否同意提案
Learner接收投票结果,学习被选定的提案值

简化流程:

  1. Proposer 发出编号 + 提案(比如提议设置主节点为A)
  2. Acceptor 接收提案,若未承诺别的,就同意并承诺不接受编号更低的提案
  3. 一旦超过半数 Acceptor 同意,该提案被采纳

Paxos 优点:

  • 高一致性保证
  • 理论基础扎实,已被数学证明正确

Paxos 缺点:

  • 设计复杂,难以实现和理解
  • 实际部署效率较低

二、什么是 Raft?

定义:

Raft 是 Paxos 的简化版、工程可落地版,由 Diego Ongaro 和 John Ousterhout 提出,目标是让分布式一致性“更容易理解和实现”。

被广泛应用于实际系统,如:etcd、Consul、TiKV、Kubernetes 组件、Hyperledger Fabric

核心理念:

Raft 通过**强主结构(Leader)**实现集群复制与共识。

三种角色:

角色说明
Leader唯一负责处理客户端请求并同步给其他节点
Follower被动接收 Leader 的日志复制
Candidate在选举期间自荐为 Leader 的节点

Raft 的工作流程

1. Leader 选举

  • 初始所有节点是 Follower;
  • 若超时未收到 Leader 心跳包,会变成 Candidate 并发起投票;
  • 获得过半选票的 Candidate 成为新的 Leader。

2. 日志复制

  • 客户端请求发送到 Leader;
  • Leader 将请求作为日志广播给 Followers;
  • 当日志被大多数节点确认,Leader 才提交它,客户端才认为“成功”。

3. 容错能力

  • 系统容忍 f 个失效节点,需至少 2f + 1 个节点运行。

三、Raft vs Paxos 对比

特性PaxosRaft
发明者Leslie LamportDiego Ongaro 等
可读性非常差设计清晰,易懂易实现
系统结构无 Leader(多数投票)有 Leader(中心同步)
实际部署少(理论研究多)多(K8s、etcd、Fabric 等)
性能
容错性
应用理论共识工程共识

四、实际应用场景

应用系统使用算法场景说明
etcd(K8s 核心)Raft配置中心、服务发现
ConsulRaft服务注册、KV存储
TiKV(PingCAP)Raft分布式数据库一致性
ZookeeperZab(类似 Paxos)集群协调一致性
Hyperledger FabricRaft区块链联盟链共识层之一(替代 Kafka)

总结对比表

对比项PaxosRaft
类型分布式一致性算法Paxos 实现变种
易用性理论性强,复杂难懂工程友好,广泛应用
共识模型多数投票达成一致强主结构,日志同步
吞吐性能
容错性
适合场景研究、极端容错系统企业分布式系统、联盟链

总结

名称PaxosRaft
核心作用实现多个节点达成一致,保证数据一致性
应用领域分布式数据库、分布式KV系统、区块链联盟链等
核心价值即使部分节点宕机或网络不可靠,系统仍能保持一致

相关文章:

  • 信号处理学习——文献精读与code复现之TFN——嵌入时频变换的可解释神经网络(下)
  • 商业秘密中经营信息的法律保护探析——以客户名册为例
  • 开源3D 动态银河系特效:Vue 与 THREE.JS 的奇幻之旅
  • 如何在FastAPI中打造坚不可摧的Web安全防线?
  • Java 编程之观察者模式详解
  • 笔记05:Allegro导入DXF文件
  • Tailwind CSS工作原理
  • Harbor的安装与使用
  • C++ 第三阶段 新标准库组件 - 第二节:std::filesystem(文件系统操作)
  • 设计模式-代理模式、装饰者模式
  • Vue3—插槽solt
  • 微机系统 - 第7章 -可编程接口芯片
  • 概率概率密度
  • GO 语言学习 之 函数
  • 基于MFC的遥感图像匹配程序设计
  • 前端进阶之路-从传统前端到VUE-JS(第一期-VUE-JS环境配置)(Node-JS环境配置)(Node-JS/npm换源)
  • SQL 子查询全位置解析:可编写子查询的 7 大子句
  • Hyper-v-中的FnOs--飞牛Nas虚拟磁盘扩容(不清除数据)
  • Java安装与使用教程
  • 栅极驱动器选的好SiC MOSFET高效又安全