目录
一、简介
1.官网的介绍
在部署分布式应用的时,需要花费大量的时间去修复bug和服务之间的竞争,zookeeper的作用是为分布式系统的配置、命名和同步提供中心化服务以及组服务的。
简言之,zk就是为分布式应用提供一致性服务的软件!
2.应用场景
- 数据或应用的发布/订阅
- 负载均衡
- 命名服务
- 集群管理
- 分布式锁
- 分布式队列
...
二、构成和原理
1.本质:分布式文件管理系统+通知系统
1.1数据结构
zookeeper维护了一个类似于linux系统的文件系统,不同的是每一个节点是一个称之为znode,用唯一路径表示,/代表根目录。每个节点可以最大可以存储1MB的数据。
1.2节点的类型
- 持久节点(Persistant Node)
- 临时节点(Ephemeral Node)
节点创建后类型不能够更改,客户端与zookeeper服务器建立会话连接结束后,临时节点会自动删除,而持久节点会一直存在,两种节点当然也可以手动删除;临时节点不能够拥有子节点。
- 持久顺序节点(Persistant Node)
- 临时顺序节点(Ephemeral Node)
当基于某父节点/a创建顺序节点/a/p时,zookeeper会根据/a的zxid创建一个全图唯一的自增序列编号1,2,3...;节点的命名就会带着标号顺序递增。
1.3节点的参数
cZxid:创建当前的事务ID(也就是Zxid的值)
ctime:当前节点的创建时间
mZxid:最后修改节点的事务ID
mtime:节点最后的修改时间
pZxid:最后添加或删除子节点的事务ID
cversion:当前节点子节点的版本信息(子节点的增加、删除都会影响版本信息)
dataVersion:当前节点的数据版本
aclVersion:当前节点的acl版本。
ephemeralOwner:当前节点是否临时节点,是则显示为有者的 session ID, 否则设置为零
dataLength:当前节点数据字段的长度
numChildren:当前节点子节点的数量
2.运行流程
读:客户端无论读请求的是Leader 还是 Follower ,直接返回结果。
写:客户端写请求leader,leader写入并分发给follower让其写入,收到一半以上的ack时通知客户端写入成功;
客户端写请求follower,follower先转发个leader,leader写入后再讲写请求分发给follower,收到一半以上的ack时通知客户端写入成功。
上述过程,Zookeeper 读写的数据一致性主要依赖于ZAB协议的消息广播、崩溃恢复、数据同步三个过程,参考以下