Zookeeper学习
**1.ZooKeeper是什么?
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户
2.ZooKeeper提供了什么?
1)文件系统(持久化节点 和 临时节点的使用可以方便进行服务注册和服务发现等集群管理 以及顺序编号可以方便实现分布式锁(保持时序的)和分布式队列(先进先出)以及命名服务) 2)通知机制(监听机制可以实现 数据的发布与订阅 负载均衡 以及配置管理)
3.Zookeeper文件系统:
每个子目录项如 NameService 都被称作为znode,和文件系统一样,我们能够自由的增加、删除znode,在一个znode下增加、删除子znode,唯一的不同在于znode是可以存储数据的。
有四种类型的znode:
(临时节点可以用来服务发现 服务注册 顺序编号可以用来实现保持时序的分布式锁 命名服务(分布式自增id)分布式队列先进先出 )
1、PERSISTENT-持久化目录节点:客户端与zookeeper断开连接后,该节点依旧存在
2、PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点:客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号
3、EPHEMERAL-临时目录节点:客户端与zookeeper断开连接后,该节点被删除(node_0000000001)
4、EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点:客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号
4.Zookeeper通知机制:
客户端注册监听它关心的目录节点,当目录节点发生变化(数据改变、被删除、子目录节点增加删除 实现对应接口时,调用对应的函数实现–回调)时,zookeeper会通知客户端。(zklient订阅 指定路径的监听接口)
5.Zookeeper做了什么?
1.命名服务 2.配置管理 3.集群管理(服务发现和master选举) 4.分布式锁 (独占锁和保持时序) 5.队列管理 6 负载均衡
6.Zookeeper命名服务:
在zookeeper的文件系统里创建一个目录,即有唯一的path。在我们使用tborg无法确定上游程序的部署机器时即可与下游程序约定好path,通过path即能互相探索发现。(临时节点顺序编号)
7.Zookeeper的配置管理:
程序总是需要配置的,如果程序分散部署在多台机器上,要逐个改变配置就变得困难。现在把这些配置全部放到zookeeper上去,保存在 Zookeeper 的某个目录节点中,然后所有相关应用程序对这个目录节点进行监听,一旦配置信息发生变化,每个应用程序就会收到 Zookeeper 的通知,然后从 Zookeeper 获取新的配置信息应用到系统中就好。(监听机制 – 回调实现)
Zookeeper一个最常用的使用场景就是用于担任服务生产者和服务消费者的注册中心,服务生产者将自己提供的服务注册到Zookeeper中心,服务的消费者在进行服务调用的时候先到Zookeeper中查找服务,获取到服务生产者的详细信息之后,再去调用服务生产者的内容与数据,简单示例图如下: