Zookeeper 概述

Zookeeper 允许分布式进程之间像文件系统一样,通过共享的、有层次的、数据寄存器(我们称这些寄存器为znodes)的命名空间,来相互协调。但是又不像正常的文件系统,Zookeeper为客户端提供:高吞吐,低延迟,高可用,以严格有序地方式访问znodes。Zookeeper的性能使得它能用于大型分布式系统。它的可靠性能避免在大系统的单节点故障。它的严格有序能让客户端复杂的同步语义得以实现。

Zookeeper提供的命名空间很像标准的文件系统。一个名字(name)是由斜线("/")分割的一串路径序列(a sequence of path)。在Zookeeper命名空间里的每个znode都是由路径区分的。除了根znode("/")没有父节点,其他的每个znode都有一个父路znode路径作为它的前缀。还有一点跟文件系统很相似,如果一个znode有子节点,那么该将该节点无法被删除。

Zookeeper和标准文件系统主要的不同是每个znode可以有关联的数据(每个文件还可以是目录,反之亦然),并且znodes的数据是有限制的。Zookeeper被设计为存储用于协调的数据:状态信息,配置,为止信息等等。这类元信息的大小如果不是字节的话,通常是kb。Zookeeper有内置的1M的检查以避免它被用于存储大量数据,但是一般而言,它被用于存储很多更小的数据片段。

在这里插入图片描述
Zookeeper服务本身通过一组包含该服务的机器进行复制。这些机器在持久存储中维护数据树的内存映像以及事务日志和快照。因为数据保存在内存里,所以Zookeeper能够获得高吞吐和低延迟。内存数据库的缺点是Zookeeper可供管理的数据库大小受内存限制。这个限制也进一步地保持存储在znode的数据数量小。

组成Zookeeper服务的服务器必须相互知道。只要大多数的服务器可用,那么Zookeeper服务也就将是可用的。客户端也必须知道服务器列表。客户端通过使用服务器列表来和Zookeeper来交互。

客户端只能连接单个Zookeeper服务器。客户端维护了一个TCP连接,通过这个连接,来发送请求,获得响应,获得监听事件以及发送心态。如果连接到服务器的TCP连接中断,那么客户端将会连接一台不同的服务器。当客户端首次连接到Zookeeper服务时,Zookeeper服务器首先会为客户端建立会话。如果客户端需要连接另外的服务器,那么会话会和新的服务器重新连接。

由Zookeeper客户端发送的读取请求会在客户端连接的Zookeeper服务器进行本地处理。如果读取请求在一个znode上注册了监听,那么监听器还会在Zookeeper服务器本地被跟踪。写入请求被转发到其他的Zookeeper服务器,在响应产生以前通过一致性。同步请求还会被转发到另外的服务器,但不会通过一致性。因此,读取请求的吞吐量可随服务器数量伸缩,写请求的吞吐量会随着服务器数量而降低。

有序对Zookeeper也很重要;几乎接近强迫式的无序。所有的更新都是有序的。Zookeeper实际上通过给每个更新打上加戳的序号来反映有序性。我们称这种序号为zxid(Zookeeper Transaction Id)。每个更新都有一个唯一的zxid。读取(和监听者)也遵循更新有序。读取的响应会使用最新的zxid打上戳,通过服务这些读请求的服务器处理。

翻译后感:有些地方即使用翻译工具也感觉违和。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值