zookeeper原理:分布式协同技术

有必要来重新巩固zookeeper思想了。

Zookeeper到底是什么!?

学一个东西,不搞明白他是什么东西,哪还有心情学啊!! 
首先,Zookeeper是Apache的一个Java项目,属于Hadoop系统,扮演管理员的角色。 
然后看到官网那些专有名词,实在理解不了。

那么我们来仔细研究一下这个东西吧!

Zookeeper能干嘛?!

1. 配置管理

这个好理解。分布式系统都有好多机器,比如我在搭建hadoop的HDFS的时候,需要在一个主机器上(Master节点)配置好HDFS需要的各种配置文件,然后通过scp命令把这些配置文件拷贝到其他节点上,这样各个机器拿到的配置信息是一致的,才能成功运行起来HDFS服务。Zookeeper提供了这样的一种服务:一种集中管理配置的方法,我们在这个集中的地方修改了配置,所有对这个配置感兴趣的都可以获得变更。这样就省去手动拷贝配置了,还保证了可靠和一致性。

移除点击此处添加图片说明文字

2. 名字服务

这个可以简单理解为一个电话薄,电话号码不好记,但是人名好记,要打谁的电话,直接查人名就好了。 
分布式环境下,经常需要对应用/服务进行统一命名,便于识别不同服务; 
类似于域名与ip之间对应关系,域名容易记住; 
通过名称来获取资源或服务的地址,提供者等信息

3. 分布式锁

碰到分布二字貌似就难理解了,其实很简单。单机程序的各个进程需要对互斥资源进行访问时需要加锁,那分布式程序分布在各个主机上的进程对互斥资源进行访问时也需要加锁。很多分布式系统有多个可服务的窗口,但是在某个时刻只让一个服务去干活,当这台服务出问题的时候锁释放,立即fail over到另外的服务。这在很多分布式系统中都是这么做,这种设计有一个更好听的名字叫Leader Election(leader选举)。举个通俗点的例子,比如银行取钱,有多个窗口,但是呢对你来说,只能有一个窗口对你服务,如果正在对你服务的窗口的柜员突然有急事走了,那咋办?找大堂经理(zookeeper)!大堂经理指定另外的一个窗口继续为你服务!

4. 集群管理

在分布式的集群中,经常会由于各种原因,比如硬件故障,软件故障,网络问题,有些节点会进进出出。有新的节点加入进来,也有老的节点退出集群。这个时候,集群中有些机器(比如Master节点)需要感知到这种变化,然后根据这种变化做出对应的决策。我已经知道HDFS中namenode是通过datanode的心跳机制来实现上述感知的,那么我们可以先假设Zookeeper其实也是实现了类似心跳机制的功能吧!

Zookeeper的特点

1 最终一致性:为客户端展示同一视图,这是zookeeper最重要的功能。 
2 可靠性:如果消息被到一台服务器接受,那么它将被所有的服务器接受。 
3 实时性:Zookeeper不能保证两个客户端能同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用sync()接口。 
4 等待无关(wait-free):慢的或者失效的client不干预快速的client的请求。 
5 原子性:更新只能成功或者失败,没有中间状态。 
6 顺序性:所有Server,同一消息发布顺序一致。

用到Zookeeper的系统

HDFS中的HA方案 
YARN的HA方案 
Hbase:必须依赖Zookeeper,保存了Regionserver的心跳信息,和其他的一些关键信息。 
Flume:负载均衡,单点故障

Zookpeeper的基本架构

移除这里写图片描述

1 每个Server在内存中存储了一份数据; 
2 Zookeeper启动时,将从实例中选举一个leader(Paxos协议); 
3 Leader负责处理数据更新等操作(Zab协议); 
4 一个更新操作成功,当且仅当大多数Server在内存中成功修改 
数据。

移除这里写图片描述

Zookpeeper Server 节点的数目

Zookeeper Server数目一般为奇数 
Leader选举算法采用了Paxos协议;Paxos核心思想:当多数Server写成功,则任务数据写 
成功。也就是说: 
如果有3个Server,则两个写成功即可; 
如果有4或5个Server,则三个写成功即可。 
Server数目一般为奇数(3、5、7) 
如果有3个Server,则最多允许1个Server挂掉; 
如果有4个Server,则同样最多允许1个Server挂掉 
既然如此,为啥要用4个Server?

Observer节点

3.3.0 以后 版本新增角色Observer
增加原因: 
Zookeeper需保证高可用和强一致性; 
当集群节点数目逐渐增大为了支持更多的客户端,需要增加更多Server,然而Server增多,投票阶段延迟增大,影响性能。为了权衡伸缩性和高吞吐率,引入Observer: 
Observer不参与投票;
Observers接受客户端的连接,并将写请求转发给leader节点;
加入更多Observer节点,提高伸缩性,同时不影响吞吐率。

Zookeeper写流程:

移除这里写图片描述

客户端首先和一个Server或者Observe(可以认为是一个Server的代理)通信,发起写请求,然后Server将写请求转发给Leader,Leader再将写请求转发给其他Server,Server在接收到写请求后写入数据并相应Leader,Leader在接收到大多数写成功回应后,认为数据写成功,相应Client。

Zookeeper数据模型

移除这里写图片描述

zookeeper采用层次化的目录结构,命名符合常规文件系统规范; 
每个目录在zookeeper中叫做znode,并且其有一个唯一的路径标识; 
Znode可以包含数据和子znode(ephemeral类型的节点不能有子znode); 
Znode中的数据可以有多个版本,比如某一个znode下存有多个数据版本,那么查询这个路径下的数据需带上版本; 
客户端应用可以在znode上设置监视器(Watcher) 
znode不支持部分读写,而是一次性完整读写 
Znode有两种类型,短暂的(ephemeral)和持久的(persistent); 
Znode的类型在创建时确定并且之后不能再修改; 
ephemeralzn ode的客户端会话结束时,zookeeper会将该ephemeral znode删除,ephemeralzn ode不可以有子节点; 
persistent znode不依赖于客户端会话,只有当客户端明确要删除该persistent znode时才会被删除; 
Znode有四种形式的目录节点,PERSISTENT、PERSISTENT_SEQUENTIAL、EPHEMERAL、PHEMERAL_SEQUENTIAL。

其实zookeeper的 Paxos算法,选举制度,选举出主节点,相当于岛上选国王一样,选票只能通过,奇数节点数有利于选举。同时,注意zookeeper脑裂出两个master,具体可以看看书,了解细节。

zookeeper原理:分布式协同技术相关推荐

  1. Zookeeper原理--分布式锁

    原文网址:Zookeeper原理--分布式锁_IT利刃出鞘的博客-CSDN博客 简介 本文介绍用Zookeeper来实现分布式锁的方法和原理. 节点类型 让我们来回顾一下Zookeeper节点的概念: ...

  2. 什么是分布式协同技术

    分布式协同技术是用来解决多进程的同步控制,使得进程有序的访问零界资源,而这种技术的本质是分布式锁.

  3. zookeeper 分布式过程协同技术详解.pdf_阿里大牛耗时18个月整理这份ZooKeeper分布式详解文档...

    前言 摩尔定律揭示了集成电路每18个月计算性能就会增加一倍.随着信息的飞速膨胀,很多应用都无法依赖单个服务器的性能升级来处理如此庞大的数据量,分布式系统和应用越来越受到人们的青睐.分布式系统和应用不仅 ...

  4. 精通Zookeeper系列开篇:进大厂不得不学的分布式协同利器!

    最近,有很多小伙伴让我更新一些Zookeeper的文章,正好也趁着清明假期把之前自己工作过程当中总结的Zookeeper知识点梳理了一番,打算写一个[精通Zookeeper系列],希望能够帮助小伙伴们 ...

  5. 再谈基于 Kafka 和 ZooKeeper 的分布式消息队列原理

    关于分布式消息队列,我在几个月前写过一篇文章:<深入浅出理解基于 Kafka 和 ZooKeeper 的分布式消息队列 >.最近,由于写作课程<分布式中间件实践之路>的契机,我 ...

  6. zookeeper实现分布式锁的原理及具体使用案例

    zookeeper跟redis一样,也是基于内存的. 官网: http://zookeeper.apache.org/ zookeeper是分布式系统的协调服务,提供配置管理.分布式协同.命名的中心化 ...

  7. 基于 Kafka 和 ZooKeeper 的分布式消息队列原理

    转载:https://gitbook.cn/books/5bc446269a9adf54c7ccb8bc/index.html 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量 ...

  8. 分布式专题-分布式缓存技术之MongoDB01-应用场景及实现原理

    目录导航 前言 什么是 NoSQL 关系型数据库 PK 非关系型数据库 NoSQL 数据库分类 MongoDB的数据结构与关系型数据库数据结构对比 MongoDB中的数据类型 图解MongoDB底层原 ...

  9. 基于 Zookeeper 的分布式锁实现

    1. 背景 最近在学习 Zookeeper,在刚开始接触 Zookeeper 的时候,完全不知道 Zookeeper 有什么用.且很多资料都是将 Zookeeper 描述成一个"类 Unix ...

最新文章

  1. caffe 下一些参数的设置
  2. C语言实现将彩色bmp图像转化为灰图、灰度图像反色
  3. Java学习之JDBC实现简单的CRUD(mysql数据库)
  4. 数据库连接字符串大全
  5. 超级有用的15个mysqlbinlog命令
  6. 【截至2006.12.31】毒霸反间谍可清除的部分流氓软件清单
  7. 解决iview中</Input>标签报错的方法
  8. mysql翻译逗号隔开的字典_【多测师小课堂】python数据类型之列表、字典、元祖、字符串...
  9. mac上latex生成不了pdf_Mac 10.8 下安装Sphinx并支持生成中文PDF
  10. 微信公众号开发:消息处理
  11. 测试微信好友是否删除软件,微信测试好友是否删除你的方法
  12. 【scratch案例教学】scratch中秋佳节 scratch创意编程 少儿编程 边玩边学 小朋友这样贺中秋
  13. Aurix TC3xx系列MCU ADC模块简介(一)
  14. LDV7 语音识别模块使用方法
  15. cjson解析器说明
  16. 小地鼠偷吃萝卜(模板)
  17. AWS EC2 云服务器 Red Hat Enterprise Linux Server release 7.4 (Maipo) vnc远程连接教程
  18. 实验四 数据查询——简单查询 Sql Server数据库实验
  19. 短网址ShortUrl的算法
  20. H5页面制作平台源码 微场景制作软件 含搭建部署教程

热门文章

  1. 【appium】appium自动化入门之基本参数完整版(67个appium基本参数和关键字)
  2. RTOS系列(12):使用SVC或PendSV启动OS流程详细分析
  3. quartz原理 java_Quartz原理解密
  4. 计算机dns怎么设置方法,dns设置_dns怎么设置【步骤|图文教程】-太平洋IT百科
  5. 玩转AgiileCDN(十三)——全站加速
  6. 发邮件如何隐藏IP地址
  7. nmn对身体有用吗,nmn修复效果怎么样,其中的原理你要知道
  8. LeetCode #739 - Daily Temperatures
  9. 最全面的文本生成评价指标大盘点
  10. idea如何设置jvm大小