Zookeeper分布式过程协同技术 - 概念及基础

Zookeeper是什么?

  • Zookeeper是一种分布式过程协同技术,其所提供的客户端API功能强大,其中包括:
  • 保障强一致性。有序性和持久性。
  • 实现通用的同步原语的能力。
  • 在实际分布式系统中,并发往往导致不正确的行为。Zookeeper提供了一种简单的并发处理机制。

关于Zookeeper名字的来源

Zookeeper由雅虎研究院开发,开发团队原来想使用动物命名项目,在讨论时大家觉得分布式系统就像一个动物园,胡乱且难以管理,而Zookeeper就是将这一切变得可控。遂起名为Zookeeper,意为动物园管理员。

Zookeeper使用场景

  • 命名服务

命名服务是指通过路径名称来获取服务的地址。首先zookeeper创建一个全局路径,服务方在全局路径下写入服务的地址(或者名称),服务消费方在启动后watch全局路径的数据和变化。注意,这里的节点均为临时节点,在服务连接中断或者宕机时,通过临时节点消失能够通知订阅方感知变化。

  • 配置管理

服务分布部署在不同的机器上,将全局的配置信息存放于zookeeper的节点下,客户端通过订阅节点的数据变化获取到配置信息。当节点中的配置信息发生变化时,客户端可以通过watch节点发送的消息感知,从而修改服务本地的配置管理信息。

  • 集群管理

当有新机器加入集群时,由新机器的客户端在指定的目录下新建临时节点,服务注册管理端通过订阅指定目录的变化,收到了新增节点的通知后,将新机器加入集群服务的列表。当机器退出集群或者宕机时,临时节点将会被删除,同样可以通知服务注册管理端,有机器退出了集群。

  • 分布式锁

zookeeper的分布式锁可以分为2种,保持独占或者控制时序。

对于保持独占来说,可以把一个节点看做是一把锁,通过创建节点的方式来抢占锁资源。如果创建节点成功,客户端也就持有了这把锁,如果创建失败,则订阅节点的变化,如果收到节点删除消息,再次尝试创建节点来抢占锁资源。

对于控制时序来说,通过在指定目录下创建临时有序节点,编号最小的节点首先持有锁资源,每个后续节点都订阅前一个节点。拥有锁资源的客户端在操作完毕后,删除自己创建的节点。后续节点收到前置节点的删除通知后,即获取了锁资源,可以进行业务操作。

Zookeeper基础

Zookeeper通过节点(znode)来实现原语的功能,并不直接暴露原语。Znode指Zookeeper操作和维护一个小型的数据节点,类似于文件系统的层级树状结构进行管理。

图:Zookeeper数据结构示例

·  /作为跟目录节点,根节点下有/workers和/tasks两个字节点。

· /workers节点作为父节点,其下的每一个znode子节点用于保存系统中的可用worker,节点中保存着worker子节点的元数据信息。

· /tasks节点作为父节点,其下每个znode子节点用于保存一个代执行的任务,节点中保存着任务的详细数据。

API概念

ZookeeperAPI提供了以下方法来实现地znode的控制。

create /path data

  创建一个名为/path的znode节点,并包含数据data。

delete /path

  删除名为/path的znode。

exists /path

  检查是否存在名为/path的节点。

setData /path data

  设置名为/path的znode节点的数据为data。

getData /path

  返回名为/path节点的数据信息。

getChildren /path

  返回所有/path节点的所有子节点列表。

Znode类型

在新建znode时,需要指定该节点类型,不同的类型决定了znode节点的行为方式,Zookeeper提供了4种不同的znode类型。

持久节点和临时节点

znode节点可以是持久(persistent)节点,还可以是临时(ephemeral)节点。持久的znode,如/path,只能通过delete来进行删除。临时的znode与之相反,当创建的客户端崩溃或者关闭了与Zookeeper的连接时,这个节点就会被删除。

持久znode是一种非常有用的znode,可以通过持久类型znode为应用保存一些数据,即使znode的创建者不再属于应用系统时,数据也可以保存下来而不丢失。例如,在主-从模式中,需要保存从节点的任务分配情况,即使分配任务的主节点已经崩溃了。

一个临时znode,在以下两种情况会被删除:

  1. 当创建该znode的客户端的会话因超时或主动关闭而中止时。
  2. 当某个客户端(不一定是创建者)主动删除该节点时。

注:因为临时的znode在其创建者的会话过期时被删除,所以我们现在不允许临时节点拥有子节点。

有序节点

一个有序znode节点被分配唯一一个单调递增的整数。当创建有序节点时,一个序号会被追加到路径之后。例如,客户端创建一个有序znode节点,其路径为/tasks/task-,那么该znode节点为/tasks/task-1。有序znode通过提供了创建具有唯一名称的znode的简单方式。同时也通过这种方式可以直观地查看znode的创建顺序。

Znode一共有四种:持久节点、临时节点、持久有序节点,临时有序节点。

监视与通知

Zookeeper提供基于通知的机制提供对节点的监视能力。客户端向Zookeeper注册需要接收通知的znode,通过对znode的设置监视点(watch)来接收通知。监视点是一个单次触发的操作,每次设置只会触发一次。为了接收多个通知,客户端必须在每次通知后设置新的监视点。在设置新监视点前客户端会先读取znode中的数据,所以不同担心会错过状态的变化。

Zookeeper可以定义不同类型的通知,如监控znode的数据变化、监控znode子节点的变化、监控znode的创建或删除。

最新文章

  1. bootscript/javascript组件
  2. android之广播(一)
  3. js 字符串分割成字符串数组 遍历数组插入指定DOM里 原生JS效果
  4. 纸上谈兵:排序算法简介及C实现
  5. ( 解压缩版 免安装版 或 zip版 )如何修改mysql5.6.24 字符编码
  6. zpf 视图
  7. 行列转换 pivot
  8. 解决flash挡住层的问题
  9. Winform- DotNetBar for Windows Forms的安装的添加
  10. oracle nologging用法
  11. mouse的各种事件
  12. 论文笔记(1):From Image-level to Pixel-level Labeling with Convolutional Networks
  13. jQuery (含义 及 优缺点)
  14. SQL Server 自动循环归档分区数据脚本
  15. form-data、x-www-form-urlencoded的区别
  16. 4358: permu
  17. Linux 磁盘管理命令
  18. MongoDB--连接客户端和服务
  19. 快速幂的求解-java方法(int范围之内)
  20. 〖Linux〗穿越城墙之后,直接连接国内网站的路由配置

热门文章

  1. 2018-ECCV-PNAS-Progressive Neural Architecture Search-论文阅读
  2. js运算符和if语句,switch语句
  3. Java实现 LeetCode 328 奇偶链表
  4. Java实现 蓝桥杯VIP 算法提高 特殊的质数肋骨
  5. Java实现 LeetCode 112 路径总和
  6. Java实现 LeetCode 16 最接近的三数之和
  7. java实现Prim算法
  8. java实现蓝桥杯密码脱落
  9. java实现第五届蓝桥杯切面条
  10. CSS 简介/特点/优势/给特定浏览器提供不同样