一、简介

ZooKeeper是一个高性能,分布式的,开源分布式应用协调服务。它提供了简单原始的功能,分布式应用可以基于它实现更高级的服务,比如同步,集群管理,命名空间,配置维护等。ZooKeeper使用了我们熟悉的文件树状结构作为自己的数据模型,因此是易于使用的。

我们知道,由于资源竞争等因素的影响,维护分布式服务的正常运行是一项极具挑战的事情。图1形象地说明了道路交通中没有信号灯的指挥协调导致出现交通阻塞混乱的情况出现。对于分布式系统来说,如果没有一个协调者的角色对各个分布式应用进行协调,分布式系统同样会出现一团糟的情况。


图1:混乱的交通

ZooKeeper背后的动机则是为了简化分布式应用的开发流程,并提供更加敏捷健壮的方案,以此来协调分布式系统中的各个应用服务。可以使用交通信号灯来形象比喻zk在分布式系统中的作用。


图2:交通信号灯对交通进行协调

二、特点

总体来说,ZooKeeper具有以下的特点。

1. 简单

ZooKeeper使用了类似文件系统的数据模型,即每个节点按照层级的关系组成了ZooKeeper的命名空间。一个ZooKeeper的命名空间示例如下:


图: ZooKeeper的层级命名空间

上图包含了五个节点(在ZooKeeper中称为znode,znode并不等于机器,实际中我们可以用znode表示分布式应用的一个进程),可以用它的路径来表示这些节点,例如/app1,/app1/p_2,等。
znode节点可以包含数据,也可以不包含。如果一个znode包含数据,那么数据被存储为字节数组(byte array)。字节数组的格式取决于我们自己的解析,使用可以使用Protocol Buffers,MessagePack等序列化。

为了操作znode,你仅需要使用以下的API。

  • create /path data
    创建一个名为/path的znode节点,并包含数据data
  • delete /path
    删除名为/path的znode
  • exists /path
    检查是否否在名为/path的znode
  • getData /path
    返回名为/path的znode的数据
  • setData /path data
    设置名为/path的znode的数据为data
  • getChildren /path
    返回/path节点下所有子节点列表

2. 多点


图: ZooKeeper服务架构

作为分布式应用的协调者,ZooKeeper要保证自己本身的高可用特性。为了达到这个目的,ZooKeeper跟其他分布式应用一样,被设计成多点的服务,以避免单点故障。客户端连接其中一个ZooKeeper进程,不同的ZooKeeper进程会进行同步的操作。

3. 有序

ZooKeeper使用一个数字来标识一个更新操作,以反映ZooKeeper事务的顺序特性。基于这一特性,ZooKeeper可以实现更新高级的抽象操作,例如同步等。

4. 快速

无论是读写操作,ZooKeeper可以实现快速响应。尤其对于读操作,ZooKeeper可以达到更快的响应速度。

三、保证

ZooKeeper简单且快速响应,它的目的是为构建复杂的分布式应用而服务,例如为分布式系统提供同步管理,集群管理等。为了达到这一目的,ZooKeeper提供以下的保证:

    • 顺序一致性
      ZooKeeper提供了顺序保障,这意味着同一个会话中的请求会以FIFO(先进先出)顺序执行。通常,一个客户端只打开一个会话,因此客户端请求将全部以FIFO顺序执行。
      如果客户端拥有多个并发的会话,FIFO顺序在多个会话之间未必能够保持。而即使同一个客户端中连贯的会话并不重叠,也未必能够保证FIFO顺序。
    • 原子性
      一个操作或者成功,或者失败,不会出现部分成功的结果
    • 单一系统映像
      虽然ZooKeeper本身以多点的形式运行,但对于客户端来说,无论连接的是哪个server进程,看到的是同样的视图。
    • 可靠性
      一旦更新操作被执行,更新的操作就会被持久化,直到被下一次更新覆盖。
    • 时效性
      客户端看到的系统视图在一定的时间范围内总是最新的。

ZooKeeper简述的更多相关文章

  1. 【Zookeeper】编程实战之Zookeeper分布式锁实现秒杀

    1. Zookeeper简述 我们要了解一样技术,首先应该要到它的官网,因为官网的信息一般都是最准确的,如下图是Zookeeper官网对它的介绍. 从官网的介绍中,可以总结出,Zookeeper是一个 ...

  2. Hadoop框架基础(五)

    ** Hadoop框架基础(五) 已经部署了Hadoop的完全分布式集群,我们知道NameNode节点的正常运行对于整个HDFS系统来说非常重要,如果NameNode宕掉了,那么整个HDFS就要整段垮 ...

  3. Zookeeper中的FastLeaderElection选举算法简述

    Zookeeper是一个开源的分布式应用协调项目, 当中为了保证各节点的协同工作,Zookeeper在工作时须要有一个Leader. 而Leader是怎样被选举出来的?Zookeep中使用的缺省算法称 ...

  4. ZooKeeper的简述

    一.简介 ZooKeeper是一个高性能,分布式的,开源分布式应用协调服务.它提供了简单原始的功能,分布式应用可以基于它实现更高级的服务,比如同步,集群管理,命名空间,配置维护等.ZooKeeper使 ...

  5. Pulsar、ZooKeeper、BookKeeper 作用简述

    Pulsar:采取了存储计算分离的技术ZooKeeper 集群的作用和在 Kafka 中是一样的,都是被用来存储元数据.BookKeeper 集群则被用来存储消息数据.BookKeeper 有点儿类似 ...

  6. 简述 zookeeper 基于 Zab 协议实现选主及事务提交

    Zab 协议:zookeeper 基于 Paxos 协议的改进协议 zookeeper atomic broadcast 原子广播协议. zookeeper 基于 Zab 协议实现选主及事务提交. 一 ...

  7. 基于ZooKeeper的Dubbo注册中心

    SOA服务治理 dubbo_zk 服务总线 感兴趣的M我微信:wonter 微信扫描,人人 CTO 大本营 基于SOA架构的TDD测试驱动开发模式 服务治理要先于SOA 简述我的SOA服务治理 从页面 ...

  8. 理解zookeeper选举机制

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  9. HDFS 架构简述

    HDFS 架构简述 Hadoop分布式文件系统(HDFS)是一个分布式的文件系统,运行在廉价的硬件上.它与现有的分布式文件系统有很多相似之处.然而与其他的分布式文件系统的差异也是显着的.HDFS是高容 ...

随机推荐

  1. 移动web开发(二)——viewport

    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scal ...

  2. EntityFramework Model有外键时,Json提示循环引用 解决方法

    正文之前先说两句,距离上篇博客已将近两个月,这方面的学习和探索并没有停止,而是前进道路上遇上了各种各样的问题,需要不断的整理.反思和优化,这段时间的成果,将在最近陆续整理发出来. 个人感觉国内心态太浮 ...

  3. Maven 解决 下载项目 compiler 为1.5的问题

    在 开发Maven 项目的时候,会发现个问题,就是下载下来的项目默认 compiler 为1.5 ,项目报错. 明明之前开发用的是1.7的啊. 这里只需要在pom.xml确定下就好了. <pro ...

  4. [转]快速搞懂Gson的用法

    原文地址:http://coladesign.cn/fast-understand-the-usage-of-gson/ 谷歌gson这个Java类库可以把Java对象转换成JSON,也可以把JSON ...

  5. idea中git git pull push需要反复输入密码

    在使用idea开发的过程中,在终端terminal中git pull和git push时遇到一个问题,一个是 每次提交都需要输入用户名和密码,,从网上找了下解决方案,记录一下. 解决: 打开git终端 ...

  6. 【WPF】右键菜单ContextMenu可点击区域太小的问题

    问题描述 正常使用右键菜单ContextMenu时,如果菜单项是不变的,可以直接在XAML中写死,如下是给一个Button按钮添加了右键菜单功能. <Button Content="T ...

  7. 【Unity】使用AssetDatabase编辑器资源管理

    最近参考了各位大神的资源,初步学习了Unity的资源管理模式,包括在编辑器管理(使用AssetDatabase)和在运行时管理(使用Resources和AssetBundle).在此简单总结编辑器模式 ...

  8. mysql的骚操作:自增长的字段同时插入到另一个字段

    如题 ' ); select * from information_schema.tables where table_schema ='mytest' and table_name='users'; ...

  9. connect设置超时的方法

    在使用TCP的connect连接服务器时,在默认情况下系统使用的是阻塞式socket,如果服务器当前不可用,则connect会等待知道超时时间到达,而这个超时时间是系统内核规定的,并不能使用setSo ...

  10. kubernetes应用部署原理

    Kubernetes应用部署模型解析(原理篇) 十多年来Google一直在生产环境中使用容器运行业务,负责管理其容器集群的系统就是Kubernetes的前身Borg.其实现在很多工作在Kubernet ...