天天看点

中间件随笔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保证的是分布式下主从复制的一致性、顺序性,不说了,来张图:   

中间件随笔2-ZooKeeper概述

  再来张状态转换图:

中间件随笔2-ZooKeeper概述

  状态转换在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起来也还好。

  再来张图,凑凑版面

中间件随笔2-ZooKeeper概述

继续阅读