首页 > 技术文章 > Zookeeper原理

HusterJin 2020-09-06 16:25 原文

https://www.cnblogs.com/dream-to-pku/p/9513188.html

 

1.原理:zookeeper = 文件系统 + 通知机制(与客户端交互)

1)zk其实就是一个文件系统

 

 每个子目录项其实就是一个znode,只不过znode中可以存储数据

四种类型的znode:

  • 1、PERSISTENT--持久化目录节点
    •   客户端与zookeeper断开连接后,该节点依旧存在
  • 2、PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点
    •   客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号
  • 3、EPHEMERAL-临时目录节点
    •   客户端与zookeeper断开连接后,该节点被删除
  • 4、EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点
    •   客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号

2)通知机制

客户端注册监听它关心的目录节点,当目录节点发生变化(数据改变、被删除、子目录节点增加删除)等,zookeeper会通知客户端。

 

 

2.zk的使用场景

1、命名服务(持久化目录节点)

在zookeeper的文件系统里创建一个目录,即有唯一的path,在我们使用tborg无法确定上游程序的部署机器时即可与下游程序约定好path,通过path即能互相探索发现。

2、配置管理(持久化目录节点)

把配置全部放到zookeeper上去,保存在 Zookeeper 的某个目录节点中,然后所有相关应用程序对这个目录节点进行监听,一旦配置信息发生变化,每个应用程序就会收到 Zookeeper 的通知,然后从 Zookeeper 获取新的配置信息应用到系统中就好。

3、集群管理(临时性顺序编号节点)

所谓集群管理无在乎两点:是否有机器退出和加入、选举master。

4、分布式锁(临时性顺序编号节点)

有了zookeeper的一致性文件系统,锁的问题变得容易。锁服务可以分为两类,一个是保持独占(创建znode,只有一个系统能成功创建),另一个是控制时序(临时性顺序增加节点,序号最小的获取得到锁)。

5、队列管理

两种类型的队列:

  • 1、 同步队列,当一个队列的成员都聚齐时,这个队列才可用,否则一直等待所有成员到达。
  • 2、队列按照 FIFO 方式进行入队和出队操作。

第一类,在约定目录下创建临时目录节点,监听节点数目是否是我们要求的数目。

第二类,和分布式锁服务中的控制时序场景基本原理一致,入列有编号,出列按编号。

 

推荐阅读