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的消息。
基本原则