一、简介

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. eclipse jetty 请求的操作无法在使用用户映射区域打开的文件上执行

    使用jetty  debug代码启动  在eclipse中进行运行调试,碰到无法编辑保存webapp下的文件 提示: 请求的操作无法在使用用户映射区域打开的文件上执行 解决方法: 从 jetty 7 ...

  2. 备份Android机上的照片

    [本文出自天外归云的博客园] 一年一度的春节放假开始了,今天收拾柜子发现了一台上大学时候用的android机,里面有几百张当年的回忆. 写了个shell脚本遍历了下照片存放的路径,然后用一个pytho ...

  3. Auty 2017——WebMonitor接口线上检测平台

    [本文出自天外归云的博客园] Auty 2017——WebMonitor接口检测平台 前篇 接口本地检测平台 本篇 接上篇,在本地检测平台的基础上,去掉本地服务,改功能为线上使用.好处是项目可以多人访 ...

  4. Kafka vs RocketMQ——多Topic对性能稳定性的影响

    引言 上期我们对比了RocketMQ和Kafka在多Topic场景下,收发消息的对比测试,RocketMQ表现稳定,而Kafka的TPS在64个Topic时可以保持13万,到了128个Topic就跌至 ...

  5. Eigen教程(3)

    整理下Eigen库的教程,参考:http://eigen.tuxfamily.org/dox/index.html 矩阵和向量的运算 提供一些概述和细节:关于矩阵.向量以及标量的运算. 介绍 Eige ...

  6. 11月Android笔记

    不知不觉又过了两个月了,过的够呛.新收获:百度云,视频直播,sqlite加密,lucene,SlidingPaneLayout. 我发现只要你有心,你期望的事情会接踵而来(不包括爱情= =) 上个游戏 ...

  7. [转]看懂Oracle执行计划

    原文地址:https://www.cnblogs.com/Dreamer-1/p/6076440.html 一:什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问路径 ...

  8. quartz定时任务框架的使用以及原理

    quartz定时任务时间设置 这些星号由左到右按顺序代表 :     *    *     *     *    *     *   *                                 ...

  9. 【Android】打电话Demo及Android6.0的运行时权限

    新手开局,查看一些旧资料,从打电话.发短信的小应用开始.代码很简单,主要是学习了: 用StartActivity()激活一个Activity组件.这里是激活了系统原生的打电话和发短信Activity. ...

  10. openvpn push "route

    ①在openvpn的配置文件里增加push "route 192.168.4.0 255.255.255.0",目的是为客户端加一条路由,这样客户端才有可能访问到办公网络中出VPN ...