Zookeeper到底是什么!?

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

在Zookeeper的官网上有这么一句话:ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services. 

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

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原理架构的更多相关文章

  1. Zookeeper原理架构与搭建

    一.Zookeeper到底是什么!? 学一个东西,不搞明白他是什么东西,哪还有心情学啊!! 首先,Zookeeper是Apache的一个java项目,属于Hadoop系统,扮演管理员的角色. 然后看到 ...

  2. Apache ZooKeeper原理剖析及分布式理论名企高频面试v3.7.0

    概述 **本人博客网站 **IT小神 www.itxiaoshen.com 定义 Apache ZooKeeper官网 https://zookeeper.apache.org/ 最新版本3.7.0 ...

  3. (转)Zookeeper原理和作用

    本周末学习zookeeper,原理和安装配置 本文参考: http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/ http:/ ...

  4. ZooKeeper的架构

    ZooKeeper的架构 看看下面的图表.它描述了ZooKeeper的“客户端-服务器架构”. 作为ZooKeeper架构的一部分的每个组件在下表中进行了说明. 部分 描述 Client(客户端) 客 ...

  5. (转)OpenStack —— 原理架构介绍(一、二)

    原文:http://blog.51cto.com/wzlinux/1961337 http://blog.51cto.com/wzlinux/category18.html-------------O ...

  6. Zookeeper(三) Zookeeper原理与应用

    一.zookeeper原理解析 1.进群角色描述 2.Paxos 算法概述( ZAB 协议)    分布式一致性算法 3.Zookeeper 的选主(恢复模式) 以一个简单的例子来说明整个选举的过程. ...

  7. Zookeeper原理和实战开发经典视频教程 百度云网盘下载

    Zookeeper原理和实战开发 经典视频教程 百度云网盘下载 资源下载地址:http://pan.baidu.com/s/1o7ZjPeM   密码:r5yf   

  8. 这可能是目前最透彻的Netty原理架构解析

    https://juejin.im/post/5be00763e51d453d4a5cf289 本文基于 Netty 4.1 展开介绍相关理论模型,使用场景,基本组件.整体架构,知其然且知其所以然,希 ...

  9. Netty原理架构解析

    Netty原理架构解析 转载自:http://www.sohu.com/a/272879207_463994本文转载关于Netty的原理架构解析,方便之后巩固复习 Netty是一个异步事件驱动的网络应 ...

随机推荐

  1. android 网络广播 类似QQ动态检查网络

    private ConnectivityManager mConnectivityManager; private NetworkInfo netInfo; 在onCreate 注册广播 Intent ...

  2. Java zxing生成二维码所需的jar包

    免费的,不需要积分. 共有2个jar包, 链接: https://pan.baidu.com/s/1QJcEkRQOp1NdrNAgGC6LvQ 密码: 4524

  3. [UE4]控件模板

    控件模板:一个UI可以作为另外一个UI的子控件,这个子控件就是控件模板. 控件模板一般使用“Size Box”组件作为根节点,给“Size Box”组件设置合适的尺寸,显示模式选择“Desired”, ...

  4. 让android程序根据重力感应旋转屏幕(支持4个方向旋转)

    原文地址:http://blog.csdn.net/yixiaoqingyuz/article/details/6453798代码如下: ChangeOrientationHandler.java p ...

  5. 关于-RegExp

    // exec() exec() 查找并返回当前的匹配结果,并以数组的形式返回. // test() test() 方法检索字符串中的指定值.返回值是 true 或 false. // compile ...

  6. 利用NPOI导出数据到Execl

    相信很多童鞋都开发过Execl的导入导出功能,最近产品中无论是后台数据分析的需要,还是前端满足用户管理的方便,都有Execl导入导出的维护需求产生. 以前做这个功能,如果是web,利用HttpCont ...

  7. uWSGI, Gunicorn, 啥玩意儿?

    因为nginx等优秀的开源项目,有不少本来不是做服务器的同学也可以写很多服务器端的程序了.但是在聊天中会发现,大家虽然写了不少代码,但是对wsgi是什么,gunicorn是什么,反向代理又是什么并不了 ...

  8. python学习之----收集整个网站

    如果只是从一个页面跳到另一个页面,那么网络爬虫是非常无聊的.为了有效地使 用它们,在用爬虫的时候我们需要在页面上做些事情.让我们看看如何创建一个爬虫来收 集页面标题.正文的第一个段落,以及编辑页面的链 ...

  9. 零基础学习python_with(34课)

    今天学习的with语句,with的表达形式如下:据说context必须是上下文管理器,这我就懵比了,啥玩意啊... with语句的表达形式: with context as var:    block ...

  10. swap空间不够导致安装失败解决方法

    在安装Oracle的时候,可能因为我们分配的swap空间不够导致安装失败.处理步骤如下: SWAP空间为2G [root@linux01 oracle]# free            total  ...