Zookeeper的工作原理,Zookeeper 的通知机制是什么?

工作原理

Zookeeper 的核心是原子广播,这个机制保证了各个 Server之间的同步。实现这个机制的协议叫做Zab协议。Zab 协议有两种模式,它们 分别是恢复模式(选主)和广播模式(同步)。
Zab 协议 的全称是 Zookeeper Atomic Broadcast** Zookeeper 原子广播)。 Zookeeper 是通过Zab 协议来保证分布式事务的最终一致性。 Zab 协议要求每个 Leader 都要经历三个阶段:发现,同步,广播。当服务启动或者在领导者崩溃后,Zab 就进入了恢复模式,当领导者被选举出来,且大多数 Server完成了和 leader 的状态同步以后,恢复模式就结束了。状态同步保证了 leader Server 具有相同的系统状态。为了保证事务的顺序一致性,zookeeper 采用了递增的事务 id 号( zxid )来标识事务。所有的提议(proposal )都在被提出的时候加 上了 zxid 。实现中 zxid 是一个 64 位的数字,它高 32 位是 epoch 用来标识leader 关系是否改变,每次一个 leader 被选出来,它都会有一 个新的 epoch ,标识当前属于那个leader 的统治时期。低 32 位用于递增计数。epoch:可以理解为皇帝的年号,当新的皇帝 leader 产生后,将有一个新的 epoch 年号。
每个 Server 在工作过程中有三种状态:
  • LOOKING:当前Server不知道leader是谁,正在搜寻。
  • LEADING:当前Server即为选举出来的leader
  • FOLLOWINGleader已经选举出来,当前Server与之同步。

通知机制

Zookeeper 允许客户端向服务端的某个 znode 注册一个 Watcher 监听,当服务端的一些指定事件触发了这个 Watcher ,服务端会向指定客户端发送一个事件通知来实现分布式的通知功能,然后客户端根据 Watcher 通知状态和事件类型做出业务上的改变。
大致分为三个步骤:
  • 客户端注册 Watcher
    1、调用 getDatagetChildrenexist 三个 API ,传入Watcher 对象。
    2
    、标记请求request ,封装 Watcher WatchRegistration
    3
    、封装成 Packet 对象,发服务端发送request 。
    4
    、收到服务端响应后,将 Watcher 注册到 ZKWatcherManager 中进行管理。
    5
    、请求返回,完成注册。
  • 服务端处理 Watcher
    1、服务端接收Watcher 并存储。
    2
    Watcher 触发
    3
    、调用 process 方法来触发 Watcher
  • 客户端回调 Watcher
    1,客户端 SendThread 线程接收事件通知,交由 EventThread 线程回调Watcher
    2
    ,客户端 Watcher 机制同样是一次性的,一旦被触发后,该 Watcher 就失效了。
client 端会对某个 znode 建立一个 watcher 事件,当该 znode 发生变化时,这些 client 会收到 zk 的通知,然后 client 可以根据 znode 变化来做出业务上的改变等。

Zookeeper 对节点的 watch 监听通知是永久的吗?

不是, 一次性 的。无论是服务端还是客户端,一旦一个 Watcher 被触发, Zookeeper 都会将其从相应的存储中移除。这样的设计有效的减轻了服务端的压力,不然对于更新非常频繁的节点,服务端会不断的向客户端发送事件通知,无论对于网络还是服务端的压力都非常大。

Zookeeper 集群中有哪些角色?

在一个集群中,最少需要 3 台。或者保证 2N + 1 台,即奇数。为什么保证奇数?主要是为了选举算法。

Zookeeper 集群中Server有哪些工作状态?

  • LOOKING
    寻找 Leader 状态;当服务器处于该状态时,它会认为当前集群中没有 Leader ,因此需要进入Leader 选举状态
  • FOLLOWING
    跟随者状态;表明当前服务器角色是 Follower
  • LEADING
    领导者状态;表明当前服务器角色是 Leader
  • OBSERVING
    ​​​​​​​观察者状态;表明当前服务器角色是 Observer
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值