Java架构师丨再不懂ZooKeeper,就安安心心把这篇文章看完( 四 )


Follower 和 Observer 唯一的区别在于 Observer 机器不参与 Leader 的选举过程,也不参与写操作的“过半写成功”策略,因此 Observer 机器可以在不影响写性能的情况下提升集群的读性能 。

Java架构师丨再不懂ZooKeeper,就安安心心把这篇文章看完

文章插图
 
七、ZooKeeper & ZAB 协议 & Paxos 算法Ⅰ.ZAB 协议 & Paxos 算法
Paxos 算法可以说是 ZooKeeper 的灵魂了 。但是,ZooKeeper 并没有完全采用 Paxos 算法,而是使用 ZAB 协议作为其保证数据一致性的核心算法 。
另外,在 ZooKeeper 的官方文档中也指出,ZAB 协议并不像 Paxos 算法那样,是一种通用的分布式一致性算法,它是一种特别为 ZooKeeper 设计的崩溃可恢复的原子消息广播算法 。
Ⅱ.ZAB 协议介绍
ZAB(ZooKeeper Atomic Broadcast 原子广播)协议是为分布式协调服务 ZooKeeper 专门设计的一种支持崩溃恢复的原子广播协议 。
在 ZooKeeper 中,主要依赖 ZAB 协议来实现分布式数据一致性,基于该协议,ZooKeeper 实现了一种主备模式的系统架构来保持集群中各个副本之间的数据一致性 。
Ⅲ.ZAB 协议两种基本的模式
ZAB 协议包括两种基本的模式,分别是崩溃恢复和消息广播 。
当整个服务框架在启动过程中,或是当 Leader 服务器出现网络中断、崩溃退出与重启等异常情况时,ZAB 协议就会进入恢复模式并选举产生新的 Leader 服务器 。
当选举产生了新的 Leader 服务器,同时集群中已经有过半的机器与该 Leader 服务器完成了状态同步之后,ZAB 协议就会退出恢复模式 。
其中,所谓的状态同步是指数据同步,用来保证集群中存在过半的机器能够和 Leader 服务器的数据状态保持一致 。
当集群中已经有过半的 Follower 服务器完成了和 Leader 服务器的状态同步,那么整个服务框架就可以进人消息广播模式了 。
当一台同样遵守 ZAB 协议的服务器启动后加入到集群中时,如果此时集群中已经存在一个 Leader 服务器在负责进行消息广播 。
那么新加入的服务器就会自觉地进人数据恢复模式:找到 Leader 所在的服务器,并与其进行数据同步,然后一起参与到消息广播流程中去 。
正如上文介绍中所说的,ZooKeeper 设计成只允许唯一的一个 Leader 服务器来进行事务请求的处理 。
Leader 服务器在接收到客户端的事务请求后,会生成对应的事务提案并发起一轮广播协议 。
而如果集群中的其他机器接收到客户端的事务请求,那么这些非 Leader 服务器会首先将这个事务请求转发给 Leader 服务器 。
八、总结通过阅读本文,想必大家已从以下这七点了解了 ZooKeeper:
  • ZooKeeper 的由来
  • ZooKeeper 到底是什么
  • ZooKeeper 的一些重要概念(会话(Session)、Znode、版本、Watcher、ACL)
  • ZooKeeper 的特点
  • ZooKeeper 的设计目标
  • ZooKeeper 集群角色介绍(Leader、Follower 和 Observer 三种角色)
  • ZooKeeper & ZAB 协议 & Paxos 算法
写在最后比你优秀的对手在学习,你的仇人在磨刀,你的闺蜜在减肥,隔壁老王在练腰,我们必须不断学习,否则我们将被学习者超越!
趁年轻,使劲拼,给未来的自己一个交代!




推荐阅读