美文网首页zookeeper系列
zookeeper系列(一):系统模型

zookeeper系列(一):系统模型

作者: 范柏柏 | 来源:发表于2020-06-02 11:49 被阅读0次

    综述

    • 数据模型
    • 节点信息
    • 版本
    • acl

    数据模型

    zookeeper其实就是一个文件系统。用节点来存储数据。这个节点叫ZNode。所有ZNode组成一棵树。ZNode里面可以存储数据。

    数据模型.png

    重点。每个节点只有绝对路径。没有相对路径。

    节点类型

    • 持久节点
      zookeeper中最常见的节点。所谓持久节点,是指改数据节点被创建后,就一直存在,直到有删除请求主动删除这个节点。

    • 持久顺序节点
      持久顺序节点的基本特征和持久节点是一样的。额外的特性表现在顺序性上。每个父节点都会为它的直系子节点维护一份顺序,用于记录每个子节点创建的先后顺序。在建立子节点的时候默认加上一个数字后缀,数字上限是整型的最大值。

    持久顺序节点.png

    观察一下。在/zk-test下创建子节点,非顺序的节点创建后,父节点的顺序值也会+1,只是不会加在节点名字上。父节点记录顺序+1,只要是创建子节点就会+1,不管子节点是否临时,是否持久。就是持久的节点,会把这个10位顺序值放在节点名字的后面。

    • 临时节点
      和持久节点不同的是,临时节点的生命周期和client会话是绑定在一起的,session失效,那么这个节点会被自动清理掉。

    注意!!

    1. 不能基于临时节点创建临时节点,临时节点只能是叶子节点。
    2. session失效,不是TCP断开连接。而是 session章节会讲
    • 临时顺序节点
      基本特性和临时节点一致,额外特性和顺序节点一致。

    节点信息

    节点信息.png

    第一行为节点存储的内容。如图,.zk-test节点存储的就是test0这个字符串。
    zk作为服务发现的时候,节点的内容基本上是服务的ip地址。

    下面就是属性了

    属性 说明
    cZxid 即create ZXID,表示该数据节点被创建时的事务ID
    ctime 即create time,表示该节点被创建时的时间
    mZxid 即modified ZXID,表示该节点最后一次更新时的事务ID
    mtime 即modified time,表示该节点最后一次更新的时间
    dataVersion 该节点版本号
    cversion 子节点列表的版本号
    pZxid 表示该节点的子节点列表最后一次被修改时的事务ID。注意,只有列表变了才会被修改,子节点内容的变化不会影响pZxid
    aclVersion 该节点acl版本号
    ephemeralOwner 创建该临时节点的会话的sessionId。如果该节点是持久节点,那么这个属性值为0
    dataLength 该节点数据内容的长度
    numChildren 当前节点的子节点个数。临时节点也算在内,临时节点被删除时,数量对应减少

    属性中提到了事务ID,那zk中的事务是什么呢?

    zk的事务是指能够改变服务器状态的操作。是一次操作,并不是一组操作。比如,节点的创建,节点的删除,数据节点内容的更新,客户端会话创建与失效。

    对每个事务请求,zk都会为其分配一个全局唯一的事务ID。用ZKID表示,通常是一个64位的数字。每一个ZXID对应一次更新操作,通过ZXID可以识别出zk处理这些操作的全局顺序。

    属性中提到了版本,那zk中的版本是什么呢?

    版本类型 说明
    dataVersion 当前数据节点数据内容的版本号
    cversion 当前数据节点子节点列表的版本号
    aversion 当前数据节点ACL变更版本号

    分布式领域中,version的存在基本上就是用来做乐观锁的。
    当请求的version相同时,接收请求,version + 1。
    请求的version不同,拒绝请求。

    属性里面提到了ACL,那zk的ACL是什么呢?

    ACL(Access Control List)权限控制机制
    ACL格式。

    scheme:id:permission
    

    scheme(模式)

    • ip
      ip粒度的权限控制,例如配置了ip:192.168.0.110,即表示权限控制都是针对这个ip地址的。
      也可以设置ip段,例如ip:192.168.0.1/24。表示针对192.168.0.*这个ip段进行权限控制。

    • digest
      digest是最常用的控制模式。账号密码模式,以类似 username:password 的形式来进行权限配置,便于区分不同应用来进行权限控制。
      当我们通过username:password配置权限之后,zk会对其先后进行两次编码处理。分别是SHA-1算法加密和BASE64编码。

    • world
      是一种最开放的权限控制模式,也就是没有权限。只有一个选项可填world:anyone

    • super
      顾名思义就是超级用户的意思。在super模式下,超级用户可以对任意zk上的数据节点进行任何操作。

    id(授权对象)

    授权对象指的是权限赋予的用户或者一个指定的实例。

    权限模式 授权对象
    ip ip地址或者ip段
    digest username:password
    world 只能是 "anyone"
    super 与digest模式一致

    permission(权限)

    • create(C):数据节点创建权限,允许授权对象在该数据节点下创建子节点
    • DELETE(D):子节点的删除权限,允许授权对象删除该节点的子节点
    • READ(R):数据节点的读权限,允许授权对象访问该数据节点并读取其数据内容和子节点
    • WRITE(W):数据节点的更新权限,允许授权对象对该数据节点进行更新
    • ADMIN(A):超管权限

    ACL管理

    1. 在创建节点的时候就设置


      创建时设置.png

    2)之后设置


    创建后设置.png

    相关文章

      网友评论

        本文标题:zookeeper系列(一):系统模型

        本文链接:https://www.haomeiwen.com/subject/ixnyzhtx.html