集群与负载均衡技术学习笔记二 分布式应用程序协调服务zookeeper
2016-03-15 16:58
656 查看
zookeeper 的使用
简介
Zookeeper是一个分布式的、开放源码的分布式应用程序协调服务。 它是Hadoop生态系统的重要组件。与之对应的Google类似的服务叫:Chubby数据模型
基本概念
角色
领导者学习者
客户端
设计目的
最终一致性可靠性
实时性
等待无关
原子性:更新只能成功或失败,没有中间状态。
顺序性
原理
Zookeeper的核心是原子广播,保证各个Server之间的同步。实现这个机制的协议叫作Zab协议。Zab协议有两种模式:恢复模式(选主)和广播模式(同步)。每个Server在工作过程中有三种状态:
- LOOKING
- LEADING
- FOLLOWING
重要概念
Znode,分为:Regular ZNode常规型Znode,用户需要显式的创建、删除
Ephemeral ZNode:临时型Znode,用户创建它之后,可以显式的删除,也可以在创建它的Session结束后,由ZooKeeper Server自动删除。
ZNode还有一个Sequential特性,如果创建的时候指定的话,该ZNode的名字后面会自动Append一个不断增加的SequenceNo。
Session
Client与ZooKeeper之间的通讯,需要创建一个Session,这个Session会有一个超时时间。因为ZooKeeper集群会把Client的Session信息持久化,所以在Session没超时之前,Client与ZooKeeper Server的连接可以在各个ZooKeeper Server之间透明地移动。
Watcher
ZooKeeper支持一种Watch操作,Client可以在某个ZNode上设置一个Watcher,来Wathcer该Znode上的变化。如果该Xnode上有相应的变化,就会触发这个Watcher,把相应的事件通知给设置Watcher的Client。Watcher是一次性的,触发一次就会被取消。
ZooKeeper特性
读、写(更新)模式WAL和Snapshot
FIFO
Linearizability
ZooKeeper ClientAPI
create(path,data,flags) 创建Znodedelete(path,version) 删除Znode
exists(path,watch) 判断指定的Znode是否存在
getData(path,watch) 读取指定Znode上的数据,并设置是否watch这个Znode
setData(path,watch) 更新
getChildren(path,watch) 获取子ZNode
sync(path) 把所有在Sync之前的更新操作都进行同步,达到每个请求都在半数以上的ZooKeeper Server上生效。
setAcl(path,acl) 设置Acl
getAcl(path) 获取Acl
主流应用场景
名称服务分布式应用中,通常需要一套完备的命令机制,既能产生唯一的标识,又方便识别记忆。
配置管理
组员管理
简单互斥锁
互斥锁
读写锁
屏障
双屏障
代码示例
Maven:<dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.9</version> </dependency>
本文学习参考:
http://cailin.iteye.com/blog/2014486/
http://blog.csdn.net/xinguan1267/article/details/38422149
相关文章推荐
- Linux命令经典面试题:统计文件中出现次数最多的前10个单词
- sizeof 和 strlen
- java使用HttpSession实现QQ访问记录
- 重装win7+uefi+gpt
- JAVA使用JDBC连接MySQl
- 11、数据库连接池DBCP的使用
- redis安装
- 上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些?各有什么优缺点?
- mysql开启外联方法
- jetty 3.9.0和 run-jetty-run1.3.3.2 eclipse插件的使用区别
- js原型链的理解
- 剑指offer代码解析——面试题25二叉树中和为某一值的路径
- 获取每个月的第一天和最后一天
- TCP协议
- Android Material Design简介
- Electron+React+Webpack+Vscode应用桌面开发平台搭建
- 剑指offer代码解析——面试题25二叉树中和为某一值的路径
- gtest学习帖
- 线性规划之单纯形算法
- Rust的数据类型和功能函数的返回值