摘要:由于分布式系统和应用可以提供更强的计算能力,还能更好地容灾和扩展,所以逐渐受到青睐。基础由若干条指令组成,用于完成特定功能的过程称为原语。
信息飞速膨胀,很多应用无法依赖单个服务器处理庞大的数据量。由于分布式系统和应用可以提供更强的计算能力,还能更好地容灾和扩展,所以逐渐受到青睐。
在开发分布式应用时,通常需要花费大量时间和精力来处理异构系统中的协作通信问题。
什么是 ZooKeeperZooKeeper 专注于任务协作,能为大型分布式系统提供可靠的协作处理能力,简化开发流程,让开发人员更专注于应用本身的逻辑。
ZooKeeper 具有 C-S 结构,在使用时,开发的应用可以看做为连接到 ZooKeeper 服务器的客户端,通过客户端 API 进行操作,保障强一致性、有序性和持久性,具有实现同步原语的能力,提供简单的并发处理机制。常见的用法如:选举主节点、崩溃检测、存储元数据等。
注意,ZooKeeper 不适用于海量信息存储,设计应用时最好将应用数据与协同数据分开,使用数据库、分布式文件系统等存储应用数据。
ZooKeeper 基础由若干条指令组成,用于完成特定功能的过程称为原语。
为了保证灵活性,ZooKeeper 不直接提供原语,而是暴露出类似文件系统的 API,让开发人员通过 API 实现自己的原语,通常使用菜谱( recipes )来表示原语的实现。
ZooKeeper 操作和维护的为一个个数据节点,称为 znode,采用类似文件系统的层级树状结构进行管理。如果 znode 节点包含数据则存储为字节数组(byte array)。
API 概述ZooKeeper 暴露如下 API:
create /path data 创建节点并包含数据
delete /path 删除节点
exists /path 检查节点是否存在
setData /path data 设置节点数据
getData /path 获取节点数据
getChildren /path 获取子节点列表
ZooKeeper 不允许局部读取或写入数据,读取时会将节点数据全部读取,写入时会整个替换。
节点类型创建 znode 时需要指定节点类型,节点的类型会影响其行为方式。
znode 分为持久节点和临时节点。持久节点只有通过调用 delete API 才能删除;临时节点在客户端崩溃或关闭与 ZooKeeper 服务器连接时就会被删除,调用 delete API 也能删除临时节点。
znode 可设置为有序节点。有序节点在创建时会分配一个整数序号追加到路径之后,如创建 /tasks/task- 有序节点,追加整数后节点路径为 /tasks/task-1 。
综上,znode 共有 4 种类型,分别为:持久(无序)、临时(无序)、持久有序和临时有序。
监听通知ZooKeeper 通常以远程服务的方式被访问,在数据不发生变化时频繁地访问代价较大,ZooKeeper 的通知机制可以代替客户端的轮训。
客户端通过设置监视点(watcher)向 ZooKeeper 注册需要接收通知的 znode,在 znode 发生变化时 ZooKeeper 向客户端发送消息。
通知机制是单次触发的操作,如需不断监听 znode 的变化,需要在接收到 znode 变更时设置新的监视点。
监视点有多种类型,如监控 znode 数据变化、监控 znode 子节点变化、监控 znode 创建或删除。
版本匹配每个 znode 都有一个随数据变化而自增的版本号,多个写入操作会有条件的执行。写入操作会将版本号作为参数,当与服务器上版本号一致时才会调用成功,这点在多个客户端对同一个 znode 进行操作时很重要。
仲裁模式只有一台多带带的 ZooKeeper 服务器时为独立模式,状态无法复制。具有一组 ZooKeeper 服务器时为仲裁模式,仲裁模式下各个服务器间进行状态的复制,同时服务于客户端的请求。
仲裁模式下,如果让客户端等待所有服务器完成数据保存再继续,延迟问题就会很大,ZooKeeper 通过法定人数确定工作时必须有效运行的服务器最小数量。如果有 5 台服务器,任意 3 台服务器保存了数据,客户端就可以继续工作。其他 2 台服务器最终也会捕获到数据进行保存。
服务器的个数应该为奇数,如有 5 台服务器,则最多允许 2 台崩溃。假如服务器个数为偶数,允许崩溃的服务器数量不会增加,法定人数却更大,需要更多的确认操作。
开始使用 ZooKeeper开始使用 ZooKeeper 之前,需要 下载 ZooKeeper 发行包 。解压 tar 格式的压缩文件,bin 目录下有启动 ZooKeeper 的脚本,conf 目录下存放着 ZooKeeper 的配置文件,lib 目录下存放着一些运行所需的第三方文件。
启动服务器在 ZooKeeper 目录下执行以下命令启动 ZooKeeper 服务器。
$ bin/zkServer.sh start启动客户端
$ bin/zkCli.sh列出根节点下的所有节点
[zk: localhost:2181(CONNECTED) 0] ls / [zookeeper]创建节点
[zk: localhost:2181(CONNECTED) 1] create /test "" Created /test [zk: localhost:2181(CONNECTED) 2] ls / [zookeeper, test]删除节点
[zk: localhost:2181(CONNECTED) 3] delete /test [zk: localhost:2181(CONNECTED) 4] ls / [zookeeper]退出客户端
[zk: localhost:2181(CONNECTED) 5] quit Quitting... 2018-05-02 15:58:34,004 [myid:] - INFO [main:ZooKeeper@684] - Session: 0x1630a0cdc400001 closed 2018-05-02 15:58:34,006 [myid:] - INFO [main-EventThread:ClientCnxn$EventThread@519] - EventThread shut down for session: 0x1630a0cdc400001关闭服务器
$ bin/zkServer.sh stop
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/76520.html
摘要:具有不可分割性即原语的执行必须是连续的,在执行过程中不允许被中断。提供服务主要就是通过数据结构原语集机制达到的。子节点的版本号数据节点版本号版本号创建该节点的会话的。后位则为递增序列。 前言 最近加入了部门的技术兴趣小组,被分配了Zookeeper的研究任务。在研究过程当中,发现Zookeeper由于其开源的特性和其卓越的性能特点,在业界使用广泛,有很多的应用场景,而这些不同的应用场景...
摘要:有可能是宕机或负荷严重的情况导致的。为分布式系统提供了协调功能和控制冲突。 背景 随着计算机的硬件和操作系统两者相辅相成地发展,从早期的ENIAC计算机到现在的x86的计算机,从以前的单一控制终端(Single Operator, Single Console, SOSC)的操作系统到现在百花争鸣的操作系统(如MacOS、Windows、Linux等),现代的操作系统发展还有一个最重要...
摘要:的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。具有不可分割性即原语的执行必须是连续的,在执行过程中不允许被中断。 该文已加入开源文档:JavaGuide(一份涵盖大部分Java程序员所需要掌握的核心知识)。地址:https://github.com/Snailclimb... showImg(https:...
摘要:之后服务器等待其他服务器的反馈,一旦超过半数的服务器进行了正确的反馈,那么就会再次向所有的服务器分发消息,要求其将前一个进行提交。协议包括两种基本的模式,分别是崩溃恢复和消息广播。 前言 zookeeper本质上就是一个分布式协调服务,用来解决分布式一致性的问题。 本文适合有一定分布式基础的读者阅读。什么叫相关的基础呢?起码你得知道系统架构为何从集中式演变成了分布式,分布式有哪些优点...
摘要:协议是为分布式协调服务专门设计的一种支持崩溃恢复的一致性协议,这个机制保证了各个之间的同步。选主是协议中最为重要和复杂的过程。以实际效果而言,分区相当于对通信的时限要求。参考官方文档阿里巴巴为什么不用做服务发现定理的含义阮一峰 前言 同学们,在上一章中,我们主要讲了Zookeeper两种启动模式以及具体如何搭建。本章内容主要讲的是集群相关的原理内容,第一章可以当做是Zookeeper原...
阅读 1999·2023-04-26 02:15
阅读 2231·2021-11-19 09:40
阅读 937·2021-10-27 14:13
阅读 3220·2021-08-23 09:44
阅读 3572·2019-12-27 12:24
阅读 587·2019-08-30 15:53
阅读 1102·2019-08-30 10:53
阅读 2105·2019-08-26 12:14