从Paxos到zookeeper

Zookeeper如何实现数据一致性

Zookeeper使用ZAB算法实现,Zookeepr并没有完全采用Paxos算法,而是使用原子广播协议,(Zookeeper Atomic Broadcast)
三个阶段:发现,同步和广播
ZAB保证了同一时刻只能有一个主进程来进行状态变更

协议过程
选举leader

每个follower广播自己事务队列中最大事务编号maxId
获取集群中其他follower发出来的maxId,选取出最大的maxId所属的follower,投票给改follower,选它为leader。
统计所有投票,获取投票数超过一半的follower被推选为leader

同步数据

各个follower向leader发送自己保存的任期E
leader,比较所有的任期,选取最大的E,加1后作为当前的任期E=E+1
将任务E广播给所有follower
follower将任期改为leader发过来的值,并且返回给leader事务队列L
leader从队列集合中选取任期最大的队列,如果有多个队列任期都是最大,则选取事务编号n最大的队列Lmax。将Lmax最为leader队列,并且广播给各个follower。
follower接收队列替换自己的事务队列,并且执行提交队列中的事务。
至此各个节点的数据达成一致,zookeeper恢复正常服务。

广播

leader节点接收到请求,将事务加入事务队列,并且将事务广播给各个follower。
follower接收事务并加入都事务队列,然后给leader发送准备提交请求。
leader 接收到半数以上的准备提交请求后,提交事务同时向follower 发送提交事务请求
follower提交事务。

Zookeeper分布式锁实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值