前言
这是前段时间在公司内部关于 paxos 做的一次技术分享,主要围绕 basic-paxos/multi-paxos 协议进行,并会对 raft 协议进行一些对比,简单提及了一下 pbft。
取名“深入浅出 paxos”,意思是从分布式模型的简化和抽象系统,讲到分布式数据一致性的核心问题,再引出 paxos 协议的核心,再从纯理论的 basic-paxos 到落地工程实践的 multi-paxos,最后对比 raft、pbft 协议,从简入深,再从深到核心,再到工程实践。
由于是一次技术分享,所以和我之前的技术博文不太一样,有些东西并没有完全写到博客里,包括一些现场讨论等,所以可能读完之后对 paxos 理解效果会差一点。
名词介绍
- paxos: 应该是分布式领域较早出现的数据一致性协议(本文研究的正是此协议)
- basic paxos: 通常说的 paxos 就是指 basic paxos,或者称为 classical paxos
- multi-paxos: paxos 的改进,迈出了工程实践的步伐(性能改善,工程落地)
- epaxos/fast-paxos: 其他一些 paxos 的改进,特别是 epaxos 最近几年得到较多的讨论和重视
- raft: 从 paxos 而来,类似于 multi-paxos,但是更为简单,容易理解,更为简单
- quorum: 英文翻译:法定人数,可以理解为多数派,大多数,超过半数的一个集合,更为精确的定义是 ”任意两个 quorum 必须有交集)
- state machine replication model: 复制状态机模型
- Crash Fault Tolerance: 故障容错(节点离线,网络延迟等)
- Byzantine Fault Tolerance: 拜占庭容错(节点离线,网络延迟,节点作恶)
- pbft: 实用拜占庭容错算法
- hotstuff: 也是一种拜占庭容错共识算法
- libraBFT: 基于 hotstuff
先认识名词,从整体上有一些概念,战略上藐视。
预先准备
本文重点分析 paxos (basic paxos) 算法。顺带会提及 multi-paxos 以及 raft 算法。
paxos 很难理解?争取听完本次分享,大家能彻底理解 paxos!
先忘记区块链,忘记 pbft,忘记 hotstuff.
单机?分布式?
为什么要有分布式系统? 单机容易故障,无法保证服务高可用。
于是出现多副本模型,但多副本模型就存在两个问题:
- 如何确保复制是成功的?(高可用)
- 如何确保值是唯一的?(一致性)