分布式助手Zookeeper(一)
分布式助手Zookeeper(一)博客分类:
| 功能名 |
| 组管理服务 |
| 分布式配置服务 |
| 分布式同步服务 |
| 分布式命名服务 |
Zookeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户; Zookeeper的架构图如下:
Zookeeper的特点如下:
| 特点 | 说明 |
| 最终一致性 | 为客户端展示同一个视图,这是zookeeper里面一个非常重要的功能 |
| 可靠性 | 如果消息被到一台服务器接受,那么它将被所有的服务器接受。 |
| 实时性 | Zookeeper不能保证两个客户端能同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用sync()接口。 |
| 独立性 | 各个Client之间互不干预 |
| 原子性 | 更新只能成功或者失败,没有中间状态。 |
| 顺序性 | 所有Server,同一消息发布顺序一致。 |
zookeeper的工作原理, 1.每个Server在内存中存储了一份数据; 2.Zookeeper启动时,将从实例中选举一个leader(Paxos协议) 3.Leader负责处理数据更新等操作(Zab协议); 4.一个更新操作成功,当且仅当大多数Server在内存中成功修改数据。 zookeeper中的几个重要角色:
| 角色名 | 描述 | 领导者(Leader) | 领导者负责进行投票的发起和决议,更新系统状态,处理写请求 | 跟随者(Follwer) | Follower用于接收客户端的读写请求并向客户端返回结果,在选主过程中参与投票 | 观察者(Observer) | 观察者可以接收客户端的读写请求,并将写请求转发给Leader,但Observer节点不参与投票过程,只同步leader状态,Observer的目的是为了,扩展系统,提高读取速度。 | 客户端(Client) | 执行读写请求的发起方 |
为什么,在3.3.0版本之后,引入Observer角色?
Zookeeper需保证高可用和强一致性; 为了支持更多的客户端,需要增加更多Server; Server增多,投票阶段延迟增大,影响性能; 权衡伸缩性和高吞吐率,引入Observer Observer不参与投票; Observers接受客户端的连接,并将写请求转发给leader节点; 加入更多Observer节点,提高伸缩性,同时不影响吞吐率。
为什么zookeeper集群的数目,一般为奇数个?
Leader选举算法采用了Paxos协议; Paxos核心思想:当多数Server写成功,则任务数据写成功 如果有3个Server,则两个写成功即可; 如果有4或5个Server,则三个写成功即可。 Server数目一般为奇数(3、5、7) 如果有3个Server,则最多允许1个Server挂掉; 如果有4个Server,则同样最多允许1个Server挂掉 由此,我们看出3台服务器和4台服务器的的容灾能力是一样的,所以 为了节省服务器资源,一般我们采用奇数个数,作为服务器部署个数。 zookeeper的数据模型: 基于树形结构的命名空间,与文件系统类似 节点(znode)都可以存数据,可以有子节点 节点不支持重命名 数据大小不超过1MB(可配置) 数据读写要保证完整性 层次化的目录结构,命名符合常规文件系统规范; 每个节点在zookeeper中叫做znode,并且其有一个唯一的路径标识; 节点Znode可以包含数据和子节点(EPHEMERAL类型的节点不能有子节点); Znode中的数据可以有多个版本,比如某一个路径下存有多个数据版本,那么查询这个路径下的数据需带上版本; 客户端应用可以在节点上设置监视器(Watcher); 节点不支持部分读写,而是一次性完整读写。
Znode有两种类型,短暂的(ephemeral)和持久的(persistent); Znode的类型在创建时确定并且之后不能再修改; 短暂znode的客户端会话结束时,zookeeper会将该短暂znode删除,短暂znode不可以有子节点; 持久znode不依赖于客户端会话,只有当客户端明确要删除该持久znode时才会被删除; Znode有四种形式的目录节点,PERSISTENT、PERSISTENT_SEQUENTIAL、EPHEMERAL、EPHEMERAL_SEQUENTIAL。
Zookeeper的应用场景一(统一命名服务) 分布式环境下,经常需要对应用/服务进行统一命名,便于识别不同服务; 类似于域名与ip之间对应关系,域名容易记住; 通过名称来获取资源或服务的地址,提供者等信息 按照层次结构组织服务/应用名称 可将服务名称以及地址信息写到Zookeeper上,客户端通过Zookeeper获取可用服务列表类
Zookeeper的应用场景二(配置管理) 分布式环境下,配置文件管理和同步是一个常见问题; 一个集群中,所有节点的配置信息是一致的,比如Hadoop; 对配置文件修改后,希望能够快速同步到各个节点上 配置管理可交由Zookeeper实现; 可将配置信息写入Zookeeper的一个znode上; 各个节点监听这个znode 一旦znode中的数据被修改,zookeeper将通知各个节点
Zookeeper的应用场景三(集群管理)
分布式环境中,实时掌握每个节点的状态是必要的; 可根据节点实时状态作出一些调整; 可交由Zookeeper实现; 可将节点信息写入Zookeeper的一个znode上; 监听这个znode可获取它的实时状态变化 典型应用 Hbase中Master状态监控与选举 Zookeeper的应用场景四(分布式通知和协调) 分布式环境中,经常存在一个服务需要知道它所管理的子服务的状态; NameNode须知道各DataNode的状态 JobTracker须知道各TaskTracker的状态 心跳检测机制可通过Zookeeper实现; 信息推送可由Zookeeper实现(发布/订阅模式)
Zookeeper的应用场景五(分布式锁) Zookeeper是强一致的; 多个客户端同时在Zookeeper上创建相同znode,只有一个创建成功。 实现锁的独占性 多个客户端同时在Zookeeper上创建相同znode ,创建成功的那个客户端得到锁,其他客户端等待。 控制锁的时序 各个客户端在某个znode下创建临时znode (类型为CreateMode.EPHEMERAL_SEQUENTIAL),这样,该znode可掌握全局访问时序。
Zookeeper的应用场景六(分布式队列) 两种队列; 当一个队列的成员都聚齐时,这个队列才可用,否则一直等待所有成员到达,这种是同步队列。 队列按照 FIFO 方式进行入队和出队操作,例如实现生产者和消费者模型。(可通过分布式锁实现) 同步队列 一个job由多个task组成,只有所有任务完成后,job才运行完成。 可为job创建一个/job目录,然后在该目录下,为每个完成的task创建一个临时znode,一旦临时节点数目达到task总数,则job运行完成。
分布式助手Zookeeper(一)的更多相关文章
- 分布式助手Zookeeper(四)
分布式助手Zookeeper(四)博客分类: Zookeeper zookeeper配置同步zookeeper编程 Zookeeper是分布式环境下一个重要的组件,因为它能在分布式环境下,给我带来很多 ...
- 分布式助手Zookeeper(三)
分布式助手Zookeeper(三)博客分类: Zookeeper zookeeperapi操作zookeeper 本篇,散仙要介绍一下基于zookeeper的一些API的编程. 在此之前,我们先来熟悉 ...
- 分布式助手Zookeeper(二)
分布式助手Zookeeper(二)博客分类: Zookeeper zookeeperzookeeper的安装和配置观察者observer 散仙在上篇文章介绍了,zookeeper的一系列基础知识,如果 ...
- 真分布式SolrCloud+Zookeeper+tomcat搭建、索引Mysql数据库、IK中文分词器配置以及web项目中solr的应用(1)
版权声明:本文为博主原创文章,转载请注明本文地址.http://www.cnblogs.com/o0Iris0o/p/5813856.html 内容介绍: 真分布式SolrCloud+Zookeepe ...
- 一步到位分布式开发Zookeeper实现集群管理
说到分布式开发Zookeeper是必须了解和掌握的,分布式消息服务kafka .hbase 到hadoop等分布式大数据处理都会用到Zookeeper,所以在此将Zookeeper作为基础来讲解. Z ...
- 实现分布式队列ZooKeeper的实现
一.背景 有一些时候,多个团队需要共同完成一个任务,比如,A团队将Hadoop集群计算的结果交给B团队继续计算,B完成了自己任务再交给C团队继续做.这就有点像业务系统的工作流一样,一环一环地传下去,直 ...
- 分布式队列ZooKeeper的实现
一.背景 有一些时候,多个团队需要共同完成一个任务,比如,A团队将Hadoop集群计算的结果交给B团队继续计算,B完成了自己任务再交给C团队继续做.这就有点像业务系统的工作流一样,一环一环地传下 去, ...
- (九)分布式服务----Zookeeper注册中心
==>>点击查看本系列文章目录 首先看一下几种注册中心: 最老的就是Zookeeper了, 比较新的有Eureka,Consul 都可以做注册中心.可以自行搜索对比三者的优缺点. Zook ...
- 【分布式】Zookeeper的Leader选举
一.前言 前面学习了Zookeeper服务端的相关细节,其中对于集群启动而言,很重要的一部分就是Leader选举,接着就开始深入学习Leader选举. 二.Leader选举 2.1 Leader选举概 ...
随机推荐
- easyui源码翻译1.32--Layout(布局)
前言 使用$.fn.layout.defaults重写默认值对象.下载该插件翻译源码 布局容器有5个区域:北.南.东.西和中间.中间区域面板是必须的,边缘的面板都是可选的.每个边缘区域面板都可以通过拖 ...
- easyui源码翻译1.32--Combo(自定义下拉框)
前言 扩展自$.fn.validatebox.defaults.使用$.fn.combo.defaults重写默认值对象.下载该插件翻译源码 自定义下拉框显示一个可编辑的文本框和下拉面板在html页面 ...
- 10. 将摄像机对准物体,并显示整个对准过程,摄像机Zoom
1. 如果把代码放到按钮事件中调用,达不到想要的效果 2. 可以不用委托,但是要在Update函数中写调用CameraZoonIn的代码 3. 有很多需要改进的地方,可以参考使用 iTween 插件达 ...
- EJB理解
1. 我们不禁要问,什么是"服务集群"?什么是"企业级开发"? 既然说了EJB 是为了"服务集群"和"企业级开发",那么 ...
- URAL1244. Gentlemen(背包)
链接 以前做的题 VJ太水了 数组里面的数可能会小于0 当时没判断 #include <iostream> #include<cstdio> #include<cstri ...
- Hadoop源代码分析【IO专题】
由于Hadoop的MapReduce和HDFS都有通信的需求,需要对通信的对象进行序列化.Hadoop并没有采用Java的序列化(因为Java序列化比较复杂,且不能深度控制),而是引入了它自己的系统. ...
- bzoj1821
题目要求最近的两个部落间距尽可能最远 不难想到一种贪心的方法,对每两个点之间距离从小到大排序, 把每个点看成一个部落 然后不断将距离近的两个部落合并成一个部落,直到剩下了k个部落,那么下一条不同部落之 ...
- 阿里云数加平台——BI报表使用概述和总结
先声明一点,本人写此文章初衷只为对前段时间的工作做些总结,并做个记录,以备日后查用,此外也顺便与他人分享一下.当然间接上也为阿里云的大数据平台做了个免费广告.以下开始正文. 首先进入数加服务的控制面板 ...
- vijos p1193 扫雷
描述 相信大家都玩过扫雷的游戏.那是在一个n*n的矩阵里面有一些雷,要你根据一些信息找出雷来.万圣节到了,“余”任过流行起了一种简单的扫雷游戏,这个游戏规则和扫雷一样,如果某个格子没有雷,那么它里 ...
- 白书P61 - 点集配对问题
白书P61 - 点集配对问题 状压DP #include <iostream> #include <cstdio> #include <cstring> using ...