ZooKeeper 分布式应用的分布式协调服务。
ZooKeeper为分布式应用(distributed applications)提供开源的,分布式的协调服务。分布式应用使用ZooKeeper提供的一组简单的原语来构建更高层次的服务,比如同步,配置维护,组和命名。ZooKeeper容易编程,数据模型类似于文件系统的目录树结构。ZooKeeper背后的动机就是为了解除分布式应用从头构建协调服务的职责。ZooKeeper替你做了。
设计目标
简洁 ZooKeeper允许分布式的进程通过组织上类似于标准文件系统的共享层次空间来进行相互协调。命名空间由znode组成,在ZooKeeper中znode指的是存储数据的东东,znode类似于文件和目录。不像普通的文件系统,被设计用来存储,ZooKeeper的数据放在内存中,因此ZooKeeper能获得很高的吞吐量和低延迟。
ZooKeeper的实现高度重视高性能,高可用,严格有序访问。性能特点指的是ZK能用在大规模的,分布式的系统中。稳定性意味着ZK没有单点问题。严格的有序访问意味着客户端可以高级的同步原语。
复制 就像ZK协调的分布式进程一样,ZK本身被复制到一组主机(ensemble)。
组成ZK服务的主机相互之间都知道(某一个Server知道组中其他Server的地址)。他们维护状态的内存镜像,事务日志和持久存储快照。只要大多数服务器可用,ZK服务就可用。Client连接到一个ZK Server,维护一个TCP连接,通过它来发送请求,得到响应,得到监控事件和发送心跳。如果到这个Server的连接中断,Client会连接到一个不同的Server。
有序 ZK为每一次更新(update)标记一个数字(类似于版本号),用来反应ZK事务的顺序。后续的操作可以使用这种有序来实现更高层次的抽象,比如同步原语。
快速 在大多数读的负载中ZK特别快。ZK应用运行在数千台机器上,在读比写更普遍,读写比例大约时10:1的情况下,应用运行的很好。
数据模型和层次命名空间
ZK提供的命名空间(namespace)类似于标准的文件系统。名字(name)就是被/分割的一系列路径元素。ZK命名空间中的znode由路径标识。
节点和临时节点
不同于标准文件系统的是,ZK命名空间中的每一个节点都有数据和子节点。就像是你有一个文件系统,文件同样也是目录。(ZK被设计用来存储协调的数据:状态信息,配置,位置信息,因此存储在znode中的数据通常很小)。
znode维护一个统计结构,含有数据改变的版本号、ACL(access control list)改变的版本号、时间戳,允许缓存验证和协调更新。每当znode节点数据发生变化,版本号增加。例如,client每次检索数据,它同样会获取数据的版本号。
命名空间中每一个节点的数据读和写都是原子的。Read会拿到和这个节点相关联的所有的数据。Write会替换掉所有的数据。znode有一个访问控制列表ACL来限制谁可以做什么。
ZK还有临时节点。只要创建这些节点的会话Session是活跃的,这些节点就一直存在。会话结束,节点被删除。
条件更新和监控
ZK支持监控。Client在一个znode上设置监控(watch)。当znode改变的时候,监控被触发和删除。当监控触发的时候,Client会收到一个数据包,说“数据发生改变”。如果Client和ZK Server之间的连接断掉,会收到一个本地(local)通知。
保证
ZK非常快,非常简单。因为他的目标是构建更复杂服务的基础,比如同步,所以他提供一系列保证。
顺序一致性 来自于Client的更新按照他们发送的顺序被应用
原子 更新要么成功,要么失败,没有部分结果
唯一的系统镜像 不管Client连接到哪个ZK Server,他看到相同的服务视图
可靠 一旦更新被应用,在某一个Client重写这个更新之前,这个更新会持久化
及时 保证Client看到的服务视图在一定时间范围内是最新的
简单的api
ZK其中的一个设计目标就是提供简单的编程接口。
create 创建一个节点(path) delete 删除一个节点 exists 判断节点是否存在 get data 从节点中读取数据 set data 为节点设置数据 get children 获取节点的字节点 sync 等待数据传播
实现
上图展示ZK服务的高层组件。除了请求处理器(Request Processor),组成ZK服务的每一个Server会复制这些组件的副本。
复制的数据库是包含完整数据的内存数据库。为了恢复,更新被记录到磁盘。写被应用到内存数据库之前,先被序列化到磁盘。
每一个ZK Server服务多个Clients。Client连接到一个Server来提交请求。读请求的处理,使用每一个Server数据库的本地(Client连接到哪个Server,哪个Server就处理这个Client的Read请求)。写请求,改变服务器的状态,需要通过一致性协议(agreement protocol)来处理。
作为一致性协议的一部分,来自Clients的所有写请求被路由到一个单独的Server,叫做leader。ZK组中其他Servers叫做follower,负责接收来自于leader的消息提议,在消息回复上取得一致。消息层处理leader失效,同步followers和leader。
ZK使用自定义的原子消息协议。因为消息层是原子的,ZK保证本地副本不会偏离。当leader接收到写请求,它计算系统更新后的状态,把请求转变成获取新状态的事务。
使用
ZK的接口故意定义的非常简单。然而,使用它你可以实现更高层次的有序操作,例如,同步原语,组成员资格,拥有者。
性能
ZK是高性能的。下图时ZK随读写比率变化的吞吐量变化图。
在读超过写的应用中,ZK是性能非常高的,因为写要涉及所有服务器的状态同步。(读超过写就是典型的协调服务的场景)。
可靠
测试同样表明ZK非常可靠。下图,“当出现错误时的可靠性分析”,显示调度如何响应各种各样的失败。在图片中标记的事件是:
1、一个follower的失效和恢复
2、另一个follower的失效和恢复
3、leader的失效
4、两个followers的失效和恢复
5、另一个leader的失效
测试场景是,让写保持30%的比例,这是一个我们期望工作模式的保守估计。
得出结论如下: 1、如果follower失效,并且快速恢复,那么ZK仍旧可以保持很高的吞吐量。2、更重要的是,leader选举算法允许系统快速恢复,抑制吞吐量的下降。3、在我们的观察中,选举新leader花费的时间少于200ms。4、当follower恢复的时候,一但他们开始处理请求,ZK能够再一次恢复吞吐量。
相关推荐
### Zookeeper概述 Zookeeper是一种用于分布式环境中的协调服务,主要功能包括配置维护、名字服务、分布式同步、组服务等。其目标在于封装那些容易出错但又至关重要的底层服务,为用户提供简单易用的接口及高效稳定...
### Zookeeper概述 Zookeeper是一种分布式服务框架,其主要功能在于提供高效且可靠的分布式协调服务。作为Google Chubby的一种开源实现,Zookeeper被广泛应用于多种分布式系统中,尤其是在Hadoop和Hbase这样的大...
1.1 概述 Zookeeper 的核心是它在分布式环境中提供的服务协调。它被设计成一个高可用的集群,由一个领导者(leader)和多个跟随者(followers)组成。领导者负责处理所有的写操作和同步数据到跟随者,而跟随者则处理...
ZooKeeper概述图文详解 ZooKeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目,多用作为集群提供服务的中间件!从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责...
1. **Zookeeper概述** Zookeeper是一个开源的、分布式的、为分布式应用提供一致性服务的软件,设计模式基于Paxos算法,实现了高可用性、高性能以及数据一致性。Zookeeper的主要功能包括命名服务、配置管理、集群...
#### 一、Zookeeper概述及主要功能 ##### Zookeeper简介 Zookeeper是一款开源的分布式协调服务组件,属于Apache顶级项目之一。它主要用于简化分布式应用程序的开发过程,为开发者提供了高效且可靠的分布式协调机制...
**Zookeeper概述** Zookeeper是Apache软件基金会的一个开源项目,它提供了一个分布式的,开放源码的分布式应用程序协调服务。Zookeeper的设计目标是为分布式应用提供一致性服务,它基于一个简单的模型,允许分布式...
一、Zookeeper概述 Zookeeper的设计理念源于Google的Chubby,主要用于解决分布式环境中的数据一致性问题。它提供了一种树状的数据结构,其中每个节点都可以存储数据,同时可以监听其他节点的变化,从而实现分布式...
一、Zookeeper概述 Zookeeper的设计目标是简化分布式环境中的数据一致性问题,提供了一个高可用、高性能、顺序访问的数据存储系统。它采用主从复制的架构,确保数据在多个节点间的同步,从而达到高可用性。...
1.1 ZooKeeper概述 Zookeeper是一个分布式协调服务的开源框架。主要用来解决分布式集群中应用系统的一致性问题,例如怎样避免同时操作同一数据造成脏读的问题。 Zookeeper本质上是一个分布式的小文件存储系统。提供...
**一、Zookeeper概述** Zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态,根据节点提交的反馈进行下一步合理操作。它提供了一种简单有效的原语集,使得...
一、Zookeeper概述 Zookeeper是一个开源的分布式协调服务,它提供了一种简单易用的接口,使得分布式应用能够高效地处理命名服务、配置管理、集群同步、领导者选举等任务。Zookeeper基于一致性哈希算法,通过ZAB...
#### 一、Zookeeper概述 **Zookeeper** 是一款分布式协调服务,用于管理大规模的主机集群。在分布式环境中协调和管理服务是一个复杂的过程,而Zookeeper通过其简单直观的架构与API解决了这一难题,使得开发者能够...
#### 一、Zookeeper 概述 ##### 1.1 什么是Zookeeper ZooKeeper 是一个分布式协调服务框架,由Apache软件基金会开发并维护。它为分布式应用程序提供了简单统一的接口,帮助解决分布式环境中常见的协调问题,如配置...
一、Zookeeper概述 Zookeeper是由Apache基金会开发的开源项目,它基于简单的ZNode数据模型,提供了分布式锁、队列、命名服务等关键功能。Zookeeper采用主从式架构,由多个服务器节点组成集群,通过选举机制确保数据...
Zookeeper概述 Zookeeper是一个开源的分布式协调服务,由Apache基金会维护和支持。它的主要目标是简化分布式应用程序的开发和管理,通过提供一系列的基础服务来帮助解决分布式环境中常见的复杂问题。Zookeeper的...
### Zookeeper概述与应用场景 #### 一、Zookeeper简介 Zookeeper是一个开源的分布式协调服务框架,由雅虎公司开发并捐赠给Apache基金会,成为Apache Hadoop的一个子项目。Zookeeper的主要目标是简化分布式应用程序...