ZooKeeper是一个具有高可用性的高性能协调服务。

数据模型

ZooKeeper维护着一个树形层次结构,树中的节点被称为znode。Znode可以用于存储数据,并且有一个与之相关联的ACL(Access Control List访问控制列表)。ZooKeeper被设计用来实现协调服务(这类服务通常使用小数据文件),而不是用于大容量数据存储,因此一个znode能存储的数据被限制在1MB以内。
ZooKeeper的数据访问具有原子性。客户端在读取一个znode的数据时,要么读到所有的数据,要么读操作失败,不会只读到部分数据。同样,一个写操作将替换znode存储的所有数据。ZooKeeper会保证写操作不成功就失败,不会出现部分写之类的情况,也就是不会出现只保存客户端所写部分数据的情况。ZooKeeper不支持添加操作。这些特征都是与HDFS所不同的。HDFS被设计用于大容量数据存储,支持流式数据访问和添加操作。
Znode通过路径被引用。像Unix中的文件系统路径一样,在ZooKeeper中路径被表示成用斜杠分隔的Unicode字符串。与Unix中的文件系统路径不同的是,ZooKeeper中的路径必须是绝对路径,也就是说每条路径必须从一个斜杠字符开始。此外,所有的路径表示必须是规范的,即每条路径只有唯一的一种表示方式,不支持路径解析。例如,在Unix中,一个具有路径/a/b的文件也可以表示为/a/./b,原因在于“.”在Unix的路径中表示当前目录。在ZooKeeper中,“.”不具有这种特殊含义,这样表示的路径名是不合法的。
在ZooKeeper中,路径由Unicode字符串构成,并且有一些限制。字符串“zookeeper”是一个保留词,不能将它作为路径表示中的一部分。ZooKeeper中使用/zookeeper子树来保存管理信息,例如关于配额信息。

1. 短暂znode

znode有两种类型:短暂的和持久的。Znode的类型在创建时被确定并且之后不能再修改。在创建短暂znode的客户端会话结束时,ZooKeeper会将该短暂znode删除。相比之下,持久znode不依赖于客户端会话,只有当客户端(不一定是创建它的那个客户端)明确要删除该持久化znode时才会被删除。短暂znode不可以有子节点,即使是短暂子节点。
虽然每个短暂znode都会被绑定到一个客户端会话,但它们对所有的客户端还是可见的(还要符合其ACL的定义)。
对于那些需要知道特定时刻有哪些分布式资源可用的应用来说,使用短暂znode是一种理想的选择。

2. 顺序号

顺序(sequential)znode是指名称中包含ZooKeeper指定顺序号的znode。如果在创建znode时设置了顺序标识,那么该znode名称之后便会附加一个值,这个值是由一个单调递增的计数器(由父节点维护)所添加的。
在一个分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端就可以通过顺序号来推断事件的顺序。

3. 观察

znode以某种方式发生变化时,“观察”(watch)机制可以让客户端得到通知。可以针对ZooKeeper服务的操作来设置观察,该服务的其他操作可以出发观察。例如,客户端可以对一个znode调用exists操作,同时设定一个观察。如果这个znode不存在,则客户端所调用的exists操作将返回false。如果一段时间之后,另外一个客户端创建了这个znode,则这个观察会被触发,通知前一个客户端这个znode被创建。
观察只能被触发一次(连接事件的回调除外)。为了能够多次收到通知,客户端需要重新注册所需要的观察。

ZooKeeper服务-数据模型的更多相关文章

  1. ZooKeeper:数据模型

    ZooKeeper数据模型 ZNode ZNode 分类 Stat Watcher Watcher工作原理 Watcher事件说明 Watcher注册 事件发布 示例 ZooKeeper 数据模型 整 ...

  2. Zookeeper服务注册与发现原理浅析

    了解Zookeeper的我们都知道,Zookeeper是一种分布式协调服务,在分布式应用中,主要用来实现分布式服务的注册与发现以及分布式锁,本文我们简单介绍一下Zookeeper是如何实现服务的注册与 ...

  3. 第3章 ZooKeeper基本数据模型

    第3章 ZooKeeper基本数据模型 3-1 zk数据模型介绍 3-2 zk客户端连接关闭服务端,查看znode ./zkCli.sh Ctrl + C 退出 =================== ...

  4. ZooKeeper的数据模型

    ZooKeeper的数据模型 ZooKeeper提供的命名空间与标准的文件系统的命名空间非常类似:名称是由斜杠(/)分隔的一系列路径元素:ZooKeeper命名空间中的每个节点都由路径标识,如下图: ...

  5. 【分布式】Zookeeper服务端启动

    一.前言 前面已经了解了Zookeeper会话相关知识点,接着来学习Zookeeper服务端相关细节. 二.服务端 服务端整体架构如下 Zookeeper服务器的启动,大致可以分为以下五个步骤 1. ...

  6. 在 CentOS7 上部署 zookeeper 服务

    在 CentOS7 上部署 zookeeper 服务 1 用 SecureCRT 或 XShell 等 Linux 客户端工具连接至 CentOS7 服务器: 2 进入到 /usr/local/too ...

  7. Zookeeper服务常用的操作命令

    Zookeeper服务安装之后,一般会在这个服务的基础之上安装其他的大数据平台,其他的框架一般会提供很多接口对Zookeeper中的内容进行一定的操作,但是功能相对单一,所以有些时候,有必要我们自己登 ...

  8. 如何在Crystal框架项目中内置启动Zookeeper服务?

    当Crystal框架项目需要使用到Zookeeper服务时(如使用Dubbo RPC时,需要注册服务到Zookeeper),而独立部署和启动Zookeeper服务不仅繁琐,也容易出现错误. 在小型项目 ...

  9. 使用Kazoo操作ZooKeeper服务治理

    单机服务的可靠性及可扩展性有限,某台服务宕机可能会影响整个系统的正常使用:分布式服务能够有效地解决这一问题,但同时分布式服务也会带来一些新的问题,如:服务发现(新增或者删除了服务如何确保能让客户端知道 ...

随机推荐

  1. [NSDate distantPast]使用

    本文转载至 http://blog.sina.com.cn/s/blog_5f1967e00101ge0i.html  使用下面的方法: 关闭定时器不能使用invalidate方法,应该使用下面的方法 ...

  2. 16进制 ,Color,Colour转换

    import java.awt.Color; import jxl.format.Colour; public class ColorUtil { public static Colour getNe ...

  3. jqGrid单元格编辑配置,事件及方法

    转自 http://blog.csdn.net/xueshijun666/article/details/18151055 // var ret = $("#in_store_list_de ...

  4. 《从零开始学Swift》学习笔记(Day 26)——可选链

    原创文章,欢迎转载.转载请注明:关东升的博客 在Swift程序表达式中会看到问号(?)和感叹号(!),它们代表什么含义呢?这些符号都与可选类型和可选链相关,下面来看看可选链. 可选链: 类图: 它们之 ...

  5. A Simple Problem with Integers(线段树)

    F - A Simple Problem with Integers Time Limit:5000MS     Memory Limit:131072KB     64bit IO Format:% ...

  6. 任务03—简单程序测试及 GitHub Issues 的使用

    任务三主要是测试别人的代码找bug,和根据别人提出的bug修改自己的代码. 首先是测试的对象是jinlinchao的代码,根据他的代码很容易发现几个问题,一开始,我是打算,将发现的问题一个一个提上去, ...

  7. 洛谷 P1407 [国家集训队]稳定婚姻

    洛谷 这个题面很有意思,像我这样的菜鸡,完全不需考虑婚姻的稳定 性 问题. tarjan裸题,直接讲算法吧: 原配夫妻之间分别连一条边,小情人之间反向连边. 这时候我们会发现一个性质,如果婚姻稳定,那 ...

  8. 运行docker image 忘记添加端口号

    docer inspect  容器id,查找IpAddress ,通过这个访问

  9. 美图秀秀 web开发图片编辑器

    美图秀秀web开发平台 http://open.web.meitu.com/wiki/ 1.环境配置 1.1.设置crossdomain.xml 下载crossdomain.xml文件,把解压出来的c ...

  10. iOS NSCoding 的学习 和 使用

    起初接触的轻量级 物理存储 方式 是 plist  可以存储 系统级别的 字典 数组   但是不能存储自定义的对象类 那会 用自定义对象做存储的 需求也不大 主要 是 还没建立面向对象意识,会的也少. ...