ZooKeeper -- 分布式开源协调服务
2014-11-23 17:47
357 查看
ZooKeeper是一个为分布式应用所设计的开源协调服务,适用于大型的分布式系统,可以提供统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等服务。ZooKeeper支持Java和C两种编程语言的接口,可以很方便地实现一致性、组管理、leader选举和某些协议。
一、ZooKeeper简介
1、一致性
1) 顺序一致性:客户端的更新顺序与他们被发送的顺序相一致;
2) 原子性:更新操作要么全部成功,要么全部失败;
3) 单系统镜像:无论客户端连接到哪一个服务器,都可以看到相同的ZooKeeper视图;
4) 可靠性:一旦一个更新操作被应用,那么在客户端再次更新它之前,其值将不会被改变;
5) 实时性:在特定的一段时间内,系统的任何变更都将被客户端检测到;
2、为什么使用ZooKeeper
大部分分布式应用需要一个主控、协调器或控制器来管理物理分布的子进程(如资源、任务分配等),而目前大部分应用需要开发私有的协调程序,缺乏一个通用的机制。此外协调程序的反复编写浪费,且难以形成通用、伸缩性好的协调器,由此诞生了一个能提供通用的分布式锁服务,用以协调分布式应用系统的协调服务ZooKeeper。
3、Zookeeper节点类型
Zookeeper的节点Znode有两种类型,分别是emphemeral(短暂的)和persistent(持久的),并且节点类型在创建时制定后就不可更改。
emphmeral节点在客户端会话结束时就自动删除,短暂Znode下不可以有子节点。
persistent节点不依赖于客户端会话,只有当客户端明确执行删除操作时,该节点才会被删除。
4、ZooKeeper的数据模型
在ZooKeeper中存在着节点的概念,通常称为Znode。Znode既含有数据。又可以用来标识路径,因此既可以被看作是一个文件,又可以被看作是一个目录。Znode的目录结构如下图所示:
View Code
一、ZooKeeper简介
1、一致性
1) 顺序一致性:客户端的更新顺序与他们被发送的顺序相一致;
2) 原子性:更新操作要么全部成功,要么全部失败;
3) 单系统镜像:无论客户端连接到哪一个服务器,都可以看到相同的ZooKeeper视图;
4) 可靠性:一旦一个更新操作被应用,那么在客户端再次更新它之前,其值将不会被改变;
5) 实时性:在特定的一段时间内,系统的任何变更都将被客户端检测到;
2、为什么使用ZooKeeper
大部分分布式应用需要一个主控、协调器或控制器来管理物理分布的子进程(如资源、任务分配等),而目前大部分应用需要开发私有的协调程序,缺乏一个通用的机制。此外协调程序的反复编写浪费,且难以形成通用、伸缩性好的协调器,由此诞生了一个能提供通用的分布式锁服务,用以协调分布式应用系统的协调服务ZooKeeper。
3、Zookeeper节点类型
Zookeeper的节点Znode有两种类型,分别是emphemeral(短暂的)和persistent(持久的),并且节点类型在创建时制定后就不可更改。
emphmeral节点在客户端会话结束时就自动删除,短暂Znode下不可以有子节点。
persistent节点不依赖于客户端会话,只有当客户端明确执行删除操作时,该节点才会被删除。
4、ZooKeeper的数据模型
在ZooKeeper中存在着节点的概念,通常称为Znode。Znode既含有数据。又可以用来标识路径,因此既可以被看作是一个文件,又可以被看作是一个目录。Znode的目录结构如下图所示:
package com.hicoor.zookeeper; import java.util.List; import org.apache.zookeeper.CreateMode; import org.apache.zookeeper.KeeperException; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watcher; import org.apache.zookeeper.ZooDefs.Ids; import org.apache.zookeeper.ZooKeeper; public class ZookeeperDemo { private static String connectString = "172.19.7.31:2181"; private static int sessionTimeout = 999999; private static String testNode = "/hans"; /** * 为确保程序顺利运行,运行前最好关闭服务端的防火墙 */ public static void main(String[] args) throws Exception { //监视器 Watcher watcher = new Watcher() { @Override public void process(WatchedEvent event) { System.out.println("触发事件:" + event); } }; //创建连接实例 ZooKeeper zooKeeper = new ZooKeeper(connectString, sessionTimeout, watcher); System.out.println("获取连接:" + zooKeeper); //创建节点并设置值 zooKeeper.create(testNode, "haha.mx".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); //重新设置节点值(不存在报异常) zooKeeper.setData(testNode, "hicoor.com".getBytes(), -1); //读取节点值 getNodeData(watcher, zooKeeper); //删除节点 zooKeeper.delete(testNode, -1); System.out.println("删除节点"); List<String> children = zooKeeper.getChildren("/", watcher); System.out.println(children); //关闭连接实例 zooKeeper.close(); } //读取节点值 private static void getNodeData(Watcher watcher, ZooKeeper zooKeeper) throws KeeperException, InterruptedException { byte[] data = zooKeeper.getData(testNode, watcher, null); System.out.println("读取的值:"+new String(data)); } }
View Code
相关文章推荐
- Zookeeper分布式服务协调组件
- 分布式配置服务etcd VS 分布式协调服务zookeeper
- 分布式协调服务---Zookeeper
- 分布式协调服务-Zookeeper
- 分布式协调服务Zookeeper
- 详解分布式应用程序协调服务Zookeeper
- ZooKeeper分布式协调服务-本质是一种小的分布式文件系统
- 分布式协调服务ZooKeeper
- 浅谈分布式服务协调技术 Zookeeper
- 浅谈分布式服务协调技术 Zookeeper
- 分布式协调服务ZooKeeper的典型应用
- 分布式协调服务之Zookeeper
- 分布式协调服务zookeeper01-zookeeper集群安装部署
- Zookeeper分布式协调服务
- 分布式应用程序协调服务Zookeeper
- 分布式协调服务---Zookeeper
- 分布式应用程序协调服务zookeeper
- 知识链-分布式协调服务zookeeper
- 分布式协调服务ZooKeeper工作原理
- Zookeeper(分布式应用程序协调服务)