Zookeeper内部实现分布式数据一致性(底层系统模型)(一)

        Zookeeper的几个概念:(接下来将从这几个概念书写Zookeeper的内部工作流程)

        • 数据模型
        • 节点特性
        • 版本
        • Watcher
        • ACL 

        <1> 数据模型

          Zookeeper的视图很热Unix文件系统很像。但没有引入文件和文件目录相关概念;而是使用“数据节点”概念,称为ZNode;

          ZNode是ZK中最小的数据单元,每个ZNode上可以保存数据,也可以挂载子节点;即形成了一种层次化空间树;

             事务ID : ZK中,事务是指能够改变zk服务器状态的操作,一般包括数据节点创建与删除,数据节点内容更新和客户端会话创建与失效等操作;对于每一个事务请求,zk都会为其分配一个全局唯一的事务ID,用ZXID表示,是一个64位的数字;每一个ZXID对应一个事务操作;

        <2> 节点特性:

          ZK中每个数据节点都是有生命周期;具体取决于数据节点的类型;

          节点类型可以分为:持久节点,临时节点,顺序节点;

          在节点的创建过程中,可以组合使用,于是有以下四种组合:

            (1)持久节点:该节点一旦被创建,就会一直存在于ZK服务器上,直到有删除操作来主动清除这个节点;

            (2)持久顺序节点:ZK中,每个父节点会为其第一级子节点维护一份顺序,用于记录下每个节点的先后顺序。

            (3)临时节点:临时节点生命周期和客户端会话绑定在一起,客户端会话失效,这个节点被自动清理掉。(客户端失效非TCP连接断开,另外不能基于临时节

                    点创建子节点)。

            (4)临时顺序节点:特性和持久顺序节点类似;

             状态信息:zk上的数据节点进行数据的写入子节点创建两个动作;一些状态说明:

              <1> czxid :Create ZXID :表示数据节点被创建时的事务ID;

              <2> mzxid: Modified ZXID :表示该节点最后一次被更新时的事务;

              <3> ctime : 节点创建时间。

                version,cversion,aversion等状态属性后续继续介绍

        <3> 版本:(保分布式数据原子性操作)

          zk引入版本概念:每个数据节点都有三种类型的版本信息:

            (1)version :当前结点的数据内容版本号;

            (2)cversion:当前数据子节点的版本号;

            (3)aversion:当前数据节点ACL变更的版本号;

            以version为例:一个数据节点 /zk 被创建之后,节点的version值是0,代表 节点自创建以来被更新过 0 次

             分布式领域-锁:一个乐观锁的事务控制分为三个阶段:数据读取,写入校验,数据写入;其中写入校验是整个乐观锁控制的关键所在。在写入校验阶段,事务会检查数据在读取阶段是否有其他事务对数据进行修改,确保数据的一致性;在zk中,使用这种版本号version来实现这种。通过获取当前version和version对比,保证两个版本匹配;

        <4> Watcher 和 <5> ACL 内容较多,后续章节继续介绍!

        相关文章
        相关标签/搜索
        高手论坛免费精选资料