网站文案优化,简单搜索网页代码,网站建设基本步骤顺序,图片在线处理工具zk的ZAB原子广播协议来源于paxos算法[1]。paxos算法是一种基于消息传递的消息一致性算法#xff0c;其特点是在可靠的通信环境下#xff0c;可以保证消息的最终一致性。paxos要求每台server都持有自己的一个事务id的记录#xff0c;这个事务id会每通过一个提议就自增加一其特点是在可靠的通信环境下可以保证消息的最终一致性。paxos要求每台server都持有自己的一个事务id的记录这个事务id会每通过一个提议就自增加一并可以通过事务id来判断提议是否应该投票如果提议的事务id小于当前自己记录的事务id那么就不投票。不过paxos中没有leader的概念每个server之间都是平等的为了简化或者说优化paxoszk中有了Leader的概念最终是否投票通过由leader最终决定。
那么zk的zab协议是如何运作的呢介绍如下。
1、zk正常工作
对于一个客户端来说如果需要进行写操作他连上的server可以是follower或者leader但不能是observer。假设连上的是一个follower当client向follower发送一个写命令后follower会将命令发送给leader。leader会将这个命令发送给所有的follower将数据写入到每台server中最终达到最终一致性。那么如何做的呢
leader会广播给所有的follower让它们写日志如果拿到的回复是OK的超过了一半那么就会进行下一步。 广播给所有的follower写命令将数据写入内存。
zk leader内部存在队列对于每一个follower都会有一个队列与之对应。队列的先进先出的特性使得follower从leader拿到的事务id的顺序性有了保证而队列自身可以保证消息的最终一致性也就是说如果推送不到会一直努力推送最终使得消息被推送到再进行下个消息的推送。
如果有一些follower因为如网络因素在向磁盘中写入日志时没有回复ok如果总投票超过一半那么对第二步没有影响。如果是在write时没有回复ok只要超过一半其实对后面的其他操作也是没什么影响的只是连接到这台follower的client拿到的数据可能会是旧的数据如果有需要可以加sync命令拿到最新的数据。
2、zk选举
zk在leader挂掉后会有一个短暂的不可用的时间。这段时间用于zk内部选举只有follower身份的zk节点才能参与选举obserber是没有选举权力的这样是为了快速决定出zk leader。
总得来说选举的原则是1、要选择事务id最大的事务id最大表示数据最完整。2、如果事务id最大的有不止一个那么在这些节点中选择myid最大的作为leader。
参考文章 [1]Zookeeper全解析——Paxos作为灵魂