ZooKeeper服务-数据模型
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服务-数据模型的更多相关文章
- ZooKeeper:数据模型
		
ZooKeeper数据模型 ZNode ZNode 分类 Stat Watcher Watcher工作原理 Watcher事件说明 Watcher注册 事件发布 示例 ZooKeeper 数据模型 整 ...
 - Zookeeper服务注册与发现原理浅析
		
了解Zookeeper的我们都知道,Zookeeper是一种分布式协调服务,在分布式应用中,主要用来实现分布式服务的注册与发现以及分布式锁,本文我们简单介绍一下Zookeeper是如何实现服务的注册与 ...
 - 第3章 ZooKeeper基本数据模型
		
第3章 ZooKeeper基本数据模型 3-1 zk数据模型介绍 3-2 zk客户端连接关闭服务端,查看znode ./zkCli.sh Ctrl + C 退出 =================== ...
 - ZooKeeper的数据模型
		
ZooKeeper的数据模型 ZooKeeper提供的命名空间与标准的文件系统的命名空间非常类似:名称是由斜杠(/)分隔的一系列路径元素:ZooKeeper命名空间中的每个节点都由路径标识,如下图: ...
 - 【分布式】Zookeeper服务端启动
		
一.前言 前面已经了解了Zookeeper会话相关知识点,接着来学习Zookeeper服务端相关细节. 二.服务端 服务端整体架构如下 Zookeeper服务器的启动,大致可以分为以下五个步骤 1. ...
 - 在 CentOS7 上部署 zookeeper 服务
		
在 CentOS7 上部署 zookeeper 服务 1 用 SecureCRT 或 XShell 等 Linux 客户端工具连接至 CentOS7 服务器: 2 进入到 /usr/local/too ...
 - Zookeeper服务常用的操作命令
		
Zookeeper服务安装之后,一般会在这个服务的基础之上安装其他的大数据平台,其他的框架一般会提供很多接口对Zookeeper中的内容进行一定的操作,但是功能相对单一,所以有些时候,有必要我们自己登 ...
 - 如何在Crystal框架项目中内置启动Zookeeper服务?
		
当Crystal框架项目需要使用到Zookeeper服务时(如使用Dubbo RPC时,需要注册服务到Zookeeper),而独立部署和启动Zookeeper服务不仅繁琐,也容易出现错误. 在小型项目 ...
 - 使用Kazoo操作ZooKeeper服务治理
		
单机服务的可靠性及可扩展性有限,某台服务宕机可能会影响整个系统的正常使用:分布式服务能够有效地解决这一问题,但同时分布式服务也会带来一些新的问题,如:服务发现(新增或者删除了服务如何确保能让客户端知道 ...
 
随机推荐
- 循环遍历完成后再进行else判断
			
有时需要在循环遍历完后再进行else操作,通常的办法是在循环前设置一个flag,用于判断.具体例子如下:
 - 【BZOJ4898】[Apio2017]商旅 分数规划+SPFA
			
[BZOJ4898][Apio2017]商旅 Description 在广阔的澳大利亚内陆地区长途跋涉后,你孤身一人带着一个背包来到了科巴.你被这个城市发达而美丽的市场所深深吸引,决定定居于此,做一个 ...
 - 3N Numbers
			
D - 3N Numbers Time limit : 2sec / Memory limit : 256MB Score : 500 points Problem Statement Let N b ...
 - Nginx服务监听端口修改启动bug
			
监听的端口从80 修改到其他端口出现启动不起来问题. 解决方案如下: yum install policycoreutils-python sudo cat /var/log/audit/audit. ...
 - JSP页面获取下来框select选中项的值和文本的方法
			
<select id="username" name=""> <option value="1">jyy< ...
 - 小白学linux命令
			
小白是景女神全栈开发股份有限公司的一名财务实习员工,经过3个月的实习期,小白是过五关斩六将啊!终于成为了公司的一名正式员工,而且收到了景总亲自发来贺喜的邮件:“欢迎你加入大家庭,公司也本着员工全面发展 ...
 - PopuWindow和软件盘共存时的设置
			
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/mingyue_1128/article/details/32316069 一.键盘不消失,popuw ...
 - openresty安装文档
			
一.OpenResty简介 OpenResty是一个基于 Nginx与 Lua的高性能 Web平台,其内部集成了大量精良的 Lua 库.第三方模块以及大多数的依赖项.用于方便地搭建能够处理超高并 ...
 - 面向对象高级编程——使用@property
			
在绑定属性的时候,如过我们直接把属性暴露出去,虽然写起来简单,但是,没办法检查参数,导致可以把成绩随意改: s = Student() s.score = 9999 #不符合常规依然可以更改 这显然不 ...
 - Centos----本地yum源制作
			
本地YUM源制作 1. YUM相关概念 1.1. 什么是YUM YUM(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的S ...