ZooKeeper其他特性!

序列化机制

ZooKeeper 采用了Jute 作为 ZooKeeper 的序列化方式。

在 ZooKeeper 中默认的序列化实现方式是 Binary 二进制方式。

  • 二进制具有更好的性能,以及大多数平台对二进制的实现都不尽相同。

Watch机制

通过 Watch 机制来订阅当服务器上某一节点的数据或状态发生变化时收到相应的通知。

一个对象或者数据节点可能会被多个客户端监控,当对应事件被触发时,会通知这些对象或客户端。

  • Watch 机制理解为是分布式环境下的观察者模式。

Watch 事件的触发机制取决于会话的连接状态和客户端注册事件的类型。

  • 当客户端会话状态或数据节点发生改变时,都会触发对应的 Watch 事件。

Watch是一次性的,当我们获得服务器通知后要再次添加 Watch 事件。

悲观锁

通过进程创建 ZooKeeper 节点 /locks 的方式获取锁。

线程 a 通过成功创建 ZooKeeper 节点/locks的方式获取锁后继续执行。

这时进程 b 也要访问临界区资源,于是进程 b 也尝试创建/locks节点来获取锁。

因为之前进程 a 已经创建该节点,所以进程 b 创建节点失败无法获得锁。

乐观锁

在 ZooKeeper 中的 version 属性可以用来实现乐观锁机制中的 校验。

ZooKeeper 每个节点都有数据版本的概念,在调用更新操作的时候。

假如有一个客户端试图进行更新操作,它会携带上次获取到的 version 值进行更新。

如果在这段时间内,ZooKeeper 服务器上该节点的数值恰好已经被其他客户端更新了。

那么其数据版本一定也会发生变化,因此肯定与客户端携带的 version 无法匹配,便无法成功更新。