ZooKeeper 特点

  1. 顺序一致性: 从同一客户端发起的事务请求,最终将会严格地按照顺序被应用到 ZooKeeper 中去。
  2. 原子性: 所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的,也就是说,要么整个集群中所有的机器都成功应用了某一个事务,要么都没有应用。
  3. 单一系统映像 : 无论客户端连到哪一个 ZooKeeper 服务器上,其看到的服务端数据模型都是一致的。
  4. 可靠性: 一旦一次更改请求被应用,更改的结果就会被持久化,直到被下一次更改覆盖。

zookeeper工作原理

zookeeper的核心是原子广播,这个机制保证了各个Server之前的同步。实现这个机制的协议叫做Zab协议,Zab协议有两种模式:
**它们分别是恢复模式(选主)和广播模式(同步)。**当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数Server完成了和leader的状态同步以后,恢复模式就结束了,状态同步保证了leader和server具有相同的系统状态。

为了保证事务的顺序一致性,zookeeper采用了递增的事务id号(zxid)来标识事务。

ZooKeeper 设计目标

简单的数据模型
ZooKeeper 允许分布式进程通过共享的层次结构命名空间进行相互协调,这与标准文件系统类似。 名称空间由 ZooKeeper 中的数据寄存器组成 - 称为znode,这些类似于文件和目录。 与为存储设计的典型文件系统不同,ZooKeeper数据保存在内存中,这意味着ZooKeeper可以实现高吞吐量和低延迟。

可构建集群
为了保证高可用,最好是以集群形态来部署 ZooKeeper,这样只要集群中大部分机器是可用的(能够容忍一定的机器故障),那么zookeeper本身仍然是可用的。 客户端在使用 ZooKeeper 时,需要知道集群机器列表,通过与集群中的某一台机器建立 TCP 连接来使用服务,客户端使用这个TCP链接来发送请求、获取结果、获取监听事件以及发送心跳包。如果这个连接异常断开了,客户端可以连接到另外的机器上。

ZooKeeper 官方提供的架构图:

上图中每一个Server代表一个安装Zookeeper服务的服务器。组成 ZooKeeper 服务的服务器都会在内存中维护当前的服务器状态,并且每台服务器之间都互相保持着通信。集群间通过 Zab 协议(Zookeeper Atomic Broadcast)来保持数据的一致性。

顺序访问
对于来自客户端的每个更新请求,ZooKeeper 都会分配一个全局唯一的递增编号,这个编号反应了所有事务操作的先后顺序,应用程序可以使用 ZooKeeper 这个特性来实现更高层次的同步原语。 这个编号也叫做时间戳——zxid(Zookeeper Transaction Id)

高性能
ZooKeeper 是高性能的。 在“读”多于“写”的应用程序中尤其地高性能,因为“写”会导致所有的服务器间同步状态。(“读”多于“写”是协调服务的典型场景。)

其他

  1. 最终一致性:client不论连接到哪个Server,展示给它都是同一个视图,这是zookeeper最重要的性能。
  2. 可靠性:具有简单、健壮、良好的性能,如果消息被推送到一台服务器接收,那么它将被所有的服务器接收。
  3. 实时性:zookeeper保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息,但由于网络延时等原因,zookeeper不能保证两个客户端能同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用sync接口。
  4. 等待无关(wait-free):慢的或者失效的client不得干预快速的client的请求,使得每个client都能有效的等待。
  5. 原子性:更新只能成功或者失败,没有中间状态。
  6. 顺序性:包括全局有序和偏序两种,全局有序是指如果在一台服务器上消息a在消息b之前发布,则所有的Server上消息a都将消息b之前发布;偏序是指如果一个消息b在消息a后被同一个发送者发布,a必将排在b前面

Zookeeper特点及理解相关推荐

  1. Zookeeper应用场景理解

    发现分布式工具,谁都不能缺了zookeeper,虽然此前笔者在http://blog.csdn.net/fjssharpsword/article/details/50884201博客中略有了解,但总 ...

  2. 【Zookeeper系列】ZooKeeper管理分布式环境中的数据(转)

    原文地址:https://www.cnblogs.com/sunddenly/p/4092654.html 引言 本节本来是要介绍ZooKeeper的实现原理,但是ZooKeeper的原理比较复杂,它 ...

  3. 构建高可用ZooKeeper集群(转载)

    ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效.高可用的分布式协调服务,提供了诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知和分布式锁等分布式基础服务.由于 Zo ...

  4. 如何构建高可用ZooKeeper集群

    ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效.高可用的分布式协调服务,提供了诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知和分布式锁等分布式基础服务.由于 Zo ...

  5. 分布式服务框架 Zookeeper — 管理分布式环境中的数据

    FROM: http://www.superwu.cn/2014/11/26/1461 本节本来是要介绍ZooKeeper的实现原理,但是ZooKeeper的原理比较复杂,它涉及到了paxos算法.Z ...

  6. zookeeper安装包_构建高可用ZooKeeper集群

    ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效.高可用的分布式协调服务,提供了诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知和分布式锁等分布式基础服务.由于 Zo ...

  7. 构建高可用ZooKeeper集群

    构建高可用ZooKeeper集群 2017/01/23 | 分类: 技术架构 | 0 条评论 | 标签: ZOOKEEPER 分享到:9 原文出处: cyfonly ZooKeeper 是 Apach ...

  8. ZooKeeper管理分布式环境中的数据

    Reference: http://www.cnblogs.com/wuxl360/p/5817549.html 本节本来是要介绍ZooKeeper的实现原理,但是ZooKeeper的原理比较复杂,它 ...

  9. ZooKeeper学习第五期--ZooKeeper管理分布式环境中的数据

    2019独角兽企业重金招聘Python工程师标准>>> 引言 本节本来是要介绍ZooKeeper的实现原理,但是ZooKeeper的原理比较复杂,它涉及到了paxos算法.Zab协议 ...

  10. 010 Zookeeper

    1.Zookeeper入门 1.1.概念 Zookeeper从设计模式角度来理解,是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状 ...

最新文章

  1. 谷歌希望通过 Adiantum 为更多人提供加密功能
  2. 【django轻量级框架】HTML上传文件拦截到本地
  3. 计算机软件基础02243知识点,02243计算机软件基础(一) 历年真题
  4. 算法导论-概率发生器
  5. 神经网络与深度学习笔记
  6. [相关总结性文章] 写给即将入行的程序员的一封信
  7. WBOLT热门关键词推荐插件v1.3.0 Pro 绿色版
  8. 【Flink】Flink 状态恢复报错 StateMigrationException For heap backendsthe new state serializer must not be
  9. 转:CDC,CPaintDC,CClientDC,CWindowDC区别
  10. android qq音乐api使用,QQ音乐API
  11. autoComplete实现的输入下拉联想功能
  12. Atitit .c#的未来新特性计划草案
  13. Linux 命令tar
  14. 彻底凉了!全球最大电子书网站遭美政府封站
  15. 1.1二进制文件概述
  16. 别下载CAJ了!用这个插件,轻松在知网下载PDF
  17. 二叉树的构造(前序+中序)---(后序 + 中序)
  18. 炫界 (667) -(回应骑两小)_安徽省桐城市迷你小南瓜春季栽培技术
  19. 一个基于Web服务器的PoW区块链案例
  20. 微型计算机系统的发展历史,计算机的系统发展历史

热门文章

  1. Echars地图加散点图配置
  2. 游戏更新-拖拉机升级 Android
  3. 分享一种免费的.FLV格式视频转.MP4的方法,方便高效且不用迅捷转换器。。。
  4. 计算机专业考研复试流程,给未来的程序猿:2019计算机专业考研复试基本流程...
  5. 迭代局部搜索算法(Iterated local search)
  6. 软件工程——团队作业4
  7. excel如何转化成word文件
  8. Stellarium:诱人的星相不雅察软件
  9. netbeans如何导入java项目_netbeans导入java项目
  10. 基于matlab特征脸Eigenface算法的实现