ZooKeeper概述(转)

ZooKeeper是一个用于分布式应用的开源分布式协调服务。它提供了简单的原语集合,分布式应用可在这些原语之上构建用于同步、配置维护、分组和命名的高层服务。ZooKeeper的设计使得编程容易,并且使用类似于广泛熟知的文件系统目录树结构的数据模型。它运行在Java环境中,但是有Java和C语言绑定。

分布式协调服务是出了名的难得编写正确,很容易出现竞争条件和死锁之类的错误。ZooKeeper的动机是减轻为分布式应用开发协调服务的负担。

1 设计目标

1.1 简单

ZooKeeper让分布式进程可通过共享的、与标准文件系统类似的分层名字空间相互协调。名字空间由数据寄存器(在ZooKeeper世界中称作znode)构成,这与文件和目录类似。与用于存储设备的典型文件系统不同的是,ZooKeeper在内存中保存数据,这让其可以达到高吞吐量和低延迟。

ZooKeeper的实现很重视高性能、高可用性,以及严格的顺序访问。高性能意味着可将ZooKeeper用于大的分布式系统。可靠性使之可避免单点失败。严格的顺序访问使得客户端可以实现复杂的同步原语。

1.2 自我复制

与它所协调的进程一样,ZooKeeper本身也会试图在一组主机间进行复制,这就是集群。

组成ZooKeeper服务的各个服务器必须相互知道对方。它们在内存中维护状态和事务日志,还在永久存储中维护快照。只要大部分服务器可用,ZooKeeper服务就是可用的。

客户端连接到单个ZooKeeper服务器。客户端维持一个TCP连接,通过这个连接发送请求、接收响应、获取观察事件,以及发送心跳。如果到服务器的TCP连接断开,客户端会连接到另一个服务器。

1.3 顺序访问

ZooKeeper为每次更新设置一个反映所有ZooKeeper事务顺序的序号。并发操作可使用序号来实现更高层抽象,如同步原语。

1.4 高速

在读操作为主的负载下特别快。ZooKeeper应用运行在成千上万台机器中,在读操作比写操作频繁,二者比例约为10:1的情况下,性能最好。

2 数据模型和分层的名字空间

ZooKeeper提供的名字空间与标准文件系统非常相似。名字是一个由斜杠/分隔的路径元素序列。ZooKeeper名字空间中的每个节点都由其路径标识。

3 节点和临时节点

与标准文件系统不同,ZooKeeper名字空间中的每个节点都可以有关联的数据以及子节点。这就像一个允许文件也是目录的文件系统。(ZooKeeper设计用于存储协调数据:状态信息、配置、位置信息等,所以通常存储在每个节点中的数据很小,在字节到千字节范围内)讨论ZooKeeper数据节点时,我们用术语znode来明确指示。

Znode会维护一个stat结构体,其中包含数据和ACL的版本号与时间戳,以便于进行缓存验证和协调更新。每次修改znode数据时,版本号会增长。客户端获取数据的时候,也同时获取数据的版本。

对znode数据的读写操作是原子的。读取操作获取节点的所有数据,写入操作替换所有数据。节点的访问控制列表(ACL)控制可以进行操作的用户。

ZooKeeper具有临时节点的概念。只要创建节点的会话是活动的,临时节点就存在。一旦会话终止,临时节点会被删除。临时节点对于实现tbd是很有用的。

4 条件更新和观察

ZooKeeper支持观察的概念。客户端可以在znode上设置观察。观察将在znode修改时被触发和移除。观察被触发时客户端会收到一个数据包,指示znode已经被修改。如果与ZooKeeper服务之间的连接断开,客户端会收到一个本地通知。这可用于tbd。

5 保证

ZooKeeper非常高效和简单。基于其目标:成为构建如同步这样的更复杂服务的基础,ZooKeeper提供下述保证:

l 顺序一致性:客户端的更新将以请求发送的次序被应用。

l 原子性:更新要么成功,要么失败,没有部分更新。

l 单一系统镜像:无论连接到哪个服务器,客户端将看到一样的视图。

l 可靠性:更新操作的结果将是持续的,直到客户端覆盖了更新。

l 及时性:在某个时间范围内,客户端视图确保是最新的。

关于这些保证的详细信息,以及如何使用这些保证,请参看tbd。

6 简单的API

ZooKeeper的设计目标之一是提供非常简单的编程接口。ZooKeeper仅支持这些操作:

l create:在树中某位置创建一个节点。

l delete:删除一个节点。

l exists:测试某位置是否存在某节点。

l get data:读取节点数据。

l set data:向节点写入数据。

l get children:获取子节点列表。

l sync:等待数据传播。

关于这些操作的更深入讨论,以及如何使用它们来实现更高层的操作,请参看tbd。

7 实现

下图显示了ZooKeeper服务的高层组件。除了请求处理器(Request Processor)之外,组成ZooKeeper服务的每个服务器拥有每个组件的自有拷贝。

自我复制数据库(replicated database)是一个包含整个数据树的内存数据库。更新会记录到磁盘中以便可以恢复,并且将写操作应用到内存数据库之前会先写入到磁盘。

每个ZooKeeper服务器都为客户服务。客户端连接到一个服务器,提交请求。读请求由每个服务器数据库的本地拷贝进行服务。改变服务状态的请求和写请求由一致性协议处理。

作为一致性协议的一部分,客户端的所有写请求都被转发到单个服务器,也就是领导者。其他ZooKeeper服务器则是跟随者,它们接收来自领导者的建议,对传递的消息达成一致。消息层考虑了替换失败的领导者和跟随者与领导者同步的问题。

ZooKeeper使用定制的原子消息协议。因为消息层是原子的,ZooKeeper可保证本地拷贝不会发散(diverge)。收到写请求时,领导者计算写入操作后系统的状态,将其转换成一个捕获此状态的事务。

8 使用

ZooKeeper的编程接口非常简单。但是,可将其用于实现高层顺序操作,如同步原语、组成员管理、所有者关系管理等。更多信息请参看tbd。

9 性能

ZooKeeper被设计为高性能的。但它真的是高性能的吗?Yahoo研究中心的ZooKeeper开发团队证实了ZooKeeper的高性能,特别是在读操作比写操作多的应用中(见下图),因为写操作涉及在所有服务器间同步状态。(读操作比写操作多是协调服务的典型情况)

上图是ZooKeeper 3.2在配置有两个2GHz Xeon处理器和两个SATA 15K RPM驱动器的服务器上运行时的吞吐率图形。一个驱动器配置为ZooKeeper日志专用设备。快照写入到操作系统驱动器。读写操作1KB的数据。“服务器数”指的是ZooKeeper集群的大小,即组成服务的服务器个数。大约30个其他服务器用于模拟客户端。ZooKeeper集群配置为不允许客户端连接到领导者。

提示:3.2版的读写性能是3.1版的2倍。

Benchmarks也表明ZooKeeper是可靠的。下图(第10节的图)显示了ZooKeeper在各种失败情况下的反应。图中标记的各个事件是:

1.跟随者失败和恢复

2.另一个跟随者失败和恢复

3.领导者失败

4.两个跟随者失败和恢复

5.另一个领导者失败

10 可靠性

为揭示在有失败注入时系统的行为,我们在一个由7台机器组成的ZooKeeper服务上运行和先前一样的benchmark测试,但是让写操作的百分比固定为30%,这是预期负载比例的保守估计。

此图有几处值得仔细观察。首先,如果跟随者失败后快速恢复,则ZooKeeper可以维持高吞吐率。但更重要的是,领导者选举算法让系统可以足够快地恢复,以阻止吞吐率有实质性的下降。据我们观察,ZooKeeper选举一个新的领导者的时间小于200ms。第三,一旦跟随者恢复并且开始处理请求,ZooKeeper可以恢复高吞吐率。

11 ZooKeeper工程

ZooKeeper已经在很多工业应用中成功使用。Yahoo!在Yahoo! Message Broker中使用ZooKeeper作为协调和故障恢复服务。Yahoo! Message Broker是一个高度扩展的发布-订阅系统,管理着成千上万个需要拷贝和数据传递的话题。Yahoo!的很多广告系统也使用ZooKeeper来实现可靠服务。

我们鼓励用户和开发者加入社区,贡献技能。更多信息请看Apache的ZooKeeper工程

ZooKeeper概述(转),布布扣,bubuko.com

时间: 2024-10-17 14:55:17

ZooKeeper概述(转)的相关文章

Zookeeper概述、特点、数据模型

Zookeeper 1.Zookeeper概述 Zookeeper是一个工具,可以实现集群中的分布式协调服务. 所谓的分布式协调服务,就是在集群的节点中进行可靠的消息传递,来协调集群的工作. Zookeeper之所以能够实现分布式协调服务,靠的就是它能够保证分布式数据一致性. 所谓的分布式数据一致性,指的就是可以在集群中保证数据传递的一致性. Zookeeper能够提供的分布式协调服务包括:数据发布订阅.负载均衡.命名服务.分布式协调/通知.集群管理.分布式锁.分布式队列等功能 2.Zookee

ZooKeeper概述及其安装

ZooKeeper笔记 ZooKeeper概述 背景: 现代企业对计算机系统的计算存储能力要求越来越高,单纯的高性能服务器已经无法满足要求.企业的IT架构从集中式向分布式过度.所谓分布式,就是将一个计算任务分解成若干计算单元,分派到不同的计算机中去执行,然后汇总计算结果的过程. ZooKeeper是源代码开放的分布式协调服务,是高性能的分布式一致性解决方案.它将那些复杂的.容易出错的分布式一致性服务封装起来,构成一个高效的原语集,并提供一系列简单易用的接口给用户使用 分布式数据一致性问题,指的是

Zookeeper概述和基本概念

一.Zookeeper背景 随着互联网技术的发展,企业对计算机系统的计算,存储能力要求越来越高,各大IT企业都在追求高并发,海量存储的极致,在这样的背景下,单纯依靠少量高性能单机来完成计算机,云计算的任务已经无法满足需求,企业的IT架构逐渐由集中式往分布式过渡.所谓的分布式是指:把一个计算任务分解成若干个计算单元,并分派到不同的计算机中去执行,最终汇总计算结果的过程. 二.Zookeeper概述 Zookeeper是源代码开放的分布式协调服务,是一个高性能的分布式数据一致性的解决方案,它将那些复

ZooKeeper概述

1.Zookeeper概述 Zookeeper 是 Google 的 Chubby一个开源的实现,是 Hadoop 的分布式协调服务.它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等. Zookeeper的角色:  zk可以用来保证数据在zk集群之间的数据的事务性一致. 解释:如果客户端client1改变了server1的数据文件1,那么其它server的数据文件1也同时改变,那么其他客户端也能访问到改变了的数据文件. 2.为什么使用Zookeeper? 大部分

Zookeeper 概述

ZooKeeper是一种分布式协调服务,用于管理大型主机.在分布式环境中协调和管理服务是一个复杂的过程.ZooKeeper通过其简单的架构和API解决了这个问题.ZooKeeper允许开发人员专注于核心应用程序逻辑,而不必担心应用程序的分布式特性. ZooKeeper框架最初是在"Yahoo!"上构建的,用于以简单而稳健的方式访问他们的应用程序. 后来,Apache ZooKeeper成为Hadoop,HBase和其他分布式框架使用的有组织服务的标准. 例如,Apache HBase使

zookeeper_01:zookeeper概述

应对场景: 相对于开发在一台计算机上运行的单个程序,如何让一个应用中的多个独立的程序协同工作是一件非常困难的事情.开发这样的应用,很容易让很多开发人员陷入如何使多个程序协同工作的逻辑中,最后导致没有时间更好地思考和实现他们自己的应用程序逻辑:又或者开发人员对系统逻辑关注不够,只是用很少的时间开发了一个简单脆弱的主协调器,导致不可靠的单一失效点. ZooKeeper使命: 在分布式系统中协作多个任务.一个协作任务指一个包含多个进程的任务.这个任务可以是为了协作或者是为了管理竞争.协作意味着多个进程

十四、Hadoop学习笔记————Zookeeper概述

顺序一致性:严格按照顺序在zookeeper上执行 原子性:所有事物请求的结果,在整个集群的应用情况一致 单一视图:无论从哪个服务器进入集群,看到的东西都是一致的 可靠性:服务端成功响应后,状态会 一直保留 3台的zookeeper集群达到12-13万QPS

【1】Zookeeper概述

一.前言 在"网络是不可靠的"这一前提下,分布式系统开发需要解决如下四个问题: 客户端如何访问众多服务? ?解决方案:服务聚合,使用API网关 服务于服务之间如何通信? ?解决方案: ??同步通讯:HTTP(Apache http client). RPC(Dubbo.Apache Thrift.gRPC) ??异步通讯:消息队列(Kafka Rabbitmq Rockermq) 众多服务,如何进行管理(实现高可用.高并发.高性能)? ?解决方案:服务治理,采用服务注册与发现,包括 ?

Zookeeper简单介绍

转自:ZooKeeper学习第一期---Zookeeper简单介绍 一.分布式协调技术 在给大家介绍ZooKeeper之前先来给大家介绍一种技术--分布式协调技术.那么什么是分布式协调技术?那么我来告诉大家,其实分布式协调技术 主要用来解决分布式环境当中多个进程之间的同步控制,让他们有序的去访问某种临界资源,防止造成"脏数据"的后果.这时,有人可能会说这个简单,写一个调 度算法就轻松解决了.说这句话的人,可能对分布式系统不是很了解,所以才会出现这种误解.如果这些进程全部是跑在一台机上的