ZooKeeper 特点/设计目的

ZooKeeper 作为一个集群提供数据一致的协调服务,自然,最好的方式就是在整个集群中的 各服务节点进行数据的复制和同步。

数据复制的好处

1、容错:一个节点出错,不至于让整个集群无法提供服务

2、扩展性:通过增加服务器节点能提高 ZooKeeper 系统的负载能力,把负载分布到多个节点上

3、高性能:客户端可访问本地 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 典型应用场景

命名服务

  命名服务是分布式系统中较为常见的一类场景,分布式系统中,被命名的实体通常可以是集 群中的机器、提供的服务地址或远程对象等,通过命名服务,客户端可以根据指定名字来获 取资源的实体、服务地址和提供者的信息。Zookeeper 也可帮助应用系统通过资源引用的方 式来实现对资源的定位和使用,广义上的命名服务的资源定位都不是真正意义上的实体资源, 在分布式环境中,上层应用仅仅需要一个全局唯一的名字。Zookeeper 可以实现一套分布式 全局唯一 ID 的分配机制。

配置管理

  程序总是需要配置的,如果程序分散部署在多台机器上,要逐个改变配置就变得困难。现在 把这些配置全部放到 ZooKeeper 上去,保存在 ZooKeeper 的某个目录节点中,然后所有相关应用程序对这个目录节点进行监听,一旦配置信息发生变化,每个应用程序就会收到 ZooKeeper 的通知,然后从 ZooKeeper 获取新的配置信息应用到系统中就好

集群管理

所谓集群管理无在乎两点:是否有机器退出和加入、选举 master

  对于第一点,所有机器约定在父目录 GroupMembers 下创建临时目录节点,然后监听父目录 节点的子节点变化消息。一旦有机器挂掉,该机器与 ZooKeeper 的连接断开,其所创建的 临时目录节点被删除,所有其他机器都收到通知:某个兄弟目录被删除,于是,所有人都知 道:有兄弟挂了。新机器加入也是类似,所有机器收到通知:新兄弟目录加入,又多了个新 兄弟。

  对于第二点,我们稍微改变一下,所有机器创建临时顺序编号目录节点,每次选取编号最小 的机器作为 master 就好。当然,这只是其中的一种策略而已,选举策略完全可以由管理员 自己制定。

分布式锁

有了 ZooKeeper 的一致性文件系统,锁的问题变得容易。 锁服务可以分为两三类

一个是写锁,对写加锁,保持独占,或者叫做排它锁,独占锁

一个是读锁,对读加锁,可共享访问,释放锁之后才可进行事务操作,也叫共享锁

一个是控制时序,叫时序锁

  对于第一类,我们将 ZooKeeper 上的一个 znode 看作是一把锁,通过 createznode 的方式来 实现。所有客户端都去创建 /distribute_lock 节点,最终成功创建的那个客户端也即拥有了 这把锁。用完删除掉自己创建的 distribute_lock 节点就释放出锁

  对于第二类, /distribute_lock 已经预先存在,所有客户端在它下面创建临时顺序编号目录 节点,和选 master 一样,编号最小的获得锁,用完删除,依次有序

队列管理

  两种类型的队列:

  1、同步队列:当一个队列的成员都聚齐时,这个队列才可用,否则一直等待所有成员到达。

  2、先进先出队列:队列按照 FIFO 方式进行入队和出队操作。

  第一类,在约定目录下创建临时目录节点,监听节点数目是否是我们要求的数目。

  第二类,和分布式锁服务中的控制时序场景基本原理一致,入列有编号,出列按编号。 同步队列的流程图:

ZooKeeper学习之路 (七)ZooKeeper设计特点及典型应用场景相关推荐

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

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

  2. ZooKeeper学习:CentOS7下ZooKeeper集群搭建

    文章目录 准备 1.虚拟机 2.安装包 安装 1.创建安装目录 2.文件配置 3.验证 启动zookeeper 查看zookeeper启动状态 停止zookeeper 查看zookeeper启动过程 ...

  3. 【python3的学习之路七】函数

    返回多个值 import mathdef move(x, y, step, angle=0):nx = x + step * math.cos(angle)ny = y - step * math.s ...

  4. Java学习之路(七):泛型

    泛型的概述和基本使用 作用:把类型明确的工作推前到创建对象或者调用方法的时候 泛型是一种参数化类型,把类型当做参数一样传递来明确集合的元素类型 泛型的好处 提高安全性 省去强转的麻烦 泛型的基本使用 ...

  5. IOS学习之路七(使用 Operation 异步运行任务)

    在 application delegate 头文件(.h)中声明一个 operation 队列和两个 invocation operations: #import <UIKit/UIKit.h ...

  6. HBase学习之路(七):理解计数器的基本概念及计数器的使用

    内容简介 一.计数器的基本概念 二.在Shell中创建并操作计数器 三.单计数器 四.多计数器 五.总结 一.计数器的基本概念 我在前两篇文章中详细介绍了HBase的过滤器,这是HBase的高级特性之 ...

  7. ZooKeeper学习第七期--ZooKeeper一致性原理

    ZooKeeper学习第六期---ZooKeeper机制架构 ZooKeeper学习第一期---Zookeeper简单介绍 ZooKeeper学习第二期--ZooKeeper安装配置 ZooKeepe ...

  8. ZooKeeper学习第四期---构建ZooKeeper应用

    ZooKeeper学习第一期---Zookeeper简单介绍 ZooKeeper学习第二期--ZooKeeper安装配置 ZooKeeper学习第三期---Zookeeper命令操作 ZooKeepe ...

  9. ZooKeeper学习第七期--ZooKeeper一致性原理(转)

    转载来源:https://www.cnblogs.com/sunddenly/p/4138580.html 一.ZooKeeper 的实现 1.1 ZooKeeper处理单点故障 我们知道可以通过Zo ...

最新文章

  1. 9、ctemplate文档,简记(2)
  2. 解决PHP大文件上传问题
  3. 【PC工具】200412更新百度网盘下载工具——最终最简单百度网盘下载方法及注意事项...
  4. Excel删除区域名
  5. python函数后面有多个括号怎么理解?
  6. mysql增量同步kafka_MySQL数据实时增量同步到Kafka - Flume
  7. 使用 requests 进行身份认证
  8. (转)密码学研究与区块链实践应该打破隔空喊话
  9. 密码键盘介绍三:数据加解密
  10. 深入探索C++对象模型(2)
  11. 计算机内码汉字,gbk内码(汉字机内码在线查询)
  12. 堪培拉地理位置经纬度_澳大利亚的经纬度气候地形
  13. 推荐:Redis桌面管理工具RedisDesktopManager
  14. Brave与Uphold合作推出钱包以奖励用户浏览
  15. 企业微信为何出现信息发不出去的情况
  16. 使用Python与图灵机器人聊天
  17. 深层学习:心智如何超越经验1.1 混乱的时钟
  18. PHP微信公众平台自定义菜单
  19. HTML网页设计基础——图文混排
  20. 最新RK3288开源开发板,需要的可以来看看

热门文章

  1. 测试设备和Android机怎么传递消息,在运行2.3的设备上进行测试时,android-Activit......
  2. java 文件上传 大小_java 上传文件大小转换为 GB/MB/KB/B
  3. linux eclipse 权限不够,linux下启动eclipse 权限不够 错误解决办法
  4. idea jstl需要导包吗_1,IDEA-安装及全局配置
  5. 如何提取多层json数据 python_Postgre数据库字段Json内容提取(基于Python)
  6. php编写一个计算相对路径的函数,php求相对路径的函数
  7. 多边形区域填充算法_花一分钟看一个案例,PPT中图片填充形状的应用
  8. token会被截取吗_做抖音搬运其他网站视频可以吗?
  9. mysql 命令删库名,MySQL控制台删除数据库命令 drop database 数据库名
  10. android开发switch自动关闭,更改Android Switch状态