ZooKeeper 简介

ZooKeeper 简介

本文为笔者学习 ZooKeeper 笔记,主要内容来自于 ZooKeeper 官网文档的翻译。

后续笔记

ZooKeeper快速启动

ZooKeeper 数据模型

一、定位

ZooKeeper 是面向分布式应用的高性能协调服务。它以接口形式提供了命名、配置管理、同步和组服务等功能。可以使用它来实现共识(consensus)、组管理 group management、领导选举( leader election)和存在协议(presence protocols)。

二、特点

  • 简单(Simple):ZooKeeper允许分布式进程通过共享的分级命名空间相互协调,该命名空间的组织方式类似于标准的文件系统。 命名空间由数据寄存器(data registers)组成,称为 znodes——它们类似于文件和目录。与为存储而设计的典型文件系统不同,ZooKeeper的数据保存在内存中,这意味着ZooKeeper可以实现高吞吐量和低延迟数。 ZooKeeper 重视高性能、高可用性和严格有序的访问。 ZooKeeper 的性能方面意味着它可以用于大型分布式系统。 可靠性方面防止单点故障。 严格的排序意味着复杂的同步原语可以在客户机上实现。

  • 集群(replicated):类似于被协调的分布式应用,ZooKeeper本身也支持集群部署,可复制

在这里插入图片描述

组成ZooKeeper服务的服务器必须互相了解。 它们在内存中维护状态映像,并在持久化存储中维护事务日志和快照。 只要大部分服务器可用,ZooKeeper服务就可用。

客户端连接到一个ZooKeeper服务器。 客户机维护一个TCP连接,通过该连接发送请求、获取响应、获取监视事件并发送心跳。 如果与服务器的TCP连接中断,客户端将连接到另一个服务器。

  • 有序(ordered):ZooKeeper 通过数字记录事务顺序,每次更新时对数字进行维护。后续的操作可以使用这个顺序来实现更高层次的抽象,比如同步原语。

  • 快速(fast):在“以读为主”的工作负载中特别快。 ZooKeeper应用程序运行在数千台机器上,当读比写更常见时,它的性能最好,比率约为10:1。

三、主要概念

1.数据模型与分层的命名空间

ZooKeeper提供的命名空间很像标准的文件系统。 名称是由斜杠(/)分隔的路径元素序列。 ZooKeeper命名空间中的每个节点都由路径标识。

在这里插入图片描述

2.节点

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

Znodes 维护一个统计结构(stat structure),其中包括用于数据更改的版本号、ACL(Access Control List)更改和时间戳,以允许缓存验证和协调更新。 znode 的数据每改变一次,版本号就增加一次。 例如,每当客户端检索数据时,它也会接收到数据的版本。

存储在名称空间中每个 znode 上的数据是原子式读写的。 读操作可以获取与 znode 关联的所有数据字节,写操作则替换所有数据。 每个节点都有一个访问控制列表(ACL),用来限制谁可以做什么。

ZooKeeper 也有临时节点的概念。 只要创建 znode 的会话是活动的,这些znode就会存在。 当会话结束时,znode被删除。

3.监控

ZooKeeper 支持监控(watches)的概念。 客户端可以在 znode 上设置 watches。 当 znode 改变时,watches将被触发和移除。 当一个 watch 被触发时,客户端会收到一个数据包,说 znode 已经改变。 如果客户端和其中一个ZooKeeper服务器的连接中断,客户端将收到一个本地通知。

客户端还可以在 znode 上设置永久的、递归的监视,这些监视在被触发时不会被删除,并且会触发已注册 znode 以及任何子 znode上 的更改。

四、安全性

ZooKeeper非常快速和简单。 但是,由于它的目标是作为构建更复杂的服务(如同步)的基础,所以它提供了一组保证。 这些都是:

  • 顺序一致性:来自客户端的更新将按照它们被发送的顺序被应用。

  • 原子性:更新成功或失败。 没有部分结果。

  • 单个系统映像:客户机将看到服务的相同视图,而不管它连接到哪个服务器。 也就是说,即使客户端故障转移到具有相同会话的不同服务器上,客户端也永远不会看到系统的旧视图。

  • 可靠性:一旦应用了更新,它将从那时起一直持续,直到客户端覆盖更新。

  • 时效性:保证客户端对系统的看法在一定的时间范围内是最新的。

五、简单命令

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

  • create:在树的某个位置创建节点

  • delete:删除节点

  • exists :测试节点是否在某个位置存在

  • get data:从节点读取数据

  • set data:向节点写入数据

  • get children:获取节点的子节点列表

  • sync:等待数据传播

六、组件

ZooKeeper Components显示了ZooKeeper服务的高级组件。 除了请求处理器之外,每个组成ZooKeeper服务的服务器都复制了每个组件的自己的副本。

在这里插入图片描述

replicated database 是包含整个数据树的内存数据库。更新被记录到磁盘上,以便恢复,写操作在应用到内存数据库之前被序列化到磁盘。

每个ZooKeeper服务器都提供客户端服务。 客户端连接到一个服务器来提交请求。读取请求由每个服务器数据库的本地副本提供服务。 更改服务状态的请求(写请求)由一个一致性协议(agreement protocol)处理。

作为一致性协议的一部分,所有来自客户端的写请求都被转发到单个服务器,称为 leader 。 其余的ZooKeeper服务器,称为 followers 者,接收来自 leader 的消息提议,并同意消息的传递。 消息层(messaging layer)负责在失败时替换leader,并让 followersleader 同步。

ZooKeeper使用自定义原子消息传递协议(custom atomic messaging protocol)。 由于消息传递层是原子的,ZooKeeper可以保证本地副本永远不会发散。 当 leader 接收到一个写请求时,它计算应用写操作时系统的状态,并将其转换为捕获这个新状态的事务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值