Zookeeper
Zookeeper是一个分布式协调系统,分布式系统的协调工作就是通过某种方式,让每个节点的信息能够同步和共享。ZooKeeper通过共享存储的方式进行协调,ZooKeeper就像是svn,存储了任务的分配、完成情况等共享信息。每个分布式应用的节点就是组员,订阅这些共享信息。当主节点(组leader),对某个从节点的分工信息作出改变时,相关订阅的从节点得到zookeeper的通知,取得自己最新的任务分配。完成工作后,把完成情况存储到zookeeper。主节点订阅了该任务的完成情况信息,所以将得到zookeeper的完工的通知。
znode概念
在ZooKeeper中每个服务的都被保存在一个个数据节点上,这些节点被称为znode。它采用了类似文件系统的层级树状结构进行管理。如图
- /master,存储了当前主节点的信息
- /workers,下面的每个子znode代表一个从节点,子znode上存储的数据,如“foo.com:2181”,代表从节点的信息。
- /tasks,下面的每个子znode代表一个任务,子znode上存储的信息如“run cmd”,代表该内务内容
- /assign,下面每个子znode代表一个从节点的任务集合。如/assign/worker-1,代表worker-1这个从节点的任务集合。/assign/worker-1下的每个子znode代表分配给worker-1的一个任务。
每个节点都可以存储数据比如/workers/worker-1存储的数据是foo.com:2181。workers存储的数据并不关心,所以可以认为是“目录”。
节点类型
-
PERSISTENT–持久化目录节点,客户端与zookeeper断开连接后,该节点依旧存在。
-
PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点,客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号
-
EPHEMERAL-临时目录节点,客户端与zookeeper断开连接后,该节点被删除
-
EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点,客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号
zookeeper提供的服务原语
- 创建节点
- 删除节点
- 更新节点
- 获取节点信息
- 权限控制
- 事件监听
利用这些原语,可以实现很多功能,比如分布式锁,分布式协调通知。