1、【zookeeper】zookeeper简介
1 官方定义:
Zookeeper是一个高性能的,分布式的,开源分布式的应用协调服务。它提供了简单原始的功能,分布式应用基于它实更高级 的服务,比如,配置管理,集群管理。它被 设计易于编程,使用文件系统目录树作数据模型。服务端端跑在java,提供java和C的客户端 API 。
在官方定义中,我们可以主要解释两点就:
1、分布式
2、协调服务
1、A distributed system consists of multiple computers that communicate through a computer network and interact with each other to achieve a common goal
- 多台机器
- 通过网络通信
- 相互交互
- 共同目标
协调:多个节点一起完成一个目标。- 集群成员管理
- 锁
- 选主
- 同步
- 发布-订阅
zookeeper就是为了解决以上问题而诞生的。
2 基本概念:
集群角色
- Leader客户端提供读和写服务
zk 集群的主节点,所有的写操作,都必须哟leader来完成。其他服务连接的时候不一定是leader,可以是其他的follower,observer等,当有写操作的时候则交给leader。 - Follower提供读服务,所有写服务都需要转交给Leader角色,参与选举
- Observer提供读服务,参选举过程,一般是了增强zk集群的读请求并发能力 (不常用)
会话session
- Zk的客户端与zk的服务端之间的连接 。
- 通过心跳检测,保持客户端连接的存活。
- 接收来自服务端的watch事件通知 。
- 可以设置超时时间 。
数据节点Znode
- 不是机器的意思 。
- 是Zk树形结构中的数据节点,用于存储数据
- 持久节点:一旦创建,除非调用删除操作,否一直存在zk上
- 临时节点:与客户端的会话绑定,一客户端会话失效,这个客户端建的所有临时节点都会被移除
- SEQUENTIAL Znode:创建节点时,如果置属性SEQUENTIAL,会自在节点面追一个 整型数字
版本
- Version:当前Znode的版本
- Cversion:当前Znode的节点的版本
- Aversion:当前Znode的ACL(访问控制)版本
Watcher
- 作用于Znode节点
- 多种事件通知:数据更新,子节点状态等
ACL
- Access Control Lists
- 类似于linux的权限控制
- CREATE:创建子节点的权限
- READ:获取节点数据和子节点列表的权限
- WRITE:更新节点数据的权限
- DELETE:删除子节点的权限
- ADMIN:置节点ACL的权限
CREATE和DELETE是针对节点的权限控制
3 数据模型
分层结构
- 树形结构中的每个节点做Znode
- 每个Znode都有数据(byte[]类型),也可以有子节点
- 节点路径
- 斜线分隔:/Zoo/Duck
- 没有相对路径
- 通过数据结构stat来储数据的变化 ACL的变化和时间戳
- 数据发变化时,版本号会递增
- 对Znode中的数据进行读写操作