分布式锁服务:一个松散耦合的分布式系统中粗粒度锁以及可靠性存储(低容量)的系统
属于Hadoop生态圈中的一个,名字服务器,分布式同步,组服务
特点:
数据模型:
- 命名空间
- 只有绝对路径,没有相对路径
- 以/为间隔的路径名序列组成
每个节点自身的信息
- 数据
- 数据长度
- 开始时间
- 结束时间
具有文件,路径的双重特点
节点类型:
- Persistent Nodes 永久性节点 默认
- Ephemeral Nodes 临时节点,仅在创建该节点client保持连接期间有效,一旦连接丢失,zookeeper会自动删除该节点
- sequence Nodes 顺序节点,client申请创建该节点时,zk会自动在节点路径末尾添加递增序号,这种类型实现分布式锁分布式queue等特殊功能关键
- 顺序节点不允许单独存在,所以会出现顺序节点+永久性节点和顺序节点+临时节点,一共四种节点。
监控机制:数据节点上设置,客户端被动收到通知(当父节点发现字节点挂了,父节点然后向客户端发送通知),各种读请求(除了消失监控,还有getData 数据发生变化的监控,getChildren,父节点上的字节点发生了变化,exit退出监控)
三个关键点:一次性监控,触发后,需要重新设置
保证先收到事件,再收到数据修改的信息
传递性,比如create 节点的时候会自动触发数据节点监控点,并同时触发父节点数据的监控点
数据权限:
每个节点上的访问控制链保存了各客户端对于该节点的访问权限
用一个三元组(机制:用户:权限)来定义客户端的访问权限例如:ip:19.22.0.9/16,READ 表示ip地址以12.22开头的主机有该数据节点的读权限,zookeeper自身提供ACL机制
应用场景:
- 配置管理,主要思想就是一个zk的节点背后是一个集群,相当于对一个zk节点访问就是对一个集群访问,因为这个集群会监控zk这个节点
- 集群管理
-
- 集群状态。 临时节点(Ephemeral),所有节点getChildren方法,获取所有节点状态,若某台服务器下线,自动删除该节点
- 选主服务器 临时节点和顺序节点搭配,选择最小编号的为主节点,当最小挂了后,由于是临时节点,自动删除,又出现一个小的几点当主服务器
队列管理:同步队列(所有成员都聚齐才能使用),FIFO队列