理解ZooKeeper中的ZNodes

翻译自:http://zookeeper.apache.org/doc/r3.1.2/zookeeperProgrammers.html

ZooKeeper中的每个结点都是一个ZNode。ZNode维护一个包括数据和ACL修改的版本号的stat结构。ZNode结构还包括时间戳。版本号和时间戳一起用来验证缓存和协调更新。ZNode中的数据每更新一次,版本号就相应的增加一次。例如,每当客户端需要检索数据的时候,它也会收到一个数据的版本号。当客户端执行修改或者删除操作时,必须提供正在修改的数据的版本号。如果客户端提供的版本号和实际数据的版本号不匹配的话,更改就会失败。
注意:在分布式应用项目中,node可以指的是一台主机、服务器、总体的一员、一个服务进程等。在ZooKeeper中,node是指数据结点。Servers是指组成组成ZooKeeper服务的机器;quorum peers是指ensemble的服务器;客户端
是指使用ZooKeeper服务的客户端或者进程。

Znodes是程序员操作的主要实体。它有以下几个特性:

Watches(观察者)
客户端可以在ZNode上设置观察者(watches)。所有对ZNode的修改都将触发观察者,之后再清除观察者。当一个
观察者被触发,ZooKeeper就会发送一个通知给客户端。

Data Access
数据被原子性的保存在命名空间的每一个ZNode中。Read可以获得与ZNode相关联的数据,write用来修改数据。每个结点都有一个ACL(Access Control List)来限制谁可以进行这些操作。ZooKeeper不是用来当作普通数据库也不适合用来存储大数据。相反,它是用来管理协同数据。这些数据可能是配置、状态信息或者集合地点等。这些数据都有一个共同的特点,就是他们一般都很小:几千个字节的量级。ZooKeeper的客户端和服务器可以很智能的判别ZNode有小于1M的数据,但是数据一般上都比1M小的多。操作相对大一点的数据将会花费更多的时间,这些额外的时间用来把更多的数据从网络中保存在存储介质中才对。如果需要存储这样的大数据,通常都把它们存储在大容量存储系统中,比如NFS和HDFS,然后在ZooKeeper中保存它们的
存储位置指针。

Ephemeral Nodes(临时结点)
ZooKeeper也有临时结点的概念。这些结点在ZNode被创建的时候存在,当回话结束时,结点就会被删除。因为这样的
临时结点不允许有子结点。

序列结点——唯一命名
当创建一个ZNode,ZooKeeper还可以请求附加一个递增计数器到最后的路径。这个计数器对于父节点来说是唯一的。计数器的格式是%010d——这是一个十位数,前面用0来填充,(计数器之所以有这样的格式是为了便于排序)例如<path>0000000001。注意:计数器用来存储下一个序列号码是一个有符号整数(4字节)由父节点维护,当超出
2147483647时计数器将溢出。

总结

ZooKeeper的节点是通过像树一样的结构来进行维护的,并且每一个节点通过路径来标示以及访问。除此之外,每一个节点还拥有自身的一些信息,包括:数据、数据长度、创建时间、修改时间等等。Znode维护着数据、ACL(access control list,访问控制列表)、时间戳等交换版本号等数据结构,它通过对这些数据的管理来让缓存生效并且令协调更新。每当Znode中的数据更新后它所维护的版本号将增加。另外Znode还具有原子性操作的特点:命名空间中,每一个Znode的数据将被原子地读写。读操作将读取与Znode相关的所有数据,写操作将替换掉所有的数据。除此之外,每一个节点都有一个访问控制列表,这个访问控制列表规定了用户操作的权限。ZooKeeper中同样存在临时节点。这些节点与session同时存在,当session生命周期结束,这些临时节点也将被删除。临时节点在某些场合也发挥着非常重要的作用。

【Apache ZooKeeper】理解ZooKeeper中的ZNodes的更多相关文章

  1. Apache ZooKeeper在Kafka中的角色 - 监控和配置

    1.目标 今天,我们将看到Zookeeper在Kafka中的角色.本文包含Kafka中需要ZooKeeper的原因.我们可以说,ZooKeeper是Apache Kafka不可分割的一部分.在了解Zo ...

  2. 什么是Zookeeper,Zookeeper的作用是什么,在Hadoop及hbase中具体作用是什么

    什么是Zookeeper,Zookeeper的作用是什么,它与NameNode及HMaster如何协作?在没有接触Zookeeper的同学,或许会有这些疑问.这里给大家总结一下. 一.什么是Zooke ...

  3. Zookeeper学习笔记(中)

    Zookeeper学习笔记(中) Zookeeper的基本原理和基本实现 深入了解ZK的基本原理 ZK的一致性: ZAB 协议: Zookeeper 原子消息广播协议 ZK通过选举保证 leader ...

  4. (转)zookeeper理解

    分布式服务框架 Zookeeper -- 管理分布式环境中的数据 Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题 ...

  5. 简单理解Zookeeper的Leader选举【转】

    Leader选举是保证分布式数据一致性的关键所在.Leader选举分为Zookeeper集群初始化启动时选举和Zookeeper集群运行期间Leader重新选举两种情况.在讲解Leader选举前先了解 ...

  6. 【HBase】zookeeper在HBase中的应用

    转自:http://support.huawei.com/ecommunity/bbs/10242721.html Zookeeper在HBase中的应用 HBase部署相对是一个较大的动作,其依赖于 ...

  7. 温故知新-快速理解zookeeper功能&应用&选举机制

    文章目录 zookeeper简介 什么是zookeeper zookeeper应用场景 zookeeper特点 zookeeper的角色 zookeeper的数据模型 节点数据结构 节点类型 zook ...

  8. 简单理解Zookeeper的Leader选举

    Leader选举是保证分布式数据一致性的关键所在.Leader选举分为Zookeeper集群初始化启动时选举和Zookeeper集群运行期间Leader重新选举两种情况.在讲解Leader选举前先了解 ...

  9. apache开源项目--ZooKeeper

    ZooKeeper是Hadoop的正式子项目,它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护.名字服务.分布式同步.组服务等.ZooKeeper的目标就是封装好复杂易出错的关键服务 ...

随机推荐

  1. STL之vector(向量)

    C++编程语言中有一种叫做Vector的应用方法,它的作用在实际编程中是非常重要的,这里详细介绍一下C++ Vector的相关应用技巧及基本内容: Construct vector #include ...

  2. pip install 出现报asciii码错误的解决

    原因是pip安装python包会加载我的用户目录,我的用户目录恰好是中文的,ascii不能编码.解决办法是: python目录 Python27\Lib\site-packages 建一个文件site ...

  3. 浅谈Linux ftp服务器相关配置

    首先我们需要在Linux系统下安装FTP服务器  Ubuntu sudo apt-get install.......  centos yun....... 然后,我们要配置vsftpd.conf文件 ...

  4. VC6集成开发环境使用参考

    VC6集成开发环境使用参考 1.VC6的常用菜单命令项 (1)File菜单 New:打开“new”对话框,以便创建新的文件.工程或工作区. Close Workspace:关闭与工作区相关的所有窗口. ...

  5. C陷阱与缺陷(二)

    第二章 语法陷阱 2.1 理解函数声明 (*(void(*)())0)();任何C变量的声明都由两部分组成:类型以及一组类似表达式的声明符.一旦我们知道了如何声明一个给定类型的变量,那么该类型的类型转 ...

  6. Solr4.7从文件创建索引

    索引数据源并不会一定来自于数据库.XML.JSON.CSV这类结构化数据,很多时候也来自于PDF.word.html.word.MP3等这类非结构化数据,从这类非结构化数据创建索引,solr也给我们提 ...

  7. java多线程制作计时器

    基本思路: 在类中创建thread 供按钮监听器调用. 界面设计:

  8. victim是什么意思_victim在线翻译_英语_读音_用法_例句_海词词典

    victim是什么意思_victim在线翻译_英语_读音_用法_例句_海词词典 victim

  9. 关于jdbc的一些疑问

    1.为什么强调在使用jdbc时,须要在使用的时候才打开连接(Connection),用完后立刻关闭.假设我的连接(Connection)一開始就打开.在整个程序结束时才关闭,会带来什么后果呢? 2.为 ...

  10. 【JavaScript】双引号问题

    拼装字符串是遇到双引号冲突问题. 最后用"代替了平时的转码手段.