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的创建或删除。

Zookeeper分布式过程协同技术 - 概念及基础的更多相关文章

  1. Zookeeper分布式过程协同技术 - 群首选举

    Zookeeper分布式过程协同技术 - 群首选举 群首概念 群首为集群中服务器选择出来的一个服务器,并被集群认可.设置群首目的在与对客户端所发起的状态变更请求进行排序,包括:create.setDa ...

  2. Zookeeper分布式过程协同技术 - 部署及设置

    Zookeeper分布式过程协同技术 -  部署及设置 Zookeeper支持单机模式.伪集群模式.集群模式三种部署方式.演示部署环境为CentOS.jdk版本为1.8.Zookeeper版本为3.4 ...

  3. ZooKeeper分布式过程协同技术详解1——ZooKeeper的概念和基础

    简介 分布式系统和应用,不仅能提供更强的计算能力,还能为我们提供更好的容灾性和扩展性. ZooKeeper是Google的Chubby项目的开源实现,它曾经作为Hadoop的子项目,在大数据领域得到广 ...

  4. ZooKeeper分布式过程协同技术详解2——了解ZooKeeper

    这个服务如何实现这些协作方面的原语? ZooKeeper基础

  5. Zookeeper基础教程(五):C#实现Zookeeper分布式锁

    分布式锁 互联网初期,我们系统一般都是单点部署,也就是在一台服务器完成系统的部署,后期随着用户量的增加,服务器的压力也越来越大,响应速度越来越慢,甚至出现服务器崩溃的情况. 为解决服务器压力太大,响应 ...

  6. 从游击队到正规军(三):基于Go的马蜂窝旅游网分布式IM系统技术实践

    本文由马蜂窝技术团队电商交易基础平台研发工程师"Anti Walker"原创分享. 一.引言 即时通讯(IM)功能对于电商平台来说非常重要,特别是旅游电商. 从商品复杂性来看,一个 ...

  7. Zookeeper——分布式一致性协议及Zookeeper Leader选举原理

    文章目录 一.引言 二.从ACID到CAP/BASE 三.分布式一致性协议 1. 2PC和3PC 2PC 发起事务请求 事务提交/回滚 3PC canCommit preCommit doCommit ...

  8. Java 网络编程---分布式文件协同编辑器设计与实现

    目录: 第一部分:Java网络编程知识 (一)简单的Http请求 一般浏览网页时,使用的时Ip地址,而IP(Internet Protocol,互联网协议)目前主要是IPv4和IPv6. IP地址是一 ...

  9. [转载] zookeeper 分布式锁服务

    转载自http://www.cnblogs.com/shanyou/archive/2012/09/22/2697818.html 分布式锁服务在大家的项目中或许用的不多,因为大家都把排他放在数据库那 ...

随机推荐

  1. 小谢第1问:为什么要写blog

    一直犹豫了好久,终于在csdn上弄好了自己的博客账号,感谢平台,以后在工作的过程中,遇到不懂得问题,解决后,会在这里记录下自己所遇到的问题

  2. Alpha总结展望——前事不忘后事之师

    这个作业属于哪个课程 软件工程 这个作业要求在哪里 Alpha总结展望--前事不忘后事之师 这个作业的目标 Alpha总结展望 作业正文 正文 其他参考文献 无 一.个人感想总结 吴秋悦: 对Alph ...

  3. Linux (一)概述

    认识操作系统 操作系统的作用 把计算机系统中对硬件设备的操作封装起来,供应用软件调用. ​ 2. 常见操作系统        1.2.1 PC端OS ​ 1.2.2  移动端OS ​ 1.2.3  服 ...

  4. Java实现 蓝桥杯 算法提高 日期计算

    算法提高 日期计算 时间限制:1.0s 内存限制:256.0MB 问题描述 已知2011年11月11日是星期五,问YYYY年MM月DD日是星期几?注意考虑闰年的情况.尤其是逢百年不闰,逢400年闰的情 ...

  5. Java实现 蓝桥杯 算法提高 宰羊

    试题 算法提高 宰羊 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 炫炫回了内蒙,肯定要吃羊肉啦,所有他家要宰羊吃. 炫炫家有N只羊,羊圈排成一排,标号1~N.炫炫每天吃掉一只羊( ...

  6. Java实现 蓝桥杯VIP 算法提高 多项式输出

    算法提高 多项式输出 时间限制:1.0s 内存限制:512.0MB 问题描述 一元n 次多项式可用如下的表达式表示: f(x)=a[n]xn+a[n-1]x(n-1)+-+a[1]x+a[0], a[ ...

  7. mybatis技术总结

    一.框架概述 day1 1.什么是框架 框架是系统的可重用设计,是对J2EE底层技术的封装(JDBC,IO流,多线程,Servlet,Socket). 2.框架解决了哪些问题? 1.解决了技术整合问题 ...

  8. windows server2012在已有.net4.5框架的基础上安装.net3.5的方法

    我们在一台服务器运行各种程序的时候难免会用到一些好用的但是很老的软件.老软件也就难免需要以前的那种环境来运行,但是老的环境与新的环境往往不兼容.下面我就来讲一讲系统在已有.net4.5的情况下怎么安装 ...

  9. 查看Android系统中硬件信息的文件

    文件目录: 使用Linux命令,进入到/proc目录 进入/proc目录,可以查看内存信息(memoinfo)或CPU信息(cpuinfo),使用cat命令

  10. Linux命令总结大全,包含所有linux命令

    使用说明:此文档包含所有的Linux命令,只有你想不到的没有你看不到的,此文档共计10万余字,有8400多行,预计阅读时间差不多需要3个小时左右,所以要给大家说一说如何阅读此文档 为了方便大家阅读,我 ...