zookeeper 入门系列

  • 时间:
  • 浏览:1

order

b. 该follower即准leader,将自身收到prepare但尚未提交的proposal提交

确保最好的办法:

确保最好的办法:

ZooKeeper学习第七期–ZooKeeper一致性原理 http://www.cnblogs.com/sunddenly/p/4138550.html

c. 在选举阶段准leader但会 能拿到其余follower的所有事务集合,于是准leader根据各个follower的事务执行状态,分别建立队列,先发送prepare请求,再发送commit请求,让所有follower都同步到与leader一样的状态。

2.错综复杂度问题。base-paxos协议中还处于从前那样的问题,于是各种变种paxos冒出了,比如为了补救活锁问题,冒出了multi-paxos;为了补救通信次数较多的问题,冒出了fast-paxos;为了尽量减少冲突,冒出了epaxos。都须要看多,工业级实现须要考虑更多的方面,诸如性能,异常等等。这也是怎样才能会一点分布式的一致性框架无须真正基于paxos来实现的原应。

处于场景:leader收到请求,包装为proposal,此时网络挂了但会 leader挂了原应一点follower没收到请求,此时进入崩溃恢复阶段,此时一点follower选主并成功事先这些挂了 的leader以follower的身份加入,此时它有有一个 多余的proposal,与一点节点不一致。

都须要考虑一下,但会 leader在崩溃恢复阶段就满血复活了,此时集群的状态是什么样的。 

For high-performance, it is important that 

广播的过程实际上类式于于二阶段提交,但会 但会 实现删剪的两阶段提交,那就补救了一致性问题,没必要创造创造发明新协议了,也不我zab实际上被抛弃了两阶段提交的事务回滚,于是一台follower不还不能回复ACK但会 干脆就不回复了,leader假如有一天收到过半的机器回复即通过proposal。但会 从前的设计就处于也不我问题,比如但会 有一个 follower但会 网络问题从头到尾老要没收到过leader的proposal,后续的询问刚好落到这台follower上该怎样才能补救?比如leader第一阶段收到了所有follower的ACK后提交,但会 通知一点follower提交,这时所有人挂了该怎样才能补救?于是诞生了崩溃恢复阶段,旨在对各种不一致状态做出恢复和补救。

a. 重新选举leader时只选用zxid最大的follower。但会 大约半数的follower曾今回复ACK,原应重新选举时zxid最大的follower应该是当初回复ACK但尚未提交的其中一台。

order.

ZooKeeper can handle multiple outstanding state changes requested by the client and 

通过以上最好的办法,不能确保提交过的proposal不要 冒出丢弃的状态。

paxos采用的最好的办法是leader选举(不还不能 采用主备,但会 主备过于固定,过低分布式)。leader选举就必然冒出状态不一致的状态,于是不是着同步从前的过程。

基于以上什么原应,zookeeper并不还不能 用paxos作为所有人实现的协议,取而代之采用了一种生活称为zab的协议,全称是zookeeper atomic broadcast。下面简单介绍一下zab协议。

处于场景:leader发送了proposal,follower1和follower2回复了ACK给leader,leader向所有follower发送commit请求并commit自身,此时leader挂了。leader但会 提交,但会 follower尚未提交,这会处于不一致的状态。

1.活锁问题。在base-paxos算法中,不处于leader从前的角色,于是处于从前一种生活状态,即P1提交了有一个 proposal n1但会 通过了prepare阶段;此时P2提交了有一个 proposal n2(n2>n1)但会 也通过了prepare阶段;P1在commit时但会 但会 通过了n2而被拒绝;于是P1继续提交有一个 proposal n3但会 通过prepare阶段;巧的是此时P2刚现在开始了了commit了,但会 n2

3.全序问题。对于paxos算法来说,不还不能保证两次提交最终的顺序,而zookeeper须要做到这点,都须要参考文献1。

ZooKeeper’s atomic broadcast protocol:Theory and practice  http://www.tcs.hut.fi/Studies/T-79.501/reports/2012-deSouzaMedeiros.pdf

that a prefix of operations submitted concurrently are committed according to FIFO 

分布式系统理论进阶 – Raft、Zab http://www.cnblogs.com/bangerlee/p/5991417.html

0. leader选举阶段。当集群中不还不能 leader但会 所有人感受不还不能leader不是进入这些阶段,这些阶段的主要目的是选出zxid最大的节点作为准leader。

ZooKeeper之ZAB协议 http://www.solinx.co/archives/435

Zookeeper ZAB 协议分析 http://blog.xiaohansong.com/2016/08/25/zab/

上端说过了,paxos处于活锁问题,为了补救活锁问题,zab引入了leader,但会 单leader也不我 赤裸裸的单点问题,怎样才能补救这些单点呢?

参考

ZooKeeper can handle multiple outstanding state changes requested by the client and 

1. recovery阶段。本阶段的主要目的是根据准leader的状态将数据同步到一点节点。同步完成后准leader变为leader。

For high-pZooKeepererformance, it is important that 

Zab协议 http://www.cnblogs.com/sunddenly/articles/4073157.html

zab协议分为有一个 阶段,即阶段0为leader选举,阶段1为发现,阶段2为同步,阶段3为广播。而实际实现时将发现及同步阶段合并为有一个 恢复阶段。

that a prefix of operations submitted concurrently are committed according to FIFO 

对于选举和恢复阶段。zab算法须要确保两件事。

Zab vs. Paxos https://cwiki.apache.org/confluence/display/ZooKeeper/Zab+vs.+Paxos

上一章讨论了paxos算法,把paxos推到有一个 很高的位置。但会 ,paxos有不还不能 什么问题呢?实际上,paxos还是有其自身的缺点的:

ZAB协议和Paxos算法 http://codingo.xyz/index.php/2016/12/27/zab_paxos/

Zab:Zookeeper 中的分布式一致性协议介绍http://www.jianshu.com/p/fb527a64deee

通过zxid的大小不能直接选用。zxid的编码最好的办法为高32位为epoch(即纪元,都须要理解为代),低32位为每个proposal顺序递增的数字。每次变换有一个 leader,则epoch加一,都须要理解为改朝换代了,从前,新朝代的zxid必然比旧朝代的zxid大,新代的leader都须要要求将旧朝代的proposal清除。

1.但会 补救过的proposal不还不能被丢弃

2.但会 丢弃的proposal不还不能被重复补救

2. broadcast阶段。本阶段的主要目的是leader收到请求,并将请求转为proposal,一点节点根据协议进行批准或通过。broadcast阶段事实上也不我 有一个 两阶段提交的错综复杂版。其所有过程都跟两阶段提交一致,唯一不一致的是不还不能做事务的回滚。