ZooKeeper技术内幕——系统模型

系统模型包括五个部分:数据模型、节点特性、版本、Watcher和ACL。

数据模型

  • 数据节点
    用ZNode来表示,ZNode是ZooKeeper中数据的最小单元,每个ZNode上都可以保存数据,同时还可以挂载子节点,因此构成了一个层次的命名空间,称之为树。

  • 事务ID
    在ZooKeeper中,事务是指能够改变ZooKeeper服务器状态的操作。一般包括:数据节点创建与删除、数据节点内容更新和客户端会话创建与失效。对于每一个事务请求,分配一个全局唯一的事务ID——ZXID。

节点特性

  • 节点类型

    • 持久节点(PERSISITENT):只能通过手动删除,否则一直处于ZooKeeper服务器;
    • 持久顺序节点(PERSISTENT_SEQUENTIAL):每个父节点为它的第一级子节点维护创建的先后顺序;
    • 临时节点(EPHEMERAL):临时节点的生命周期和客户端的会话绑在一起,并不是TCP的连接断开,临时节点只能以叶节点的形式存在;
    • 临时顺序节点(EPHEMERAL_SEQUENTIAL)
  • 状态信息:在与ZooKeeper服务器进行交互的时候,使用stat查看信息

    • czxid:Created ZXID,数据节点被创建时的事务ID
    • mzxid:Modified ZXID,该节点最后一次被更新时的事务ID
    • ctime:Created Time,节点被创建的时间
    • mtime:Modified ZXID,节点最后一次被更新的时间
    • version:数据节点的版本号
    • cversion:子节点的版本号
    • aversion:节点的ACL版本号
    • ephemeralOwner:创建该临时节点的会话SeesionID,若节点为持久节点,为0
    • dadaLength:数据内容的长度
    • numChildren:节点的子节点个数
    • pzxid:节点的子节点列表最后一次被修改时的事务ID,注意,子节点内容变更并不会影响pzxid

版本

每个数据节点都有三种类型的版本信息:version、cversion和aversion。ZooKeeper中的版本概念,表示相关版本节点信息的更新次数,版本的作用主要用来实现”锁“的功能。

我们可以把一个乐观锁控制的事务分为如下三个阶段:数据读取、写入校验和数据写入。在ZooKeeper中,版本属性正是用来实现乐观锁机制中的”写入校验“的。

Watcher——数据变更的通知

ZooKeeper提供了分布式数据的分布/订阅功能。一个典型的发布/订阅模型系统定义了一种一堆多的订阅关系,能够让多个订阅者同时监听某一个主题对象,当这个主题对象自身状态变化时,会通知所有的订阅者。

在ZooKeeper中,引入了Watcher机制来实现这种分布式的通知功能。ZooKeeper允许客户端向服务器注册一个该Watcher监听,当服务端的一些指定事件触发了这个Watcher,那么就会向指定客户端发送一个事件通知实现实现分布式的通知功能。

在工作流程上,客户端在向ZooKeeper服务器注册Watcher的同时,会将Watcher对象存储在客户端的WatchManager。当ZooKeeper服务器端触发Watcher事件后,会向客户端发送通知,客户端线程从WatchManager中取出对应的Watcher对象来执行回调逻辑。

ACL

ZooKeeper的ACL权限控制,可以从三个方面来理解ACL机制,分别是:权限模式(Scheme)、授权对象(ID)和授权(Permission),通常使用”scheme:id:permission“来标识一个有限的ACL信息

扫描二维码关注公众号,回复: 1307038 查看本文章

权限模式(Scheme)

  • IP
    IP模式通过IP地址粒度来进行权限控制,例如配置了”ip:192.168.0.110”,即表示权限控制都是针对这个IP地址的

  • Digest
    Digest是最常用的权限控制模式,其以类似于”username:password“形式的权限标识来进行权限配置。
    ZooKeeper会对该模式的”username:password”进行加密处理。

  • World
    World模式是一种最开放的权限控制模式,数据节点的访问权限对所有用户开放,World模式可以看作是一种特殊的Digest模式,它只有一个权限标识,即”wordl:anyone“

  • Super
    Super模式是超级用户权限

授权对象(ID)

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

  • ip:通常授权于一个IP地址或者是IP段,例如192.168.0.110或者192.168.0.1/24
  • Digest:自定义,通常是”username:password”,其中password会被加密处理
  • World:只有一个ID,即”anyone“
  • Super:与Digest模式一致

权限(Permission)

权限就是指那些通过权限检查后可以被执行的操作。在ZooKeeper中,所有对数据的操作权限分为五大类:

  • CREATE(C):子节点的创建权限,允许授权对象在该数据节点下创建子节点
  • DELETE(D):子节点的删除权限
  • READ(R):数据节点的读取权限,允许授权对象访问该数据节点并读取其数据内容或子节点列表等
  • WRITE(W):数据节点的更新权限
  • ADMIN(A):数据节点的管理权限,允许授权对象堆该数据节点进行ACL相关的设置操作

猜你喜欢

转载自blog.csdn.net/pierce_liu/article/details/80520077