理解 zookeeper
2019独角兽企业重金招聘Python工程师标准>>>
理解 zookeeper
Zookeeper 主要用来解决分布式应用中经常遇到的一些数据管理,如统一命名服务器、状态同步服务、集群管理、分布式应用配置项的管理。
节点特性
- 同一时刻多台机器创建同一个节点,只有一个会争抢成功。利用这个特性可以做分布式锁。
- 临时节点的生命周期与会话一致,会话关闭则临时节点删除。利用这个特性经常来做心跳,动态监控,负载等动作。
- 顺序节点保证节点名全局唯一。这个特性可以用来生成分布式环境下的全局自增长id。
zookeeper 提供的服务
- 创建节点
- 删除节点
- 更新节点
- 获取节点信息
- 权限控制
- 事件监听
Zookeeper的集群对server进行了归类:
- Leader
- Follower
- Observer
Zookeeper 作用(使用场景)
- 配置中心 -- Zookeeper 的目录结构比较特殊,可以这个特性作为分布式的配置中心,当配置内容发生更新可以及时通知各服务器进行更新
- 集群选举 -- 当某一个服务宕机或者整个服务重启,可根据Zookeeper节点的顺序一致性来选择最大节点或者最小节点作为leader
- 分布式锁 -- 原理同集群选举,根据节点的顺序一致性来选择最小节点对应的那个服务获得锁,当服务执行完成删除节点就会释放锁,再由其他服务去争取锁。
- 注册中心 -- Zookeeper的目录以及子节点。主要通过对节点的管理做到发布以及事件监听做到订阅。
- 队列管理
- 同步队列 当一个队列的队员都聚齐时,队列才可用,否则一直等待所有的成员到达,这种是同步队列
创建一个父目录/synchronizing
,每个成员都监控标志(Set Watch)位目录/synchronizing/start
是否存在,然后每个成员都加入这个队列,加入队列的方式就是创建/synchronizing/member_i
的临时目录节点,然后每个成员获取、synchronizing
目录的所有目录节点,也就是 member_i,判断 i 的值是否已经是成员的目录,如果小于成员个数就等待synchronizing/start
的出现,如果相等就创建synchronizing/start
- 异步队列 队列按照FIFO方式进行入队和出队操作,例如实现生产者和消费者模型。
保证所有成员加入队列时都是有编号的,出队是通过getChildren() 方法可以返回当前所有的队列元素,然后消费其中最小的元素。
- 同步队列 当一个队列的队员都聚齐时,队列才可用,否则一直等待所有的成员到达,这种是同步队列
Zookeeper 在分布式中的作用:
使用Zookeeper提供分布式锁机制,从而实现分布式的一致性处理。
- Barrier
- Queue
- Lock
- 2PC
Java Api 接口
String create(String path, byte data[], List<ACL> acl, CreateMode createMode)
void create(String path, byte data[], List<ACL> acl, CreateMode createMode, StringCallback cb, Object ctx)void delete(String path, int version)
void delete(String path, int version, VoidCallback cb, Object ctx)Stat setData(String path, byte data[], int version)
void setData(String path, byte data[], int version, StatCallback cb, Object ctx)Stat setACL(String path, List<ACL> acl, int version)
void setACL(String path, List<ACL> acl, int version, StatCallback cb, Object ctx)Stat exists(String path, Watcher watcher)
Stat exists(String path, boolean watch)
void exists(String path, Watcher watcher, StatCallback cb, Object ctx)
void exists(String path, boolean watch , StatCallback cb, Object ctx)byte[] getData(String path, Watcher watcher, Stat stat)
byte[] getData(String path, boolean watch , Stat stat)
void getData(String path, Watcher watcher, DataCallback cb, Object ctx)
void getData(String path, boolean watch , DataCallback cb, Object ctx)List<String> getChildren(String path, Watcher watcher)
List<String> getChildren(String path, boolean watch )
void getChildren(String path, Watcher watcher, ChildrenCallback cb, Object ctx)
void getChildren(String path, boolean watch , ChildrenCallback cb, Object ctx)List<String> getChildren(String path, Watcher watcher, Stat stat)
List<String> getChildren(String path, boolean watch , Stat stat)
void getChildren(String path, Watcher watcher, Children2Callback cb, Object ctx)
void getChildren(String path, boolean watch , Children2Callback cb, Object ctx)
接口说明
- 每一种安同步还是异步
- 添加指定watcher还是默认watcher分为4中。默认watcher在Zookeeper 初始化中进行指定。
- 如果包含boolean watch 的读方法传入true,则将默认为watcher注册为所关注事件的watch。如果传入false则不注册watch。
CreateMode
- PERSISTENT 持续的。相比与EPHEMERAL,不会随着client session的close或者expire而消失
- PERSISTENT_SEQUENTIAL
- EPHEMERAL 短暂的,生命周期依赖于client session、对应session close/expire 后其znode也会消失。
- EPHEMERAL_SEQUENTIAL SEQUENTIAL意为顺序的。
Zookeeper 为了解决数据的一致性,使用Watcher的异步回调接口,将服务器znode的变化以事件的形式通知给客户端,主要是一种方向推送的机制,让客户端可以做出及时响应。比如及时更新后端的可用集群服务列表。
参考网站
Zookeeper Api(java)入门与应用(转)
保证分布式系统数据一致性的6种方案
解决分布式系统的一致性问题,我们需要了解哪些理论
分布式系统的事务处理
ZooKeeper典型应用场景一览
zookeeper中的基本概念
Watcher/Callback 参考网站
http://luzengyi.blog.163.com/blog/static/529188201064113744373/ http://luzengyi.blog.163.com/blog/static/529188201061155444869/
ACL
http://rdc.taobao.com/team/jm/archives/947
集群管理
paxos 实现 paxos算法介绍续 zookeeper代码解析
Zookeeper 官方文档
http://zookeeper.apache.org/doc/r3.3.2/recipes.html
TODO
Zookeeper 一致性
转载于:https://my.oschina.net/shichangcheng/blog/1553733
理解 zookeeper相关推荐
- 不理解Zookeeper一致性原理,谈何异地多活改造
来自:DBAplus社群 作者介绍 陈东明,饿了么北京技术中心架构组负责人,负责饿了么的产品线架构设计及基础架构研发工作.曾任百度架构师,负责百度即时通讯产品的架构设计.具有丰富的大规模系统构建和基础 ...
- 理解zookeeper的一致性及缺点
理解zookeeper的一致性及缺点 zookeeper保证 理解zookeeper的顺序一致性 zookeeper的缺点 参考链接 zookeeper使用ZAB协议达到了极高的一致性.所以在互联网业 ...
- 带你快速理解Zookeeper
理解Zookeeper 为什么需要Zookeeper? 用一句话概括就是:用起来像单机但是又比单机更可靠 1.集群.可靠 2.当信息还没同步完成时,不对外提供服务 3.同步的时间压缩的更短 主要解决了 ...
- ZooKeeper只完美解决Unable to read additional data from server sessionid 0x0报错问题,并带你深度理解ZooKeeper内部机制之选举机制
ZooKeeper只完美解决Unable to read additional data from server sessionid 0x0报错问题,并带你深度理解ZooKeeper内部机制之选举机制 ...
- 一篇文章助你深入理解zookeeper
Zookeeper作为一个分布式协调系统提供了一项基本服务:分布式锁服务,分布式锁是分布式协调技术实现的核心内容.像配置管理.任务分发.组服务.分布式消息队列.分布式通知/协调等,这些应用实际上都是基 ...
- 一文助你快速理解ZooKeeper
来源 | 编程新说 责编 | Carol 出品 | CSDN云计算(ID:CSDNcloud) 边界的产生与突破 不觉间孩子已经上小学了,前段时间还参加了一次家长会,那就以学校和开会来说吧,这大家都很 ...
- 理解zookeeper选举机制
转载:https://www.cnblogs.com/shuaiandjun/p/9383655.html 一.zookeeper集群 配置多个实例共同构成一个集群对外提供服务以达到水平扩展的目的,每 ...
- 3分钟理解zookeeper的watcher机制
代码呈上 package jeff.zookeeper.watcher;import java.util.List; import java.util.concurrent.CountDownLatc ...
- 带你轻松理解Zookeeper的选举机制
一,Zookeeper选举过程中服务器的状态. LOOKING:寻找leader状态,该状态下,服务器认为当前集群没有leader,会发起leader选举.在选举过程中,所有服务器的状态都是LOOKI ...
最新文章
- 20秋PHP作业3,北语20秋《PHP》作业3【标准答案】
- Apache软件基金会宣布Apache Unom成为顶级项目
- 安装图形界面、VNCserver
- 前端性能优化-图像优化
- 使用HTML5开发离线应用 - cache manifest
- 少儿计算机兴趣小组活动记录,2013年度儿童画兴趣小组活动记录Word编辑
- 直通BAT必考题系列:JVM的4种垃圾回收算法、垃圾回收机制与总结
- java——Runtime
- 架构的变迁,从分层架构先聊起
- scipy.signal.find_peaks(峰值检测)
- 一点一滴岗位测试答案_心理测试:凭直觉,选你最喜欢的一件睡衣,测你的野心是什么级别...
- 魔方全能小王子降临:一个完全不依赖人类知识的AI
- SQL分割字符串详解
- ELK下filebeat性能调优
- ajax获取数据中文乱码问题最简单的完美解决方案
- Java 并发之线程池学习
- sqlite3 命令行操作
- SD卡的详细资料(开发文档)
- 【vn.py】源码解析之 Dual Thrust 策略
- SDRAM 控制器(五)——数据读模块