zookeeper 主要依赖ZAB协议来实现分布式数据的一致性。 ==== 基本特性(proposal流程) ==== * 所有事物必须由一个全局唯一的服务器来协调处理,这个服务器就是leader,剩下的服务器叫follower。leader负责将一个客户的请求转换成一个事物proposal(提议),并将该proposal分发给所有的follower服务器,并等待所有follower服务器的反馈,一旦有超过半数的follower给出了正确反馈,那leader会再次向所有的follower分发commit消息,要求将这个proposal提交。 * 如果client的请求发送到follower上,follower会转发给lead * 正常情况下zab处于广播模式,当leader挂了之后,zab会进入恢复模式并选举出新leader,新leader必须获得超过半数的follower的支持。当新leader被选取出来之后,且超过半数的follower和leader同步之后,zab协议就开始进入广播模式了。 * 每个follower都有一个顺序队列用来存放leader的通知消息。保证follower顺序处理所有leader的消息。 ==== 基本原则 ==== * 已经在leader上提交的事务,最终会被所有follower提交 * 如果leader在发出commit命令之后挂了,所有的follower也会commit这个事务 * 在leader提出但因为故障没有提交的事务,最终都不会在follower提交 * 当该leader,以follower的角色恢复时,会被新leader通知回退那个只有它提交了的那个事务。