Zookeeper:一个为分布式应用而设计的分布式协调服务
zookeeper在分布式技术领域是极其常见的一个中间件,也经常与其它的分布式中间件搭配使用:早期版本的karfka使用zookeeper作为集群元数据存储组件;在分布式服务框架spring-cloud/dubbo中可以作为服务注册中心、配置管理中心等;在分布式集群环境下作为分布式锁的解决方案...
ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services.
根据zookeeper官网的介绍,zookeeper是一个用于管理配置信息、命名、提供分布式锁或者集群服务的集中式服务。它是Apache软件基金会下的项目,是一个开源的、分布式的、用于分布式应用的高性能协调服务。
我们看看Zookeeper到底具有哪些内容和特性用以支持这些服务的实现。
Zookeeper数据结构-树形层次目录
Zookeeper一切功能特性都是基于它的树形目录数据结构,树中的每个节点称为Znode,每个节点的名称path是一串以/分割的路径。跟文件目录类似,它可以包含子节点,但不同的是每个Znode都可以存储少量的数据。Znode具有不同的节点类型。
1. 节点类型
- persistent,即持久化节点,除非手动删除,否则将持久化存在。创建命令是 "create /app1/p_1"。
- ephemeral,它在一次会话生命周期中存在,在会话结束后被删除。创建命令是"create -e /app1/p_1"。
- persistent_sequential,持久化有序节点。创建命令是"create -s /app1/p_1"。
- ephemeral_sequential,临时有序节点。创建命令是"create -es /app1/p_1"。
有序节点:创建一个有序节点时,以"create -es /app1/p_1"为例,其生成的节点的名称是"/app1/p_1"后面跟上一个10位的序列号,例如"/app1/p_10000000001",序列号由zookeeper采用自增的方式自动生成。
2. 节点数据
Znode可以存储少量数据,通过create {path} {data_value}完成数据初始赋值,通过set {path}{data_value}可以对数据值进行更新。
3. 节点属性
通过ls -s {path}可以查看路径节点相关的属性值。
- cZxid: 创建节点的Zxid。
- ctime:CreateTime即节点创建时间。
- mZxid:最新修改节点的Zxid。
- mtime:最新修改节点的时间。
- pZxid:最后更新的子节点的zxid。
- cversion:子节点的变化版本号,即子节点被修改的次数,-1表示未被修改过。
- dataVersion: 当前节点的变化号,0表示未被修改过。
- aclVersion: 访问控制列表的变化号,access control list。
- ephemeralOwner: 如果是临时节点,表示当前节点的拥有者的sessionId。
- dataLength:数据长度。
- numChildren:子节点的数量。
Zxid: Zookeeper事务ID,以0x即十六进制表示,ZooKeeper每次更新操作/事务操作分配一个全局唯一的id。这个ID包含64位,其中低 32位是一个简单的单调递增的计数器,针对客户端每一个事 务请求,计数器加 1;而高 32 位则代表 Leader 周期 epoch 的编号,其设计逻辑与Zookeeper集群Leader选举有关,后面再续。
Zookeeper Watch监听机制
Zookeeper支持Watch的概念,允许客户端在Znode上设置监听。当一个watch被触发时,客户端将受到一个packet被告知Znode发生了变化。
监听类型
Zookeeper应用-分布式锁
Zoo
To be Continued...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。