`
阅读更多

    ZooKeeper是分布式协调服务,不是一种静态框架或工具集,它是需要独立部署运行起来的中心化协调服务,分布式系统中的分布式进程通过调用ZooKeeper的服务来实现彼此的协调与约定,具体是通过ZooKeeper的客户端API来操作内存数据节点(ZNode)。



 
     如图,ZooKeeper的数据模型为层次化命名空间树,树上每个节点称为数据节点(ZNode),这些ZNode可以被分布式进程客户端通过统一的API来调用操作,同时每个ZNode都是通过层次化命名路径来定位的,如上图中最下方的节点就可以通过路径“/app1/app3”来确定。

    分布式进程通过操作ZNode来实现彼此的动作协调,但这种协调本身不是一直长时间持续发生的,比如多个分布式进程互斥访问共享资源,经过一段时间每个进程都访问成功,那么他们所操作的数据对象即ZNode现在是不是可以被回收掉,而没必要一直存在内存中占用资源?另外某些场景下协调的结果是需要长期保存下来,因为他们需要被频繁使用的,也可能在使用的过程中被更新,如分布式选举的结果,分布式配置管理等,此时的ZNode就需要一直存在内存中并且能够存储一定量的协调结果数据。

    针对以上场景分析,ZooKeeper的ZNode引入了2种类型和Key-Value数据存储特性,如下图:

  sequential_flag=Ture sequential_flag=False
Regular(常规节点) 客户端需要显示的创建和删除节点,如果没有显示的删除,节点会一直存在。节点名字末尾会被自动添加一个计数值作为最后创建的名字,而这个计数值在同一层级单调递增 创建节点的时候,不会在节点名字末尾添加任何内容
Ephemeral(临时节点) 临时节点可以被客户端显示的创建和删除,也可以在会话结束后被系统自动删除。同时临时节点不能创建子节点。顺序特性如上。 创建节点的时候,不会在节点名字末尾添加任何内容

 

    节点是数据对象,那么它包含哪些字段,在内存中是如何表示的呢?详细字段如下图所示:


 

     ZNode在内存中是表示为DataNode的类,它本身包含的信息有父节点Parent,同样是一个ZNode;本身存储的数据Data,类型为二进制数组;访问权限ACL,是一个Long型的数据(之后会讲到),节点本身的状态信息Stat,表示了当前节点的所有状态数据;孩子列表Children,是一个String类型的集合。其中Stat表的信息字段具体解释如下:

状态属性 说明
czxid 即Created ZXID,表示该数据节点创建时的事务ID
mzxid 即Modified ZXID,表示该节点最后一次被更新时的事务ID
ctime 即Created Time,表示节点被创建的时间
mtime 即Modified Time,表示节点最后一次被更新的时间
version 数据节点的当前版本
cversion 子节点的版本号,表示子节点被修改次数
aversion 节点的ACL的版本号
ephemeralOwner 创建该临时节点的会话ID,如果是常规节点默认为0
dataLength 数据内容长度
numChildren 子节点的个数
pzxid 子节点列表最后一次被修改时的事务ID,子节点内容变更不会影响此值

 

Stat数据示例如下:

[zk: zookeeper2(CONNECTED) 1] get /test20000000002

test

cZxid = 0x10000000a

ctime = Thu Nov 24 13:59:41 GMT 2016

mZxid = 0x10000000a

mtime = Thu Nov 24 13:59:41 GMT 2016

pZxid = 0x10000000a

cversion = 0

dataVersion = 0

aclVersion = 0

ephemeralOwner = 0x0

dataLength = 4

numChildren = 0

[zk: zookeeper2(CONNECTED) 2]

 

     ZooKeeper的分布式协调服务是通过在内部实现一个高性能的协调内核以及开放一组API来让用户自行构建高级的分布式协调服务功能,而不需要开发很多特定语义的分布式协调服务功能。其中开放的API就是用来操作ZNode的,那么这些API都有哪些操作?如下所示:

 

create(path,data,flags):创建ZNode,路径名为path,存储数据data,flags是节点类型

delete(path,version):删除指定的路径path和版本version的ZNode

exists(path,watch):返回是否指定的path路径的节点存在,并且watch该路径

getData(path,watch):获取指定path路径的节点存储的数据,并且watch该路径

setData(path,data,version):存储指定数据data在指定路径path的指定版本节点上

getChildren(path,watch):返回指定path路径节点的所有孩子的名字集合

sync(path):等待所有挂起的更新操作都同步到当前连接的zookeeper服务器节点

 

  • 大小: 26.5 KB
  • 大小: 21 KB
分享到:
评论

相关推荐

    3天全面深入学习zookeeper视频教程

    zookeeper数据模型 zookeeper单机安装 zookeeper常用shell命令 zookeeper的Acl权限控制 zookeeper的javaApi zookeeper 事件监听机制 zookeeper 集群搭建 一致性协议:zab协议 zookeeper的leader选举 observer角色及其...

    Zookeeper基础知识、体系结构、数据模型、服务器集群.docx

    Zookeeper基础知识、体系结构、数据模型、服务器集群

    ZooKeeper程序员指南

    本文是为想要创建使用...但是,在编写第一个ZooKeeper应用程序之前,你应该至少读过ZooKeeper数据模型和ZooKeeper基本操作。此外,简单示例程序也有助于理解ZooKeeper客户端应用程序的基本结构。ZooKeeper有一个分层

    从Paxos到Zookeeper

    第四部分(第7章)对ZooKeeper的架构设计和实现原理进行了深入分析,包含系统模型、Leader选举、客户端与服务端的工作原理、请求处理,以及服务器角色的工作流程和数据存储等;第五部分(第8章)介绍了ZooKeeper的...

    zookeeper学习笔记.pptx

    本文适合但不限于软件开发人员阅读。本文档能够使阅读者对zookeeper有一个宏观且全面的了解,内容主要包含zookeeper架构、数据模型、读写及工作原理、典型应用场景、指令汇总等,

    淘宝网Zookeeper入门

    介绍ZooKeeper服务的基础知识,并详细了解了数据模型及其属性

    zookeeper的相关介绍

    ※ zk基础知识介绍 ※ zk数据模型介绍 ※ zk数据模型中znode的介绍 ※ zk数据监听 ※ zk的acl ※ zk单节点基本操作 ※ zk集群操作 ※ zk的java客户端操作

    java高级软件工程师教程快速入门Zookeeper+dubbo视频教程

    提供分布式数据一致性解决方案,分布式应用程序可以实现数据发布订阅、负载均衡、命名服务、集群管理分布式锁、分布式队列等功能。在大数据、分布式系统或架构中占有很重要的协调位置。 Dubbo是一款高性能、轻量级的...

    zookeeper-基本认知

    Zookeeper概念 ZooKeeper是一个开源的分布式协调服务。 目标 主要用来解决分布式集群中应用系统的一致性问题,例如怎样避免同时操作同一数据造成...ZooKeeper 的数据模型,在结构上和标准文件系统的非常相似,拥有一个

    zookeeper-application:zookeeper应用

    它的设计易于编程,并使用在熟悉的文件系统目录树结构之后设计的数据模型。它运行在Java中,并且对Java和C都有绑定。 周所周知,协调服务是很难做到的。它们特别容易出现诸如竞态条件和死锁等错误。ZooKeeper背后的...

    zookeeper编程程序指南(中文)

    介绍 数据模型  节点  时间  stat结构 会话 监控 访问控制 可插拔的认证 一致性保证

    使用Zookeeper分布式部署PHP应用程序

    Zookper很容易编程接入,它使用了一个和文件树结构相似的数据模型。 虽然ZooKeeper是一个Java应用程序,但C也可以使用。这里就有个PHP的扩展,你可以从PECL中下载,或从GitHub中直接获取PHP-ZooKeeper。 要使用该...

    分布式协调工具-ZooKeeper实现动态负载均衡

    Zookeeper数据结构 1、层次化的目录结构,命名符合常规文件系统规范(类似文件系统)    2、每个节点在zookeeper中叫做znode,并且其有一个唯一的路径标识  3、节点Znode可以包含数据和子节点(但是...

    (Scala)智慧交通项目,对已有交通数据进行分析建立模型,从而对未来交通堵车情况进行预测.zip

    业务需求:对已有交通数据进行分析建立模型,从而对未来交通堵车情况进行预测; # TrafficForecast SparkMLlib智慧交通项目 ## 项目需求 对已有交通数据进行分析建立模型,从而对未来交通堵车情况进行预测 ## 使用...

    开课吧-04分布式协调服务器Zookeeper.pdf

    无论客户端连接的是集群中的哪台 Server,其读取到的数据模型中的数据都是一致的。 1.2.4 可靠性 一旦某事务被成功应用到了 zk,则会一直被保留下来,除非另一个事务将其修改。 1.2.5 最终一致性 一旦一个事务被成功...

    基于Zookeeper的使用详解

    Zookper很容易编程接入,它使用了一个和文件树结构相似的数据模型。可以使用Java或者C来进行编程接入。 众所周知,分布式的系统协作服务很难有让人满意的产品。这些协作服务产品很容易陷入一些诸如竞争选择条件或者...

    ZooKeeper 实现分布式锁的方法示例

    在介绍 ZooKeeper 分布式锁前需要先了解一下 ZooKeeper 中节点(Znode),ZooKeeper 的数据存储数据模型是一棵树(Znode Tree),由斜杠(/)的进行分割的路径,就是一个 Znode(如 /locks/my_lock)。每个 Znode 上...

    Hadoop+Hive+Spark+Kafka+Zookeeper+Flume+Sqoop+Azkaban+Scala

    基于 Zookeeper 搭建 Hadoop 高可用集群 二、Hive 简介及核心概念 Linux 环境下 Hive 的安装部署 CLI 和 Beeline 命令行的基本使用 常用 DDL 操作 分区表和分桶表 视图和索引 常用 DML 操作 数据查询详解 三、Spark ...

    分布式服务框架Zookeeper入门学习

    ZooKeeper是一种为分布式应用所设计的高可用、高性能且一致的开源协调服务,是Google的Chubby...单一视图:无论客户端连接的是哪个ZooKeeper服务器,其看到的服务端数据模型都是一致的。可靠性:一旦服务端成功地应用了

Global site tag (gtag.js) - Google Analytics