ZooKeeper是一个典型的分布式数据一致性的解决方案。分布式应用程序可以基于它实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列等功能。ZooKeeper可以保证如下分布式一致性特性。
- 顺序一致性
- 原子性
- 单一视图
- 可靠性
-
基本概念
集群角色
Leader:为客户端提供读和写服务
- Follower:为客户端提供读服务和参与Leader选举
- Observer:为客户端提供读服务不参与Leader选举
问题:Observer存在的意义?
Observer可以在不影响写性能的情况下提升集群性能
会话(Session)
Session指客户端会话:一个客户端连接是指客户端和服务端之间的一次TCP长连接,当客户端启动时,首先会与服务器建立一个TCP连接,从第一次连接建立开始,客户端会话的生命周期也开始了,通过这个连接,客户端能够心跳检测与服务器保持有效的会话,也能够想ZooKeeper服务器发送请求并接受响应,同时还能够通过该连接接受来自服务器的Watch事件通知
数据节点(ZNode)
ZNode是ZooKeeper中最小数据单位,ZooKdeeper的数据模型是一颗树(ZNode Tree),由斜杠(/)进行分割的路径,就是一个ZNode,每个ZNode上都会保存自己的数据内容,同时还会保存一系列属性信息。
ZooKeeper节点类型可以分为三大类:
- 持久性节点(Persistent)
- 临时性节点(Ephemeral)
-
版本
ZooKeeper的每个ZNode上都会存储数据,对于每个ZNode,ZooKeeper都会为其维护一个叫做Stat的数据结构,Stat记录了这个ZNode的三个数据版本,分别是version(当前ZNode的版本)、cversion(当前ZNode字节点的版本),aversion(当前ZNode的ACL版本)
Watcher(事件监听器)
Watcher(事件监听器),是ZooKeeper中一个很重要的特性,ZooKeeper允许用户在指定节点上注册一些Watcher,并且在一些特定事件触发的时候,ZooKeeper服务端会将事件通知到感兴趣的客户端
ACL
ZooKeeper采用ACL(Access Control Lists)策略来进行权限控制,其定义来如下五种权限:
CREATE:创建字节点
- READ:获取节点数据和字节点列表
- WRITE:更新节点数据
- DELETE:删除字节点
- ADMIN:设置节点ACL