【分布式】分布式一致性协议:2PC/3PC、Paxos、Raft、ZAB 核心原理、区别(2026必考Raft)

张开发
2026/4/22 7:42:42 15 分钟阅读
【分布式】分布式一致性协议:2PC/3PC、Paxos、Raft、ZAB 核心原理、区别(2026必考Raft)
文章目录分布式一致性协议一、基础理论铺垫必考前置知识1.1 分布式一致性核心定义1.2 核心理论约束二、四大核心协议 结构化拆解2.1 2PC两阶段提交协议核心定位核心角色核心原理两阶段流程核心优缺点2.2 3PC三阶段提交协议核心定位核心角色核心原理三阶段流程核心优缺点2.3 Paxos协议核心定位核心角色核心分支拆解1. Basic Paxos 核心原理2. Multi-Paxos 工程化改进核心优缺点2.4 Raft协议2026必考核心重点强化核心定位核心基础任期(Term)机制核心角色仅3种边界清晰必考核心1Leader选举机制触发条件选举完整流程核心投票安全规则必考核心2日志复制机制日志条目核心结构日志复制完整流程日志冲突解决必考核心3安全性机制必考工程化特性工业界应用2.5 ZAB协议Zookeeper原子广播协议核心定位核心角色核心基础ZXID事务ID核心原理两大阶段1. 崩溃恢复阶段2. 消息广播阶段核心特性三、核心协议 高频对比考点3.1 全协议核心维度对比表3.2 高频必考对比拆解1. 2PC/3PC vs Raft/Paxos/ZAB 本质区别2. Raft vs Paxos 核心区别3. Raft vs ZAB 核心区别高频考点四、2026年Raft协议 必考考点清单基础必背考点高频核心考点易错考点五、工业界选型总结分布式一致性协议本文系统性梳理分布式一致性核心理论、四大核心协议2PC/3PC、Paxos、Raft、ZAB的原理、差异并重点强化2026年必考的Raft协议核心考点形成完整的知识体系。一、基础理论铺垫必考前置知识1.1 分布式一致性核心定义分布式一致性本质是在不可靠的分布式网络中让多个节点对某个提案/数据/状态达成全局一致同时保证容错性、安全性与活性。核心目标原子性操作要么全节点执行要么全不执行无中间状态顺序性所有节点以相同的顺序执行操作安全性永远不会提交错误的数据已提交的数据不会丢失/回滚活性只要半数以上节点存活系统最终能达成一致不会永久阻塞容错性可应对节点宕机、网络延迟/丢包/分区等非恶意故障本文所有协议均为崩溃容错CFT不处理拜占庭恶意节点1.2 核心理论约束CAP定理分布式系统无法同时满足一致性(Consistency)、可用性(Availability)、分区容错性(Partition Tolerance)网络分区是分布式系统的必然场景因此只能在CP强一致、牺牲部分可用性和AP高可用、牺牲强一致之间做取舍。本文所有协议均为CP型协议优先保证强一致性。FLP不可能原理在异步网络中只要存在一个可能故障的节点就不存在完全正确的分布式一致性算法。所有工业级一致性协议都是在FLP原理的基础上做工程妥协如引入超时机制、随机化、半数投票机制在保证安全性的前提下实现活性。二、四大核心协议 结构化拆解2.1 2PC两阶段提交协议核心定位最早的强一致性原子提交协议专为分布式事务设计是分布式一致性的雏形解决跨节点事务的原子性问题。核心角色协调者(Coordinator)全局事务的调度者单点核心参与者(Participant)执行本地事务的节点响应协调者指令核心原理两阶段流程准备阶段投票阶段协调者向所有参与者发送Prepare请求参与者执行本地事务写redo/undo日志锁资源但不提交最终返回Yes可提交或No不可提交。提交/中止阶段协调者收集所有投票全票Yes向所有参与者发送Commit请求参与者提交本地事务释放资源返回ACK任意No/超时向所有参与者发送Rollback请求参与者通过undo日志回滚释放资源返回ACK核心优缺点优点缺点原理简单实现门槛低可保证强一致同步阻塞所有节点在等待响应时锁资源吞吐量极低适用于短链路、低并发的分布式事务场景单点故障协调者宕机导致整个系统阻塞无法恢复数据不一致风险Commit阶段网络异常部分节点提交、部分未提交出现数据分裂容错性极差任意节点故障直接导致事务失败无崩溃恢复能力2.2 3PC三阶段提交协议核心定位2PC的改进版核心解决2PC的同步阻塞和单点故障问题降低阻塞范围引入超时机制。核心角色与2PC一致协调者、参与者核心原理三阶段流程CanCommit阶段协调者发送预询问请求参与者仅检查自身资源/执行条件不锁资源、不写日志返回Yes/No无阻塞风险。PreCommit阶段协调者收集全票Yes后发送预提交请求参与者执行本地事务、写redo/undo日志、锁资源返回ACK若有No/超时直接中止事务。DoCommit阶段协调者收到全量ACK发送正式提交/回滚请求参与者执行后返回ACK参与者超时未收到请求会自动提交事务解决部分阻塞问题。核心优缺点改进点拆分阶段减少阻塞范围引入参与者超时机制降低了永久阻塞的概率缺陷仍存在数据不一致风险网络分区下协调者发送Rollback部分参与者超时自动提交未解决单点问题复杂度提升工业界极少落地。2.3 Paxos协议核心定位分布式一致性的理论基石Lamport提出的基于消息传递的高容错一致性算法有严格的数学证明只要半数以上节点存活就能保证数据一致是后续所有工业级协议的理论源头。核心角色Proposer提案者发起提案推动达成一致Acceptor接受者对提案进行投票决定是否接受是决策核心Learner学习者同步已达成一致的提案不参与投票仅对外提供数据核心分支拆解Paxos分为Basic Paxos理论基础单值一致性和Multi-Paxos工程化实现多值连续一致性工业界落地的均为Multi-Paxos。1. Basic Paxos 核心原理针对单个值达成一致核心分为两个阶段核心规则提案编号全局唯一且递增只有超过半数节点接受的提案才算最终达成一致。准备阶段PrepareProposer生成全局唯一递增的提案编号N向超过半数的Acceptor发送Prepare(N)请求Acceptor收到请求后若N大于其之前响应过的所有提案编号就承诺不再接受编号小于N的提案同时返回其已接受的最大编号的提案若有接受阶段AcceptProposer收到超过半数的Acceptor响应后若响应中无已接受的提案就自定义提案值V若有就采用响应中最大编号的提案值VProposer向超过半数的Acceptor发送Accept(N, V)请求Acceptor收到请求后若N不小于其承诺过的最大编号就接受该提案返回ACK达成一致当提案被超过半数的Acceptor接受该提案就被最终提交Learner同步该值。2. Multi-Paxos 工程化改进Basic Paxos仅能处理单个值且存在活锁问题多个Proposer同时发起提案编号不断抬高谁都无法完成提交效率极低。Multi-Paxos做了核心改进选举出唯一的Leader只有Leader能作为Proposer发起提案彻底消除多Proposer的活锁问题稳定Leader场景下将两阶段简化为单阶段跳过Prepare直接执行Accept大幅提升吞吐量支持连续多个值的日志复制适配分布式系统的状态机同步场景核心优缺点优点缺点理论严谨安全性、活性有严格数学证明极度晦涩难懂工程化实现门槛极高容错性极强半数以上节点存活即可用无明确的工程规范不同实现差异大极易出现bug是所有分布式一致性协议的理论源头Basic Paxos存在活锁Multi-Paxos无统一实现标准2.4 Raft协议2026必考核心重点强化核心定位专为可理解性设计的工业级强一致性算法在保证与Multi-Paxos同等安全性、容错性的前提下大幅降低理解和实现难度是目前分布式系统的首选一致性协议工业界落地最广泛。核心设计思路将复杂的一致性问题拆解为Leader选举、日志复制、安全性三个独立可解的子问题同时配套快照压缩、成员变更两个工程化特性。核心基础任期(Term)机制Term是Raft的全局逻辑时钟是整个协议的核心骨架Term是全局单调递增的整数每一次选举对应一个新的Term一个Term内要么选出唯一的Leader要么选举失败Term递增重新选举所有节点维护当前Term任何RPC请求必须携带TermTerm更小的请求会被直接拒绝节点发现自身Term小于其他节点会自动更新为最新Term核心角色仅3种边界清晰Leader领导者唯一的提案者处理客户端写请求管理日志复制通过心跳维持Leader身份Follower跟随者被动响应Leader和Candidate的RPC请求不主动发起请求同步日志、参与投票可处理客户端读请求Candidate候选者Leader选举过程中的临时角色由Follower超时转换而来发起选举投票必考核心1Leader选举机制触发条件Follower在**选举超时时间随机150-300ms**内未收到Leader的心跳包AppendEntries RPC兼做心跳和日志复制就会触发选举。随机超时时间是核心设计避免多个Follower同时发起选举解决选票平分问题。选举完整流程Follower切换为Candidate自增当前Term给自己投一票向其他节点发起RequestVote RPC投票请求其他节点收到请求后基于投票规则进行校验校验通过则投出赞成票选举结果分支Candidate收到超过半数节点的赞成票当选为新Leader立即向所有节点发送心跳包宣告Leader身份终止其他节点的选举收到其他节点的合法Leader心跳自动退回Follower状态选举超时未获得过半选票自增Term重新发起选举核心约束一个Term内每个节点只能投一票先到先得核心投票安全规则节点只会给满足以下条件的Candidate投票Candidate的Term不小于自身当前TermCandidate的日志比自身更新日志的Term更大或Term相同日志长度更长该规则是Raft的核心安全保证确保当选的Leader一定包含所有已提交的日志不会丢失已提交的数据。必考核心2日志复制机制Raft的本质是基于复制状态机的一致性算法所有节点以相同的顺序执行相同的日志指令最终达到一致的状态。日志条目核心结构每个日志条目包含3个核心字段全局唯一标识字段作用Index日志索引全局单调递增的整数唯一标识日志条目的位置Term任期号该条目被Leader创建时的任期号用于校验日志合法性Command指令客户端的操作指令最终会被执行到状态机日志复制完整流程客户端发送写请求给LeaderLeader将请求封装为新的日志条目追加到本地日志Raft仅支持日志追加绝不修改/删除已提交的日志Leader通过AppendEntries RPC将新日志并行发送给所有FollowerFollower收到请求后先校验日志匹配特性前一条日志的Index和Term与Leader发送的完全匹配校验通过后将日志追加到本地返回ACK日志匹配特性若两个节点的日志在相同Index和Term上有相同条目则该Index之前的所有日志完全一致。当Leader收到超过半数Follower的ACK就认为该日志条目是**已提交(Committed)**的立即将该指令执行到本地状态机给客户端返回成功响应Leader通过后续的心跳/日志复制请求将已提交的日志索引CommitIndex同步给FollowerFollower收到后提交对应日志执行到本地状态机日志冲突解决当Follower的日志与Leader冲突时Leader会强制覆盖Follower的冲突日志Leader通过AppendEntries RPC不断向前回溯找到Follower与自己日志完全匹配的位置删除该位置之后Follower的所有冲突日志同步Leader的日志最终保证Follower的日志与Leader完全一致。必考核心3安全性机制Raft通过5条核心安全规则从数学上保证永远不会出现数据不一致、已提交数据丢失的问题选举安全性一个Term内最多只能选出一个Leader彻底避免脑裂日志单向流动日志只能从Leader流向FollowerFollower不能主动修改日志Leader绝不修改/删除自己已提交的日志提交限制规则Leader只能直接提交当前Term内、已被半数节点复制的日志对于之前Term的日志必须和当前Term的某个日志一起被半数节点复制后才能被提交核心易错点旧Term的日志即使被半数节点复制也不会被Leader直接提交避免旧Leader恢复后覆盖已提交的数据。候选人限制规则只有日志比半数以上节点更新的Candidate才能当选Leader保证已提交的日志永远不会丢失状态机安全性如果一个节点已经将某个Index的日志执行到状态机那么其他节点绝不会在同一个Index上执行不同的指令必考工程化特性快照压缩Snapshot解决日志无限增长的问题节点将当前状态机的全量状态保存为快照删除快照之前的所有日志条目大幅降低日志存储、同步的开销是工业界落地的必备特性。成员变更集群配置变更解决集群节点增减的问题核心避免配置变更过程中出现两个过半集群脑裂。基础方案单节点变更每次仅增减一个节点保证集群半数节点的连续性是工业界最常用的方案通用方案联合共识Joint Consensus两阶段变更支持任意数量的节点同时变更工业界应用etcd、Consul、TiKV、RocketMQ DLedger、Elasticsearch 7.x、MongoDB等是目前分布式存储、配置管理、服务发现、分布式锁场景的首选协议。2.5 ZAB协议Zookeeper原子广播协议核心定位专为Zookeeper分布式协调服务设计的崩溃容错原子广播协议核心目标是保证Zookeeper集群的全局顺序一致性支撑分布式锁、配置管理、服务发现等协调场景。核心角色Leader唯一处理客户端写请求发起事务提案全局事务排序Follower处理读请求参与Leader选举和提案投票同步Leader数据Observer只读节点处理读请求不参与选举和投票仅同步数据用于提升集群读性能不影响写吞吐量核心基础ZXID事务IDZXID是ZAB的全局有序标识64位整数高32位Epoch任期号Leader换届后自增与Raft的Term作用一致低32位事务序号当前Leader任期内的事务单调递增Leader换届后重置为0核心原理两大阶段1. 崩溃恢复阶段触发条件集群启动、Leader宕机、网络分区导致Leader失去过半节点联系。Leader选举节点基于ZXID投票优先投票给ZXID更大的节点ZXID越大代表数据越新获得过半投票的节点当选为新Leader数据同步新Leader与所有Follower进行数据对齐补全Follower缺失的事务回滚Follower中未提交的冲突事务直到过半节点同步完成恢复阶段结束。2. 消息广播阶段本质是简化的2PC基于过半提交保证原子性客户端写请求发送给LeaderLeader封装为事务Proposal生成全局唯一ZXID向所有Follower广播ProposalFollower收到Proposal后写入本地事务日志返回ACKLeader收到过半Follower的ACK后提交该事务向所有Follower发送Commit请求同时执行事务给客户端返回响应Follower收到Commit请求后提交对应事务执行到本地状态机核心特性严格的全局顺序一致性所有事务按ZXID的顺序全局执行保证分布式协调场景的正确性崩溃恢复安全保证已提交的事务永远不会丢失未提交的事务一定会被回滚三、核心协议 高频对比考点3.1 全协议核心维度对比表对比维度2PC/3PCPaxos(Multi-Paxos)RaftZAB核心定位分布式事务原子提交协议通用分布式一致性理论基础通用工业级分布式一致性协议Zookeeper专属原子广播协议核心角色协调者、参与者Proposer、Acceptor、LearnerLeader、Follower、CandidateLeader、Follower、Observer容错性极差任意节点故障导致事务失败强半数以上节点存活即可用强半数以上节点存活即可用强半数以上节点存活即可用选举机制无单点协调者无强制Leader规范Multi-Paxos可选Leader强制唯一Leader有严格的选举安全规则强制唯一Leader基于ZXID的选举规则一致性保证强一致无崩溃恢复能力强一致理论严谨强一致有严格的安全规则保证全局顺序一致性专为协调场景优化日志提交规则全票通过才提交过半接受即提交当前Term日志过半复制才提交旧Term日志需伴随当前Term日志提交任意Term的日志过半复制即可直接提交实现难度极低极高低规范明确中等专属场景定制适用场景短链路低并发分布式事务理论场景极少工业落地通用分布式系统存储/配置/服务发现等Zookeeper分布式协调服务3.2 高频必考对比拆解1. 2PC/3PC vs Raft/Paxos/ZAB 本质区别2PC/3PC是原子提交协议仅解决分布式事务的原子性问题无容错能力、无崩溃恢复、单点核心仅适用于封闭的事务场景Raft/Paxos/ZAB是通用分布式一致性协议解决分布式系统的状态机复制问题有强容错能力、Leader选举、崩溃恢复机制适用于大规模分布式系统是工业界的主流选择2. Raft vs Paxos 核心区别维度RaftPaxos设计目标可理解性优先工程化落地为核心理论严谨性优先无工程化约束角色划分边界清晰仅3种角色职责固定角色灵活无强制职责划分Leader机制强制唯一Leader是协议的核心有严格的选举规则Leader是Multi-Paxos的优化选项无强制选举规范日志规范有严格的日志匹配特性Leader强制覆盖Follower冲突日志规范明确无明确的日志复制、冲突解决规范不同实现差异极大安全性安全规则明确可直接落地仅理论安全工程化需自行补充大量安全逻辑3. Raft vs ZAB 核心区别高频考点维度RaftZAB设计目标通用状态机复制适配全场景分布式系统专为分布式协调服务设计核心保证全局事务顺序一致性序号机制日志Index全局单调递增Leader换届不重置ZXID低32位事务序号Leader换届后重置为0日志提交规则不能直接提交旧Term的日志需伴随当前Term日志提交可直接提交旧Epoch的、已过半复制的日志读一致性默认Follower读可能读到旧数据线性一致性读需Leader/ReadIndex/租约机制默认提供顺序一致性读线性一致性读需主动调用sync()角色设计无只读角色Follower必须参与投票新增Observer只读角色不参与投票可无损提升读性能适用范围全场景通用工业界落地最广仅适配Zookeeper协调场景无其他大规模落地四、2026年Raft协议 必考考点清单基础必背考点Raft的三大核心子问题Leader选举、日志复制、安全性Raft的三大角色、任期Term的核心作用Raft的日志条目结构、日志匹配特性Raft的已提交定义、过半投票机制的核心作用高频核心考点Leader选举的触发条件、完整流程、随机超时时间的作用Raft的投票安全规则为什么能保证新Leader一定包含所有已提交的日志日志复制的完整流程Follower日志冲突的解决方式Raft的提交限制规则为什么不能直接提交旧Term的日志Raft如何解决网络分区、脑裂问题任期机制、过半投票、心跳校验快照压缩的核心作用、实现逻辑集群成员变更的核心风险单节点变更方案的原理Raft线性一致性读的实现方案Leader读、ReadIndex、LeaseReadRaft与Paxos、ZAB的核心区别易错考点❌ 错误Raft的Leader可以修改已提交的日志✅ 正确Raft仅支持日志追加Leader绝不修改/删除已提交的日志❌ 错误日志被过半复制就一定会被提交✅ 正确只有当前Term的日志被过半复制才会被直接提交旧Term的日志需伴随当前Term的日志一起被过半复制才能被提交❌ 错误节点可以给日志比自己旧的Candidate投票✅ 正确节点只会给日志比自己更新的Candidate投票保证选举安全性❌ 错误旧Leader恢复后会覆盖新Leader的日志✅ 正确旧Leader恢复后发现自身Term更小会自动转为Follower同步新Leader的日志不会修改已提交的数据五、工业界选型总结2PC/3PC仅适用于短链路、低并发的分布式事务场景如跨库事务高可用分布式系统不推荐使用Paxos仅适用于对理论严谨性要求极高、有充足技术实力自研的场景目前已基本被Raft替代Raft通用分布式一致性场景的首选方案适配分布式存储、配置管理、服务发现、分布式锁等绝大多数场景生态成熟、实现简单、工业界验证充分ZAB仅适用于Zookeeper分布式协调服务其他场景无落地价值

更多文章