内容简介:顺序节点—— 每次创建顺序节点时,zk都会在路径后面自动添加上10位的数字(计数器),例如节点可以存储数据,zk保证读和写都是原子操作,且每次读写操作都是对数据的完整读取或完整写入,并不提供对数据进行部分读取或者写入的操作。但是你不应该在节点存储过多的数据。zk规定节点的数据大小不能超过1M,但实际上我们在znode的数据量应该尽可能小,因为数据过大会导致zk的性能明显下降。如果确实需要存储大量的数据,一般解决方法是在另外的分布式数据库(例如redis)中保存这部分数据,然后在znode中我们只保留这个数据
节点
节点类型
- 持久节点 (PERSISTENT)
- 临时节点 (EPHEMERAL)—— 在客户端会话结束后自动删除,利用临时节点的这一特性,我们可以使用临时节点来进行集群管理,包括发现服务的上下线等。
- 持久/顺序节点 (PERSISTENT_SEQUENTIAL)
- 临时/顺序节点 (EPHEMERAL_SEQUENTIAL)
顺序节点—— 每次创建顺序节点时,zk都会在路径后面自动添加上10位的数字(计数器),例如
节点数据
节点可以存储数据,zk保证读和写都是原子操作,且每次读写操作都是对数据的完整读取或完整写入,并不提供对数据进行部分读取或者写入的操作。
但是你不应该在节点存储过多的数据。zk规定节点的数据大小不能超过1M,但实际上我们在znode的数据量应该尽可能小,因为数据过大会导致zk的性能明显下降。如果确实需要存储大量的数据,一般解决方法是在另外的分布式数据库(例如redis)中保存这部分数据,然后在znode中我们只保留这个数据库中保存位置的索引即可。
数据读写原子性、不易存储大量数据
节点属性
- dataVersion —— 数据版本号,每次对节点进行set操作,dataVersion的值都会增加1(即使设置的是相同的数据)。
- cversion —— 子节点的版本号。当znode的子节点有变化时,cversion 的值就会增加1。
- aclVersion —— ACL的版本号,关于znode的ACL(Access Control List,访问控制)。
- cZxid —— Znode创建的事务id。
- mZxid —— Znode被修改的事务id,即每次对znode的修改都会更新mZxid。
- ctime —— Znode创建的时间戳。
- mtime —— Znode修改的时间戳。
- dataLength —— 数据长度。
- numChildren —— 子节点数量。
- ephemeralOwner —— 如果znode是ephemeral类型节点,则这是znode所有者的 session ID。 如果znode不是ephemeral节点,则该字段设置为零。
版本号—— 以数据版本号(dataVersion)来说明zk中版本号的作用。每一个znode都有一个dataVersion,它随着每次数据变化而自增。ZooKeeper提供的一些API例如setData和delete根据版本号有条件地执行。多个客户端对同一个znode进行操作时,版本号的使用就会显得尤为重要。例如,假设客户端C1对znode /config写入一些配置信息,如果另一个客户端C2同时更新了这个znode,此时C1的版本号已经过期,C1调用setData一定不会成功。这正是版本机制有效避免了数据更新时出现的先后顺序问题。在这个例子中,C1在写入数据时使用的版本号无法匹配,使得操作失败。
事务ID—— 对于zk来说,每次的变化都会产生一个唯一的事务id,zxid(ZooKeeper Transaction Id)。通过zxid,可以确定更新操作的先后顺序。例如,如果zxid1小于zxid2,说明zxid1操作先于zxid2发生。zxid对于整个zk都是唯一的,即使操作的是不同的znode。
在集群模式下,客户端有多个服务器可以连接,当尝试连接到一个不同的服务器时,这个服务器的状态要与最后连接的服务器的状态要保持一致。zk正是使用zxid来标识这个状态,上图描述了客户端在重连情况下zxid的作用。
- 客户端连接Server1
- 客户端创建了一个节点,这时候Server1的zxid变成了100
- 客户端与Server1断开了连接
- 客户端连接Server2,此时Server2的zxid小于100,导致连接失败
- 客户端连接S3,S3的zxid大于100,连接成功
以上所述就是小编给大家介绍的《ZooKeeper 节点》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- xml创建节点(根节点、子节点)
- Vultr VPS 节点选择方法 | 各节点延迟一览
- 1.19 JQuery2:节点插入与节点选取
- POC分布式节点算法机制下的超级节点计划
- tikv节点下线缩容后改造成tidb节点记录
- Redis 哨兵节点之间相互自动发现机制(自动重写哨兵节点的配置文件)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
技术领导之路(中英文对照)
Gerald M.Weinberg / 余晟 / 电子工业出版社 / 2009-12 / 69.00元
《技术领导之路:全面解决问题的途径(中英文对照)》内容简介:搞定技术问题并不简单,但与人打交到也并非易事。作为一个技术专家,你是否在走上管理岗位时遇到了各种不适“症状”?《技术领导之路:解决问题的有机方法》一书将帮助你成为一个成功的解决问题的领导者。书中温伯格从一个反思者的角度阐述了要成为一个成功的解决问题的领导者必备的3个技能——MOI,即激励(Motivation)、组织(Organizati......一起来看看 《技术领导之路(中英文对照)》 这本书的介绍吧!