zookeeper是什么
zookeeper是一个分布式应用协调系统,它主要提供了命名服务、状态同步服务、集群管理、分布式应用配置项的管理等功能。
简单的说,zookeeper=文件系统+通知机制。
- zookeeper维护着一个类似文件系统的数据结构。每个目录项被称为znode,和文件系统一样,我们能够自由的增加、删除znode,在一个zonde下增加、删除子znode。
- 客户端注册监听它关心的目录节点,当这个目录节点发生变化时,zookeeper会通知客户端。
zookeeper的主要操作就是围绕目录节点进行的:
- 创建节点
- 读取节点数据
- 更新节点数据
- 删除节点
- 监控节点变化
其中节点被组织成目录树的形式,每个节点下面都可以有一些子节点。
节点可以是以下四种类型:
- PERSISTENT:持久化目录节点,这个目录节点存储的数据不会丢失;
- PERSISTENT_SEQUENTIAL:顺序自动编号的目录节点,这种目录节点会根据当前已存在的节点数自动加1,然后返回给客户端已经创建成功的目录节点名;
- EPHEMERAL:临时目录节点,一旦创建这个节点的客户端与服务端的session超时,这个节点就会被自动删除;
- EPHEMERAL-SEQUENTIAL:临时自动编号节点。
监控节点变化时,可以监控一个节点的变化,也可以监控一个节点下所有子节点的变化。
zookeeper能做什么
- 命名服务
在分布式系统中,经常需要给一个资源生成唯一的一个ID,在没有中心管理节点的情况下生成这个ID并不是一件容易的事儿。zk就提供了这样一个命名服务。
一般是使用create方法创建一个自动编号的节点。 - 配置管理
主要用于多个节点共享配置,并且在配置发生更新时,利用zk可以让这些使用了这些配置的节点获得通知,进行重新加载等操作。 - 集群管理
集群管理主要有两点:一是资源定位,二是集群选主。
监听是否有机器退出和加入、动态选举Master(最小节点法、最大数据法) - 分布式锁
实现起来和集群选主基本一致,都是创建一个自动编号的临时节点,然后watch父节点,判断自己是否是最小编号节点。 - 队列管理
- 同步队列,当一个队列的成员都聚齐时,这个队列才可用,否则一直等待所有成员到达。
- 队列按照FIFO方式进行入队和出队操作。