【原汁原味】ZooKeeper 概览(一)

内容翻译自官方文档

Because Coordinating Distributed Systems is a Zoo

概览

ZooKeeper 是一种分布式、开源的协同服务。它暴露了一组简单的原语,分布式应用程序可以基于该原语组,实现更高级的服务,如同步、配置维护、组别和命名。它是一种编程友好型的设计,并采用大家熟悉的文件系统的目录树结构作为数据模型,可以用 Java 运行,也可以和 C 绑定。

协同服务很难正确运行,经常出现竞争危害和死锁。ZooKeeper 的目的就是降低协同服务实现与维护的成本。

设计目标

易用性,ZooKeeper 允许分布式进程通过与标准文件系统类似的共享层次命名空间互相协同。命名空间由数据节点(znodes)组成,类似于文件与目录。与专为存储设计的典型文件系统不同,ZooKeeper的数据都保存在内存中,以获得高吞吐和低时延的特性。

ZooKeeper实现了高性能、高可用和严格有序。高性能意味着可以被应用在大型分布式系统,高可用则避免了单点故障的风险,严格有序保证了复杂的同步原语可以在客户端实现。

可复制,就像它所协同的分布式进程一样,ZooKeeper 的组件也是可复制的。

ZooKeeper 服务

构成 ZooKeeper 服务的服务器必须互相感知,它们各自维护了一张相同的内存状态镜像,以及持久存储的事务日志与快照,只要大部分的服务器可用,ZooKeeper 的服务就可以正常运行。

客户端会维护与某一台 ZooKeeper 服务器的 TCP 长连接,并通过该连接进行请求发送,响应接收,监听事件获取与心跳检测。如果当前 TCP 长连接断开,客户端会向另一台服务器发起连接请求。

有序性,ZooKeeper 为每一次更新标记了一个序号,以反映所有事务的顺序。后续操作可以使用该序号实现更高级的抽象,例如同步原语。

速度快,ZooKeeper 在“读频繁”工作流中表现非常快,在数千台集群中运行,读写比为 10:1 时,性能最好。

数据模型与层次命名空间

ZooKeeper 提供的命名空间类似于标准文件系统,名称是以斜杠(/)分隔的路径元素序列。ZooKeeper 命名空间中的每个节点都有唯一的路径标识。


ZooKeeper 层次命名空间

不同于标准文件系统,ZooKeeper 命名空间中的每个节点都可以持有数据与子节点(文件亦是目录)。ZooKeeper 被设计用于存储协同数据,如状态信息,配置,位置信息等,因此存储在每个节点上的数据量都比较小,一般不到1KB。接下来,我们采用术语 znode 表明我们正在谈论 ZooKeeper 中的数据节点。

znode 维护一了个统计结构,其中包含数据变更,ACL变更与时间戳的版本号,以允许缓存验证和协调更新。每次 znode 的数据发生变化时,它的版本号都会增加。例如,每当客户端检索数据时,它也会收到该数据的版本信息。

命名空间中每个 znode 存储的数据,都以原子方式进行读取与写入。读取将获得该 znode 关联的所有数据字节,写入则替换所有数据。每个节点都有一个访问控制列表(ACL),它限制谁可以做什么。

ZooKeeper 还提供了一种临时节点,它们的生命周期取决于创建它们的会话(session),当会话结束时,临时节点将会被删除。

条件更新与监听

ZooKeeper 支持监听功能。客户端可以在 znode 上设置一个监听器,当 znode 发生变更时,监听器将被触发并移除,与此同时,客户端将收到一个表示 znode 变更的数据包。此外,如果客户端与 ZooKeeper 服务器的 TCP 连接断开时,客户端将收到一个本地通知。

保证

ZooKeeper 既简单又快速,由于其目标是提供基础原语,以构建更为复杂的服务,因此,它提供了一系列的保证。

顺序一致性,客户端的更新将按照他们发送的顺序执行;

原子性,更新成功或失败,没有中间状态;

单一系统映像,无论客户端连接的是哪一台服务器,它们看到的服务视图都是相同的;

可靠性,一旦更新成功,它将一直持续到被下一个客户端更新覆盖;

及时性,客户端看到的系统视图,在一定时间范围内保证是最新的。

简单 API

ZooKeeper 的设计目标之一是提供非常简单的可编程接口,因此,它只提供如下操作:

创建(creat),在目录树中某个位置创建一个节点;

删除(delete),删除一个节点;

存在性检查(exists),测试节点是否存在于某个位置;

获取数据(get data),从节点中读取数据;

设置数据(set data),向节点中写入数据;

获取子节点(get children),检索节点的子节点列表;

同步(sync),等待数据传播。

实现

下图展示了 ZooKeeper 服务的高级组件。除了请求处理器之外,组成 ZooKeeper 服务的每个服务器都会对自身的组件进行复制备份。


ZooKeeper 组件

复制数据库是包含完整数据树的内存数据库,它将更新记录到磁盘以获取可恢复性,并将写入数据也序列化到磁盘上,然后再更新内存数据库。

每个 ZooKeeper 服务器都为客户端提供服务。客户端需要连接到一个服务器上,才能提交请求。客户端的读请求,实际上是请求存储在本地的服务端数据库的备份。服务状态更改请求与写入请求则是通过一种[一致性协议]()处理。

一致性协议规定了所有客户端写请求都将被转发至单个服务器,即领导节点(Leader)。其他的 ZooKeeper 服务器被称为 追随者(Followers),它们接收来自 Leader 的消息提议,然后对消息的传递进行表决。消息传递层负责将 Followers 同步给 Leader,并在 Leader 发生故障时暂代履责。

ZooKeeper 使用自定义的原子消息协议,由于消息层是原子的,因此可以保证 ZooKeeper 的本地副本不会发散(保持统一),当 Leader 收到写请求时,它会计算写请求执行时的系统状态是什么,并将其转换成捕获该新状态的事务操作。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,099评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,473评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,229评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,570评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,427评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,335评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,737评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,392评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,693评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,730评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,512评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,349评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,750评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,017评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,290评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,706评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,904评论 2 335

推荐阅读更多精彩内容