Quorum 协议简介
Quorum 协议是一种用于在分布式系统中实现一致性的机制,广泛应用于数据库、分布式存储和分布式共识算法中。该协议核心思想基于多数派原则(Majority Principle),即操作的成功执行需获得多数节点的确认(称为 Quorum)。
在一个副本组(Replica Group)中,系统通常要求操作(如读写)至少获得节点数的一半加一的确认。例如,在一个包含 5 个节点的系统中,Quorum 的大小为 3。只要超过半数节点响应,即使其余节点故障或网络不可达,系统依旧能保持一致性。
工作原理
- 写操作:数据需写入至少达到 Quorum 数量的节点,写操作才能被确认成功。
- 读操作:数据需从至少 Quorum 数量的节点读取,以获得一致性的数据视图。
优势与局限
- 容错性强:系统可容忍小于 Quorum 数量的节点故障。
- 可用性高:只需 Quorum 存活节点即可继续对外服务。
- 实现简单:适用于多种分布式系统。
然而,Quorum 协议也存在一定限制,比如高并发下可能导致资源竞争激烈,以及一致性和性能之间的权衡。
RAFT 协议简介
Raft 是一种用于实现分布式系统一致性的共识算法,由 Diego Ongaro 和 John Ousterhout 于 2013 年提出。相较于 Paxos,Raft 更加直观、易于理解和实现。
节点角色
- Leader(领导者):处理客户端请求并复制日志。
- Follower(跟随者):被动接收来自 Leader 的指令。
- Candidate(候选者):在选举中竞争成为新 Leader。
工作机制
-
领导者选举
- 初始所有节点为 Follower,定时接收心跳信号(Heartbeat)。
- 若在一段时间内未收到心跳,节点转为 Candidate,并发起投票请求。
- 获得多数节点选票后,Candidate 成为 Leader。
-
日志复制
- 客户端请求发送至 Leader。
- Leader 将命令记录在日志,并复制到所有 Follower。
- 一旦超过半数节点写入成功,则确认该日志条目提交。
特点
- 简洁清晰的流程设计。
- 强一致性保证。
- 故障容忍能力强。
Raft 被广泛用于分布式数据库、服务注册与发现系统等领域,如 etcd、Consul、TiKV 等。
Paxos 协议简介
Paxos 是由 Leslie Lamport 提出的一种经典分布式一致性协议,具有高度容错能力,适用于系统节点可能出现宕机或网络异常的情况。
节点角色
- Proposer(提议者):发起提案,试图使提案被接受。
- Acceptor(接受者):对提案进行投票,决定是否接受。
- Learner(学习者):学习并记录最终被接受的提案。
核心流程
Paxos 协议包括两个阶段:
-
Prepare 阶段:
- Proposer 生成唯一编号并发出 Prepare 请求。
- Acceptor 若尚未接受更高编号的提案,则承诺不再接受比此编号小的提案,并返回已接受的最大编号提案。
-
Accept 阶段:
- Proposer 根据返回结果发起 Accept 请求。
- 若 Acceptor 接受该提案,并且有多数 Acceptor 接受此提案,则该提案被批准(Chosen)。
特点
- 高度容错性:在大多数节点正常的前提下,系统可继续运作。
- 一致性保证强:确保所有节点最终达成相同决议。
- 实现复杂度高:相比 Raft,Paxos 更难理解和实现。
三者对比总结
| 特性 | Quorum 协议 | RAFT 协议 | Paxos 协议 |
|---|---|---|---|
| 类型 | 一致性协议框架 | 共识算法 | 共识算法 |
| 操作机制 | 多数副本确认 | 领导者选举 + 日志复制 | 两阶段投票 |
| 一致性保证 | 高 | 强一致性 | 强一致性 |
| 容错能力 | 较高 | 高 | 高 |
| 易用性/可读性 | 较易理解 | 易于实现与理解 | 理论复杂,难以实现 |
| 应用示例 | MongoDB, Cassandra | etcd, Consul, TiKV | Chubby, Google Spanner等 |
各协议适用的系统场景不同,选择时应根据系统需求的可用性、一致性要求及实现复杂度做权衡。
参考资料:
- Diego Ongaro 和 John Ousterhout,《In Search of an Understandable Consensus Algorithm》
- Leslie Lamport,《Paxos Made Simple》
- open-source 项目文档如 etcd、Cassandra、TiKV 等
- 腾讯《深入浅出分布式一致性算法》系列(WeRead 链接)
689

被折叠的 条评论
为什么被折叠?



