美文网首页
分布式协调服务Zookeeper

分布式协调服务Zookeeper

作者: 琥珀灬 | 来源:发表于2018-07-19 17:56 被阅读0次

    Zookeeper数据模型

            树形结构,类似文档系统的目录

    zk的数据存贮基于节点,这种节点叫做Znode,Znode的引用方式是路径引用。/root/sercieA/订单,每个Znode有唯一的路径


    Znode包含信息    

    data:

    Znode存储的数据信息。

    ACL:

    记录Znode的访问权限,即哪些人或哪些IP可以访问本节点。

    stat:

    包含Znode的各种元数据,比如事务ID、版本号、时间戳、大小等等。

    child:

    当前节点的子节点引用,类似于二叉树的左孩子右孩子。

    这里需要注意一点,Zookeeper是为读多写少的场景所设计。Znode并不是用来存储大规模业务数据,而是用于存储少量的状态和配置信息,每个节点的数据最大不能超过1MB

    Znode有四种类型

    PERSISTENT(持久节点)

            节点创建后,就一直存在,直到有删除操作来主动清除这个节点——不会因为创建该节点的客户端会话失效而消失。

    PERSISTENT_SEQUENTIAL(持久的连续节点)

            ZooKeeper中,每个父节点会为他的第一级子节点维护一份时序,会记录每个子节点创建的先后顺序。基于这个特性,在创建子节点的时候,可以设置这个属性,那么在创建节点过程中,ZooKeeper会自动为给定节点名加上一个数字后缀,作为新的节点名。这个数字后缀的范围是整型的最大值。

    EPHEMERAL(临时节点)临时节点不能有子节点

            临时节点的生命周期和客户端会话绑定。也就是说,如果客户端会话失效,那么这个节点就会自动被清除掉。

    EPHEMERAL_SEQUENTIAL(临时的连续节点)

            临时节点的生命周期和客户端会话绑定。也就是说,如果客户端会话失效,那么这个节点就会自动被清除掉。注意创建的节点会自动加上编号。


    Zookeeper的基本操作和事件通知

    create

    创建节点

    delete

    删除节点

    exists

    判断节点是否存在

    getData

    获得一个节点的数据

    setData

    设置一个节点的数据

    getChildren

    获取节点下的所有子节点


    观察(watcher)

    我们可以理解成是注册在特定Znode上的触发器。当这个Znode发生改变,也就是调用了create,delete,setData方法的时候,将会触发Znode上注册的对应事件,请求Watch的客户端会接收到异步通知

    Watcher 在 ZooKeeper 是一个核心功能,Watcher 可以监控目录节点的数据变化以及子目录的变化,一旦这些状态发生变化,服务器就会通知所有设置在这个目录节点上的 Watcher,从而每个客户端都很快知道它所关注的目录节点的状态发生变化,而做出相应的反应

    可以设置观察的操作:exists,getChildren,getData 可以触发观察的操作:create,delete,setData

    具体交互过程如下:

    客户端调用getData方法,watch参数是true。服务端接到请求,返回节点数据,并且在对应的哈希表里插入被Watch的Znode路径,以及Watcher列表。 当被Watch的Znode已删除,服务端会查找哈希表,找到该Znode对应的所有Watcher,异步通知客户端,并且删除哈希表中对应的Key-Value。

    相关文章

      网友评论

          本文标题:分布式协调服务Zookeeper

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