功能:
是一个分布式协调服务,可用于服务发现,分布式锁,分布式领导选举,配置管理等。
Zookeeper 提供了一个类似于Linux 文件系统的树形结构(可认为是轻量级的内存文件系统,但只适合存少量信息(纯内存数据),完全不适合存储大量文件或者大文件),同时提供了对于每个节点的监控与通知机制。
角色划分:
Leader:支持读写,唯一支持写的节点
它会发起并维护与各Follwer及Observer 间的心跳。所有的写操作必须要通过Leader 完成再由Leader 将写操作广播给其它服务器。只要有超过半数节点(不包括observeer 节点)写入成功,该写请求就会被提交(类 2PC 协议)。
Follower:只读,支持选举
存在多个Follower,它会响应Leader 的心跳
Follower 可直接处理并返回客户端的读请求,同时会将写请求转发给Leader 处理;
负责在Leader 处理写请求时对请求进行投票。
Observer:只读,无选举权
Zookeeper 需保证高可用和强一致性,为了支持更多的客户端,需要增加更多Server; Server增多,投票阶段延迟增大,影响性能;引入Observer,Observer 不参与投票; Observers 接受客户端的连接,并将写请求转发给leader 节点; 加入更多Observer 节点,提高伸缩性,同时不影响吞吐率。
ZAB协议:
投票机制:
Zookeeper工作原理:
zNode:
zNode存储数据量较小:通常不大于1M
有四种形式的目录节点
1. PERSISTENT:持久的节点。
2. EPHEMERAL:暂时的节点。
3. PERSISTENT_SEQUENTIAL:持久化顺序编号目录节点。
4. EPHEMERAL_SEQUENTIAL:暂时化顺序编号目录节点。
三方件库
分布式锁使用方式: