Zookeeper简介

作者: 小蜗牛Aaron | 来源:发表于2020-01-31 13:17 被阅读0次

    特点

    数据结构简单,类似Unix文件系统树形结构,每个目录称为Znode节点,但是又不同于文件系统,既可以做目录拥有子节点,又可以做文件存放数据。
    1、同节点下的子节点名称不能相同
    2、命名有规范
    3、绝对路径
    4、存放的数据大小有限制

    数据模型

    层次名称空间

    1、类似unix文件系统,以 / 为根
    2、区别:节点可以包含与之关联的数据以及子节点 (既是文件也是文件夹)
    3、节点的路径总是表示为规范的、绝对的、斜杠分隔的路径。

    znode

    1、名称唯一,命名规范
    2、节点类型:持久、顺序、临时、临时顺序
    3、节点数据构成

    znode 命名规范

    1、null字符(\u0000)不能作为路径名的一部分;
    2、以下字符不能使用,因为它们不能很好地显示,或者以令人困惑的方式呈现:
    \u0001 - \u0019和\u007F - \u009F。
    3、不允许使用以下字符:\ud800 - uf8fff, \uFFF0 - uFFFF。
    4、“.”字符可以用作另一个名称的一部分,但是“.”和“..”不能单独用于指示路径上的节点,因为ZooKeeper不使用相对路径。下列内容无效:
    “/a/b/. / c”或“c / a / b / . . /”。
    5、“zookeeper”是保留节点名。

    操作指令

    多种方式保持有序

    zxid

    ZooKeeper中的每次更改操作都对应一个唯一的事务id,称为Zxid,它是一个全局有序的戳记,
    如果zxid1小于zxid2,则zxid1发生在zxid2之前。

    Version numbers

    版本号,对节点的每次更改都会导致该节点的版本号之一增加。这三个版本号是dataVersion
    (对znode数据的更改次数)、cversion(对znode子节点的更改次数)和aclVersion(对znode ACL的更改次数)。

    Ticks

    当使用多服务器ZooKeeper时,服务器使用“滴答”来定义事件的时间,如状态上传、会话超时、
    对等点之间的连接超时等。滴答时间仅通过最小会话超时(滴答时间的2倍)间接公开;如果客户端请求的会话超时
    小于最小会话超时,服务器将告诉客户端会话超时实际上是最小会话超时。

    Real time

    ZooKeeper除了在znode创建和修改时将时间戳放入stat结构之外,根本不使用Real time或时钟时间。

    节点上的元数据信息-Stat

    可快速的搭建集群 可复制

    快速

    ZooKeeper数据加载在内存中,这意味着ZooKeeper可以获得高吞吐量和低延迟数。
    以读取为主的工作负载中,它尤其快。
    操作的Znode的数据大小限制1M。

    zookeeper 会话机制

    1、一个客户端连接一个会话,由zk分配唯一会话id;
    2、客户端以特定的时间间隔发送心跳以保持会话有效; tickTime
    3、超过会话超时时间未收到客户端的心跳,则判定客户端死了;(默认2倍tickTime)
    4、会话中的请求按FIFO顺序执行。

    znode 数据构成

    1、节点数据:存储的协调数据(状态信息、配置、位置信息等)
    2、节点元数据(stat结构)
    3、数据大小上限:1M

    znode 节点类型

    1、持久节点
    2、顺序节点
    3、临时节点
    4、临时顺序节点

    watch监听机制

    两类watch
    1、data watch 监听 数据变更
    2、child watch 监听子节点变化

    watch事件

    Created event:
    Enabled with a call to exists.
    Deleted event:
    Enabled with a call to exists, getData, and getChildren.
    Changed event:
    Enabled with a call to exists and getData.
    Child event:
    Enabled with a call to getChildren.

    特性

    1、一次性触发:watch触发后即被删除。要持续监控变化,则需要持续设置watch;
    2、有序性:客户端先得到watch通知,后才会看到变化结果

    1、watch是一次性触发器;如果您获得了一个watch事件,并且希望得到关于未来更改的通知,则必须设置另一个watch。
    2、因为watch是一次性触发器,并且在获取事件和发送获取watch的新请求之间存在延迟,所以不能可靠地得到节点发生的每个更改。
    3、一个watch对象只会被特定的通知触发一次。如果一个watch对象同时注册了exists、getData,当节点被删除时,删除事件对exists 、getData都有效,但只会调用watch一次。

    附录

    分布式锁以及分布式队列的实现

    相关文章

      网友评论

        本文标题:Zookeeper简介

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