ZooKeeper基础

一、基础结构

1 ZNode

Zookeeper的数据节点称为ZNode,ZNode是Zookeeper中数据的最小单元,每个ZNode都可以保存数据,同时还可以挂载子节点。

1.1 ZNode 分类

持久节点(PERSISTENT):节点创建后便一直存在于Zookeeper服务器上,直到有删除操作来主动清除该节点。

持久顺序节点(PERSISTENT_SEQUENTIAL):相比持久节点,其新增了顺序特性,每个父节点都会为它的第一级子节点维护一份顺序,用于记录每个子节点创建的先后顺序。在创建节点时,会自动添加一个数字后缀,作为新的节点名,该数字后缀的上限是整形的最大值。

临时节点(EPEMERAL):临时节点的生命周期与客户端会话绑定,客户端失效,节点会被自动清理。同时,Zookeeper规定不能基于临时节点来创建子节点,即临时节点只能作为叶子节点。

临时顺序节点(EPEMERAL_SEQUENTIAL):在临时节点的基础添加了顺序特性。

 

1.2 ZNode结构

                                                            

czxid该节点被创建时的事务ID
mzxid该节点最后一次被更新时的事务ID
ctime该节点被创建的时间
mtime该节点最后一次被更新的时间
version数据节点的版本号
cversion子节点的版本号
aversion节点ACL的版本号
emphemeralOwner创建该临时节点的会话SessionID。如果该节点为持久节点,则该属性的值为0
dataLength数据内容的长度
numChildren子节点个数
pzxid该节点子节点列表最后一次被修改时的事务ID,只有子节点列表变更才会变更pzxid,子节点内容变更不会影响pzxid。

 

2 Watcher

Zookeeper使用Watcher机制实现分布式数据的发布/订阅功能。

Zookeeper的Watcher机制主要包括客户端线程、客户端WatcherManager、Zookeeper服务器三部分。客户端在向Zookeeper服务器注册的同时,会将Watcher对象存储在客户端的WatcherManager当中。当Zookeeper服务器触发Watcher事件后,会向客户端发送通知,客户端线程从WatcherManager中取出对应的Watcher对象来执行process(WatchedEvent event)回调函数。

其中WatchedEvent包含KeeperState,EventType和path属性。

KeeperStateEventType说明
SyncConnected(3)None(-1)成功建立会话
NodeCreated(1)节点被创建
NodeDeleted(2)节点被删除
NodeDataChanged(3)节点数据内容发生变更
NodeChildrenChanged(4)子节点列表发生变更
Disconnected(0)None(-1)断开连接
Expired(-112)None(-1)超时
AuthFailed(4)None(-1)权限检查失败

3 ACL(Acess Control List)

ACL机制:权限模式(Scheme)授权对象(ID)权限(Permission),通常使用"scheme:id:permission"来标识一个有效的ACL信息。

3.1 权限模式(Scheme)

(1)IP:通过IP地址粒度来进行权限控制,如"ip:192.168.0.110"表示权限控制针对该IP地址,同时IP模式可以支持按照网段方式进行配置,如"ip:192.168.0.1/24"表示针对192.168.0.*这个网段进行权限控制。

(2)Digest:使用"username:password"形式的权限标识来进行权限配置,便于区分不同应用来进行权限控制。

(3)World:最为开放的权限控制模式,数据节点的访问权限对所有用户开放。他只有一种权限标识,为“world:anyone”

(4)Super:超级用户,是一种特殊的Digest模式,超级用户可以对任意Zookeeper上的数据节点进行任何操作。

3.2 授权对象(ID)

权限赋予的用户或一个指定实体,如IP地址或机器等。不同的权限模式通常有不同的授权对象。

权限模式授权对象
IPIP地址或IP段,例如“192.168.0.110”或“192.168.0.1/24”
Digestusername:BASE64(SHA-1(usermname:passworld))
Worldanyone
Super与Digest一致

3.3 权限(Permission)

通过权限检查可以被允许执行的操作,Zookeeper对所有数据的操作权限分为CREATE(节点创建权限)、DELETE(节点删除权限)、READ(节点读取权限)、WRITE(节点更新权限)、ADMIN(节点管理权限)。

 

二、应用

1 配置中心

客户端在自己关注的节点上注册Watcher,一旦节点数据发生变更,服务器就向客户端发出Watcher事件通知,客户端接到消息后,主动从服务器上拉取最新数据。

2 全局唯一ID生成

创建顺序节点,每个数据节点都能维护一份子节点的顺序序列。

3 分配任务和监控管理

各个服务器在Zookeeper上注册临时顺序节点,节点序号最小的机器执行任务,或者将任务分配到各个节点

4 分布式锁

(1)排它锁

所有客户端创建同一个Lock临时节点,节点内容为客户端ID,只有一个会创建成功。其他客户端在节点上注册Watcher来监听节点变化。

(2)共享锁

客户端注册临时顺序节点,如/shared_lock/192.168.0.1-R-0000000001或/shared_lock/192.168.0.2-W-0000000002。

对于读请求:如果自己是序号最小的节点或者比自己序号小的都是读请求,则获取共享锁。

                     如果比自己序号小的节点中存在写请求,则进入等待。

对于写请求:如果自己不是序号最小的节点,则进入等待。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值