引言
《分布式系统理论进阶 - Paxos》介绍了一致性协议Paxos,今天我们来学习另外两个常见的一致性协议——Raft和Zab。通过与Paxos对比,了解Raft和Zab的核心思想、加深对一致性协议的认识。
Raft
Paxos偏向于理论、对如何应用到工程实践提及较少。理解的难度加上现实的骨感,在生产环境中基于Paxos实现一个正确的分布式系统非常难[1]:
Raft[2][3]在2013年提出,提出的时间虽然不长,但已经有很多系统基于Raft实现。相比Paxos,Raft的买点就是更利于理解、更易于实行。
为达到更容易理解和实行的目的,Raft将问题分解和具体化:Leader统一处理变更操作请求,一致性协议的作用具化为保证节点间操作日志副本(log replication)一致,以term作为逻辑时钟(logical clock)保证时序,节点运行相同状态机(state machine)[4]得到一致结果。Raft协议具体过程如下:
- Client发起请求,每一条请求包含操作指令
- 请求交由Leader处理,Leader将操作指令(entry)追加(append)至操作日志,紧接着对Follower发起AppendEntries请求、尝试让操作日志副本在Follower落地
- 如果Follower多数派(quorum)同意AppendEntries请求,Leader进行commit操作、把指令交由状态机处理
- 状态机处理完成后将结果返回给Client
指令通过log index(指令id)和term number保证时序,正常情况下Leader、Follower状态机按相同顺序执行指令,得出相同结果、状态一致。
宕机、网络分化等情况可引起Leader重新选举(每次选举产生新Leader的同时,产生新的term)、Leader/Follower间状态不一致。Raft中Leader为自己和所有Follower各维护一个nextIndex值,其表示Leader紧接下来要处理的指令id以及将要发给Follower的指令id,LnextIndex不等于FnextIndex时代表Leader操作日志和Follower操作日志存在不一致,这时将从Follower操作日志中最初不一致的地方开始,由Leader操作日志覆盖Follower,直到LnextIndex、FnextIndex相等。
Paxos中Leader的存在是为了提升决议效率,Leader的有无和数目并不影响决议一致性,Raft要求具备唯一Leader,并把一致性问题具体化为保持日志副本的一致性,以此实现相较Paxos而言更容易理解、更容易实现的目标。
Zab
Zab[5][6]的全称是Zookeeper atomic broadcast protocol,是Zookeeper内部用到的一致性协议。相比Paxos,Zab最大的特点是保证强一致性(strong consistency,或叫线性一致性linearizable consistency)。
和Raft一样,Zab要求唯一Leader参与决议,Zab可以分解成discovery、sync、broadcast三个阶段:
- discovery: 选举产生PL(prospective leader),PL收集Follower epoch(cepoch),根据Follower的反馈PL产生newepoch(每次选举产生新Leader的同时产生新epoch,类似Raft的term)
- sync: PL补齐相比Follower多数派缺失的状态、之后各Follower再补齐相比PL缺失的状态,PL和Follower完成状态同步后PL变为正式Leader(established leader)
- broadcast: Leader处理Client的写操作,并将状态变更广播至Follower,Follower多数派通过之后Leader发起将状态变更落地(deliver/commit)
Leader和Follower之间通过心跳判别健康状态,正常情况下Zab处在broadcast阶段,出现Leader宕机、网络隔离等异常情况时Zab重新回到discovery阶段。
了解完Zab的基本原理,我们再来看Zab怎样保证强一致性,Zab通过约束事务先后顺序达到强一致性,先广播的事务先commit、FIFO,Zab称之为primary order(以下简称PO)。实现PO的核心是zxid。
Zab中每个事务对应一个zxid,它由两部分组成:<e, c>,e即Leader选举时生成的epoch,c表示当次epoch内事务的编号、依次递增。假设有两个事务的zxid分别是z、z',当满足 z.e < z'.e 或者 z.e = z'.e && z.c < z'.c 时,定义z先于z'发生(z < z')。
为实现PO,Zab对Follower、Leader有以下约束:
- 有事务z和z',如果Leader先广播z,则Follower需保证先commit z对应的事务
- 有事务z和z',z由Leader p广播,z'由Leader q广播,Leader p先于Leader q,则Follower需保证先commit z对应的事务
- 有事务z和z',z由Leader p广播,z'由Leader q广播,Leader p先于Leader q,如果Follower已经commit z,则q需保证已commit z才能广播z'
第1、2点保证事务FIFO,第3点保证Leader上具备所有已commit的事务。
相比Paxos,Zab约束了事务顺序、适用于有强一致性需求的场景。
Paxos、Raft、Zab再比较
除Paxos、Raft和Zab外,Viewstamped Replication(简称VR)[7][8]也是讨论比较多的一致性协议。这些协议包含很多共同的内容(Leader、quorum、state machine等),因而我们不禁要问:Paxos、Raft、Zab和VR等分布式一致性协议区别到底在哪,还是根本就是一回事?[9]
Paxos、Raft、Zab和VR都是解决一致性问题的协议,Paxos协议原文倾向于理论,Raft、Zab、VR倾向于实践,一致性保证程度等的不同也导致这些协议间存在差异。下图帮助我们理解这些协议的相似点和区别[10]:
相比Raft、Zab、VR,Paxos更纯粹、更接近一致性问题本源,尽管Paxos倾向理论,但不代表Paxos不能应用于工程。基于Paxos的工程实践,须考虑具体需求场景(如一致性要达到什么程度),再在Paxos原始语意上进行包装。
小结
以上介绍分布式一致性协议Raft、Zab的核心思想,分析Raft、Zab与Paxos的异同。实现分布式系统时,先从具体需求和场景考虑,Raft、Zab、VR、Paxos等协议没有绝对地好与不好,只是适不适合。
[1] Paxos made live - An engineering perspective, Tushar Chandra, Robert Griesemer and Joshua Redstone, 2007
[2] In Search of an Understandable Consensus Algorithm, Diego Ongaro and John Ousterhout, 2013
[3] In Search of an Understandable Consensus Algorithm (Extended Version), Diego Ongaro and John Ousterhout, 2013
[4] Implementing Fault-Tolerant Services Using the State Machine, Fred B. Schneider, 1990
[5] Zab:High-performance broadcast for primary-backup systems, FlavioP.Junqueira,BenjaminC.Reed,andMarcoSerafini, 2011
[6] ZooKeeper's atomic broadcast protocol: Theory and practice, Andr´e Medeiros, 2012
[7] Viewstamped Replication A New Primary Copy Method to Support Highly-Available Distributed Systems, Brian M.Oki and Barbar H.Liskov, 1988
[8] Viewstamped Replication Revisited, Barbara Liskov and James Cowling, Barbara Liskov and James Cowling ,2012
[9] Can’t we all just agree? The morning paper, 2015
[10] Vive La Difference: Paxos vs. Viewstamped Replication vs. Zab, Robbert van Renesse, Nicolas Schiper and Fred B. Schneider, 2014
http://www.cnblogs.com/bangerlee/p/5991417.html
相关推荐
分布式事务与一致性算法Paxos、Raft和ZAB是解决分布式系统中数据一致性的代表性算法,它们能够确保在网络分区、节点故障等异常情况下,系统依然能达成共识并保持数据的一致性。 首先,CAP原理是分布式计算中的基础...
- **ZAB协议**:Zookeeper Atomic Broadcast Protocol,是Zookeeper使用的原子广播协议,旨在提供高可用性的集群协调服务。 - **Raft协议**:另一种流行的分布式一致性算法,以其简洁性和易于理解而闻名。 - **状态...
之后的一些一致性算法基本都是在Paxos思路上的调整,例如 ZooKeeper的 ZAB 但Paxos算法一直被认为比较繁杂,很不好理解,大家对其调整优化,就是因为他的复杂 2013年,斯坦福的两个人以易懂为目标,设计了一致性算法...
该面试经历涵盖了大数据平台的基础架构、Hadoop升级、HDFS写数据过程、YARN和HDFS源码修改、Paxos算法、QJM和Bookkeeper、Hashmap和ConcurentHashMap、G1垃圾回收器、LRU算法、Kafka、Raft、ZAB和Paxos算法等方面的...
Paxos协议的复杂性和抽象性使得理解和实现都具有一定的挑战,但它是理解后续一致性算法如Raft的基础。 其次,ZooKeeper是Apache软件基金会开发的一个开源项目,它是一个分布式协调服务,为分布式应用提供了一致性的...
它基于ZAB协议(ZooKeeper Atomic Broadcast),实现了类似PAXOS的一致性模型。ZOOKEEPER的主要功能包括命名服务、配置管理、组服务、领导选举等,它简化了分布式环境中的许多复杂问题。在大数据领域,ZOOKEEPER常被...
此外,书中可能还会讨论其他的分布式一致性协议,如Raft,这是一种比Paxos更易理解的协议,同样能够保证系统的强一致性。Raft通过选举机制和日志复制来达成一致性,简化了Paxos的实现,使其更适合教学和实践。 总的...
Paxos 算法是一种经典的分布式一致性...Paxos算法虽然复杂,但它是解决分布式一致性问题的基础,对后来的Raft、ZAB等一致性算法产生了深远影响。理解并应用Paxos算法,对于构建大规模、高可用的分布式系统至关重要。
同时,书中还讨论了其他一致性算法,如Raft,对比分析了它们与Paxos的异同,帮助读者全面掌握分布式一致性算法的理论和实践。 总的来说,《从Paxos到Zookeeper-分布式一致性原理与实践》是一本深入浅出的分布式一致...
除了Paxos和Raft,一致性算法还包括其他多种实现,如ZAB(Zookeeper Atomic Broadcast)、Multi-Paxos、Viewstamped Replication等。这些算法在不同的场景下有着各自的优点和适用范围。例如,ZAB是Apache ZooKeeper...
ZooKeeper是另一个提及的系统,它具有与Paxos相似的特性,如领导者选举和提案编号,但它使用的是名为Zab的自定义协议,而非Paxos。 “谷三篇”——GFS、MapReduce和Bigtable的出现,极大地推动了分布式系统的发展,...
在实践中,ZooKeeper虽然具有与Paxos相似的特性,例如领导选举和提案号,但实际上它采用的是自己发明的Zab协议,而非Paxos协议本身。ZooKeeper是一个开源的分布式协调服务,广泛应用于分布式应用的配置管理、同步...
而强一致性则要求数据一旦被写入,后续的读操作都能获取到最新的值,比如Paxos、Raft和ZAB算法。 **强一致性算法**通常通过主从同步和多数派策略来实现。在主从同步复制中,主节点负责写操作,然后将更改同步到从...
一致行动协议通常涉及到多个步骤和算法,例如Paxos、Raft、Zab(Zookeeper原子广播协议)等。这些协议旨在解决分布式环境中的一致性问题,确保在节点之间存在网络延迟、故障或其他异常情况下,仍能正确地复制和同步...
分布式系统的实现需要利用一些分布式共识算法,包括但不限于Paxos、Zab和Raft。其中,Raft是最为流行的一种共识算法,具有易于理解的优点,因此在实际开发中得到了广泛的应用。 Raft算法包括几个核心概念,如领导者...
zookeeper简单介绍,分布一致性算法。 从单体服务到多服务部署讲起,为什么要引入微服务。引入后,出现的问题。 数据库隔离级别,CAP理论基础。...拜占庭问题,Paxos、Raft、ZAB(2PC)。 zookeeper安装,简单命令。
ZAB协议结合了Paxos和Raft的思想,采用ZXID作为事务编号,确保了事务的顺序性和原子性。ZXID由两部分组成:高32位表示epoch,代表Leader周期,低32位是单调递增的计数器。在崩溃恢复模式下,节点通过选举确定新的...
常见的选举算法有多种,如Zookeeper的ZAB协议、Raft一致性算法和Paxos协议等。这些算法的设计目标是保证选举过程的原子性、一致性以及最终的一致性状态。 ZAB(Zookeeper Atomic Broadcast)协议是Zookeeper的基础...