一、官网:https://zookeeper.apache.org/
二、定义:分布式应用程序的分布式协调服务(提供一个看起来像是单机,实际上不是单机的服务;比如分布式锁)
三、设计目标
- 简单:性能要求、严格的顺序(适合同步原语-分布式锁)
- 复制:主从模式
-
从上可以看出这是一个主从模式,且路由在服务端(zk 节点互相熟悉)
-
主从模式就会存在主节点的单点故障,zk通过保证快速选举leader来保证高可用性(选举一般保证在200ms之内完成,大多数节点同意即可)
- 订阅:唯一的一个事务ID标记每次修改
- 快:适用于读取场景,比例大概是1:10(写:读),性能极佳
四、数据结构-分层文件系统
五、节点&短暂节点
- znode单独维护自己的数据和一些统计数据信息
- 每个节点都维护了ACL,控制目录下权限
六、更新和监视
客户端可以设置节点的监听
七、特性
- 顺序一致性-来自客户端的更新将按照发送的顺序应用。
- 原子性-更新成功或失败。没有部分结果。
- 单个系统映像-无论客户端连接到哪个服务器,客户端都将看到相同的服务视图。也就是说,即使客户端故障转移到具有相同会话的其他服务器,客户端也永远不会看到系统的较旧视图。
- 可靠性-应用更新后,此更新将一直持续到客户端覆盖更新为止。
- 及时性-确保系统的客户视图在特定时间范围内是最新的。
八、API(有很多都提供了-w参数,表示监听模式,偏响应式API)
-
create:在树中的某个位置创建一个节点
-
delete:删除节点
-
exists:测试某个位置是否存在节点
-
get data:从节点读取数据
-
set data:将数据写入节点
-
get children节点:获取节点子节点的列表
-
sync:等待数据传播