前言
周围有些人会说:“咱写代码的和英文有啥关系?”,但个人认为开发人员很有必要学好英语。笔者当然英语也不算太好,以前学东西基本靠买书,但是这回想读官方文档,这着实是个挑战。官方文档毕竟是一手信息,学着放心,加油!
Zookeeper是什么?
ZooKeeper is a high-performance coordination service for distributed applications. It exposes common services – such as naming, configuration management, synchronization, and group services – in a simple interface so you don’t have to write them from scratch. You can use it off-the-shelf to implement consensus, group management, leader election, and presence protocols.
- 释义:Zookeeper是一个高性能的分布式协调服务,提供了多种公共基础服务,例如命名、配置管理、分布式同步、分组管理。使用Zookeeper可以实现分组管理、分布式协同、集群Leader选举机制、节点在线协议等等。
设计理念
- 简单:分布式进程通过共享分级拓扑结构的命名空间进行协调,即
znode
。znode
虽然很像文件夹、文件,但是znode
是为内存存储数据而设计的。 - 自我复制:组成Zookeeper集群的节点,在内存中维护着各个机器的状态视图,并持久化存储数据处理日志以及快照,因此,只要大部分节点可用,则服务可用。
- 有序:Zookeeper用一个数字来表示每一次数据处理,即数据处理是有序的。
- 快速:“读”操作远比“写”操作多时,Zookeeper的性能高效,特别是在读写比为10:1的场景。
基础概念
数据结构
- ZNode:包含版本号(表示数据变化)、ACL(Access Control List)变化、时间戳。版本号与时间戳用于验证缓存以及协同更新,即每次数据传输都会带着相应的版本号,用于验证该操作的合法性。
注:官方给了一个很有意思的比喻,即可以把ZNode理解为分布式文件系统,唯一的区别就是文件可以成为文件夹。
- ZNode的特性如下:
1、可观察的(Watches):类似于观察者模式,Znode数据变化会提醒所有监听(watch)该Znode的客户端。 2、读写原子性:Znode的读写操作都具有原子性(一次读所有数据,一次写替换所有数据),而且有ACL来限制读写权限。读写原子性意味着ZNode不是为存储大量数据设计的(会导致高延时等性能问题),超过1MB即会被校验机制拦截,通常都是KB级别。 3、临时节点:一旦创建ZNode的会话结束,ZNode就会被销毁,因此与会话关联的ZNode不能有子节点。 4、有序节点(唯一性):每当创建一个ZNode时,Zookeeper会在路径上添加一个对父节点的唯一标识,这个标识是自增的(格式为%010d)。 5、容器节点(3.5.3特性):容器节点用于leader选举、锁机制等功能,容器节点中如果没有子节点,就会成为被删除的对象。 6、TTL节点(3.5.3特性):创建持久节点或者持久有序节点时,可以设置TTL(毫秒),如果节点在TTL时间内没有被修改,而且没有子节点,就会成为被删除的对象。
有序性标识
- Zxid(Zookeeper Transaction Id):对整体Zookeeper变化的标识
- Version numbers:每个ZNode的变化都会导致三个版本号中的一个版本号增加,三种版本号分别为version(数据变化版本号)、cversion(子节点数量变化版本号)、aversion(访问控制列表变化版本号)。
- Ticks:Zookeeper集群使用ticks来表示特定事件发生的时间,例如状态上报、会话超时、集群节点之间连接超时等。具体的值不会直接暴露给客户端,只是以最小超时时间阈值告知客户端。
- Real time:仅用于ZNode创建、修改将时间戳存储进ZNode。
ZNode存储字段
- czxid:ZNode创建时的zxid
- mzxid:ZNode最后一次修改时的zxid
- pzxid:改ZNode的子节点最后一次修改时的zxid
- ctime:ZNode创建时的时间戳
- mtime:ZNode最后一次修改时的时间戳
- version、cversion、aversion:如上所述
- ephemeralOwner:用于临时节点,存储创建该临时节点的sessionId,其他类型节点为0
- dataLength:存储数据长度
- numChildren:子节点数
结语
今天的摸鱼就到这里了,官方文档的好处在于简介明快,一手信息,以后尽量多看看~