中间件随笔2-ZooKeeper概述

   分布式环境下的操作,比如说2PC,但是这种方式代价高,生产上这种解决方案也少;
   描述下需求(抄的):提出的Vote才被选定、只有一个Vote呗选定、某个Vote选定,所有参与者都能获得这个信息。

   paxos协议,那个从paxos到zook,看看那些证明 脑袋疼;不过redis的sentinel选举,看起来蛮清楚。条件1,你不提还能选?条件2:要有一个统一的规则,比如sentinel选举就是先到先得,zook选举是zxid-myid的比较,个体内不会出现多个成功者的情况;半数以上同意才算选定,保证多个参与者也不会出现多个成功者的情况。条件3:zook里准leader会发送newepoch,来通知并确认自己的领导地位。

  书上说zook的zab是paxos的应用,呵呵,zab保证的是分布式下主从复制的一致性、顺序性,不说了,来张图:   
   

  再来张状态转换图:

  

  状态转换在QuorumPeer这个类里,那个选举可以参照LeaderElection的实现,具体算法是:
  选举:同leader周期epoch,数据最新zxid的,或myid最大的当选,半数以上产生准leader,准leader发送newepoch,半数ack结束选举;
  同步:主数据最新,其他diff差异;旧主恢复,zxid已增长,全量同步;旧主恢复,zxid未增长,truc以前数据。
  广播:leader接受follower请求,发送proposal,半数同意则commit,注意follower按照zxid顺序执行。

  那个,zookeeper的核心就是zab协议,至于数据结构参照ZKDatabase、DataTree、PathTrie、DataNode,追加日志、内存快照参照FileTxnSnapLog、FileSnap,Leader、Follower、Observer,以及相关的RequestProcessor调用链,资料不少,源码debug起来也还好。

  再来张图,凑凑版面

    

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值