ZAB协议


基本概念


  • Paxos算法: 是一种通用的分布式一致性算法
  • ZAB协议: 是一种特别为Zookeeper设计的崩溃恢复的原子消息广播算法
  • Paxos算法是Zookeeper的灵魂,但是Zookeeper并不是完全采用Paxos算法,而是使用ZAB协议作为Zookeeper保证数据一致性的核心算法

ZAB协议


  • ZAB协议: Zookeeper Atomic Broadcast
  • 是为分布式协调服务Zookeeper专门设计的一种支持崩溃恢复的原子广播协议
  • Zookeeper中,主要依赖ZAB协议来实现分布式数据一致性
  • 基于ZAB协议 ,Zookeeper实现了一种主备模式的系统架构来保证集群中各个副本之间的数据一致性

ZAB协议两种模式

  • ZAB协议包含两种基本模式:

  • 崩溃恢复
  • 消息广播

崩溃恢复


  • 当整个服务框架在启动过程中,或者是当Leader服务器出现网络中断,崩溃退出以及重启等异常情况时 ,ZAB协议就会进入恢复模式并选举产生新的Leader服务器
  • 当选举产生新的Leader服务器,同时集群中已经有过半的机器与该Leader服务器完成状态同步之后 ,ZAB协议就会退出恢复模式
  • 状态同步: 是指数据同步,用来保证集群中存在过半的机器能够和Leader服务器的数据状态保持一致

消息广播


  • 当整个集群中已经有过半的Follower服务器完成和Leader服务器的状态同步,那么整个Zookeeper服务框架就可以进入消息广播模式
  • 当一台新的ZAB协议的服务器加入到集群中时,如果此时集群中已经存在一个Leader服务器在负责进行消息广播时,新加入的服务器会自动进入数据恢复模式: 即寻找Leader服务器,并与Leader服务器进行数据同步,然后一起参与到消息广播的流程中

Zookeeper架构总结


  • Zookeeper本身是一个分布式程序,只要Zookeeper集群中半数以上的节点正常运行 ,Zookeeper集群就能正常服务
  • 为了保证高可用,推荐以集群的形态部署Zookeeper,Zookeeper集群可以容忍一定的机器故障,只要集群中大部分机器是可用的,那么Zookeeper本身依然是可用的
  • Zookeeper将数据保存在内存中,这样保证了集群的高吞吐量和低延迟. 但是内存限制了Zookeeper能够存储的数据容量,这也是要保持znode中较小的数据量的原因
  • Zookeeper是高性能的. 尤其在读多于写的应用程序中表现更好.因为写会导致所有的服务器间的同步,读多于写是分布式协调服务的典型场景
  • Zookeeper中有临时节点. 当创建临时节点的客户端会话session一直保持活动时,临时节点就会一直存在. 当客户端会话session终结时,临时节点就会被删除. 持久节点是指一旦这个节点znode创建后,除非主动进行节点znode的删除操作,否则这个节点znode将会一直保存在Zookeeper
  • Zookeeper的两个基本功能:

  • 管理应用程序提交的数据,包括对数据的存储和读取
  • 为应用程序提供数据节点的监听服务