ZooKeeper简介
ZooKeeper是一个分布式应用程序协调服务,主要用于解决分布式集群中应用系统的一致性问题。它能提供类似文件系统的目录节点树方式的数据存储,主要用途是维护和监控所存数据的状态变化,以实现对集群的管理。
ZooKeeper应用场景:
统一命名
配置管理
集群管理
共享锁
队列管理
ZooKeeper架构
ZooKeeper集群的总体架构如下图:
ZooKeeper数据模型
ZooKeeper拥有树形层次的数据模型,与标准的文件系统非常相似,ZooKeeper树中的每个节点被称为Znode。
Znode的主要特点如下:
(1) Znode中仅存储与同步相关的数据,因此数据量很小,大概B到KB量级,例如状态信息、配置内容、位置信息等。
(2) 一个Znode维护一个状态结构,包括:版本号、ACL(访问控制列表)变更、时间戳。Znode存储的数据每次发生变化,版本号都会递增,这样客户端就可以基于版本号检索相关数据。
(3) 每个Znode都有一个ACL,用来限定该Znode可以被何种请求访问。 客户端可以在Znode上设置一个观察者(Watcher),如果该Znode上的数据发生变更,ZooKeeper就会通知客户端,从而触发观察者中实现的逻辑的执行。
ZooKeeper节点类型
ZooKeeper中节点主要有四种类型:
持久节点(PERSISTENT)
持久顺序节点( PERSISTENT _SEQUENTIAL)
临时节点(EPHEMERAL)
临时顺序节点( EPHEMERAL _SEQUENTIAL )
ZooKeeper观察者模式
ZooKeeper允许客户端向服务器注册一个观察者(Watcher),一旦服务器的状态发生变化,ZooKeeper就会通知已经在它上面注册的观察者做出相应的反应。 Watcher机制主要包括客户端线程、客户端WatchManager和ZooKeeper服务器三部分。
ZooKeeper分布式锁
在分布式环境下,为了保证数据的一致性,需要利用分布式锁技术来保证只有固定数量的进程对数据进行修改。只有获取锁的客户端可以对数据进行修改,其余客户端只能暂时等待。
ZooKeeper分布式锁机制的实现流程如下图: