License: Attribution-NonCommercial-ShareAlike 4.0 International
本文出自 Suzf Blog。 如未注明,均为 SUZF.NET 原创。
转载请注明:http://suzf.net/post/565
1. ZooKeeper概述
hadoop的一个子项目,是对Google分布式同步系统 chubby 的开源实现。
针对大型分布式系统的可靠协调系统。包括 配置维护,名字服务,分布式同步,组服务 等在内的功能。
目标: 封装复杂,易出错的关键服务,将简单的易用的接口和性能高效,稳定的协同工作系统提供给用户。
2. ZK的设计目标
- 最终一致性
- 可靠性
- 实时性
- 等待无关
- 原子性 : 更新只能是成功或失败
- 顺序性
3. ZK数据模型
ZK实际上是一个小型的分布式文件系统,其维护一个层次化的树结构。树节点znode,用于存储数据(小数据文件,不能超过1M)。
ZK对数据的访问是原子性的,客户端每次读取都获取znode的全部数据,同样,ZK只提供覆盖和删除操作,不支持部分更新。
客户端通过文件路径访问znode(路径名师unicode字符串)。
属性:
- 3.1 层次化目录结构
- 3.2 Ephemeral (短暂的)
- 3.3 Sequence (序列)
- 3.4 Watch (监控器)
4. ZK工作原理
从编程的角度,ZK设计类似于windows下的注册表,有名称,树结构,键值对的关系,看做一个树形结构的数据库,分布不同的机器做名称管理。
ZK分为客户端和服务端。客户端值连接到整个ZK服务的某个服务器上。客户端使用并维护一个TCP连接,通过这个连接发送请求,接受响应,获取观察的时间以及发送心跳。
图:Zookeeper 系统模型图
工作模式: 启动集群后,多个zk server在工作前会选出一个Leader,在接下去的工作中,这个leader死了,剩下的服务器会知道这个leader死掉了,活着的ZK server会继续选出一个Leader,选举出Leader的目的是为了保证数据的一致性。
Watch : 客户端在每个znode节点上设置一个watch。如果znode节点有变更,watch就会被触发,watch所属的客户端就会接收通知。如果客户端和 所连接的ZK服务器断开连接时,其他客户端也会收到一个通知,也就是说一个ZK服务端可以对应多个客户端。
5. ZK实现机制
- 5.1 单机模式 一台zk服务器,适合测试用,不保证高可靠和靠性能
- 5.2 复制模式 ZK只需确保znode树的每次修改都被复制到机器的大部分机器上,这样就可以在部分机器故障时快速恢复ZK服务。
a. 选举Leader: 一个Leader,其余都是Follower
b. 原子性广播:
所有的写请求都先被转发到Leader上,Leader将更新操作广播到Follower。当大多数成员持久化存储这个更新后,Leader提交更新,并 回复客户端写操作成功。 Leader失效,会选一个新leader。以前的leader恢复,将变成一个Follower。这个选举过程非常快,不会影响性能。集群所有的机器正 在更新内存数据到znode树前,都会在本地硬盘保存一个备份。读请求可被任何一个机器响应,读过程实际上对内存的查找过程是非常方便,快速的。
6. ZK的特性
- 6.1 Paxos算法 ,ZK的灵魂
- 6.2 会话
客户端连接到ZK服务器时,建立一个会话(Session). 会话有一个有效时间,在这个时间范围内没有收到任何请求,会话则过期。过期的会话无法重新打开,所创建的短暂性的节点也被删除。真实的系统环境,可以靠 ping请求保持会话的有效性。
- 6.3 版本号:乐观加锁的机制,使客户端能够检测出对节点的修改冲突。
- 6.4 监控 :节点发送变化,watch机制可以让客户端得到通知。
要实现watch机制必须实现 org.apache.zookeeper.Watcher的接口。如下:
public void process(WatchedEvent event) { try { Stat stat = zooKeeper.exists(nodePath,false); if(stat != null) { zooKeeper.delete(nodePath,-1); } } catch(KeeperException e) { e.printStackTrace(); } catch(InterruptedException e) { e.printStackTrace(); } }
- process()方法是 org.apache.zookeeper.Watcher 定义的方法,当监控条件满足时,此方法被自动调用。上面的exists方法获取节点是否存在,存在则删除它。
~~~EOF~~~~
来源: 互联网