理解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. tomcat部署web项目的三种方式

    方式一:将web项目拷贝至webapps目录下. 方式二:修改tomcat目录下的conf目录下的server.xml,在其<Host>标签中添加子标签,代码如下: <Host ap ...

  2. iOS推送介绍

    iOS消息推送的工作机制可以简单的用下图来概括: Provider是指某个iPhone软件的Push服务器,APNS是Apple Push Notification Service的缩写,是苹果的服务 ...

  3. FtpManager类

    public class FtpManager { /// <summary> /// 主机名 /// </summary> string ftpServerIP; /// & ...

  4. C#学习日记之数据库连接

    一.webconfig设置和参数解释 在C#中新建一个网站时,webconfig文件中会有一个默认的数据库连接语句,如下 <connectionStrings> <add name= ...

  5. HTML5 按字母顺序排列的标签列表 new : HTML5 中的新标签。

    标签 描述 <!--...--> 定义注释. <!DOCTYPE>  定义文档类型. <a> 定义超链接. <abbr> 定义缩写. <acron ...

  6. projecteuler之58题Spiral primes

    package com.android; public class SpiralPrimes { public static void main(String args[]) { long numPr ...

  7. Spark Streaming连接TCP Socket

    1.Spark Streaming是什么 Spark Streaming是在Spark上建立的可扩展的高吞吐量实时处理流数据的框架,数据可以是来自多种不同的源,例如kafka,Flume,Twitte ...

  8. [翻译]Django速查表

    原文在此:https://code.djangoproject.com/wiki/DjangoCheatSheet Django速查表Django教程已经非常好了.这个速查表的作用是创建一个快速开始指 ...

  9. clear伪类使用

    都知道float会脱离文档流  用什么办法撑开父元素呢? 手动在本区块的所有float元素之后加上一个块元素并对其添加clear:both 可以 但是这样还要再去修改html页面  而且多了一个仅仅是 ...

  10. 浏览器对body节点scrollTop解析的差异

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <style t ...