ZooKeeper Overview

zookeeper : 为分布式应用提供分布式协调服务

zookeeper 为分布式应用提供了一个分布式、开源的协调服务。他提供了一系列的简单原语(指zookeeper的一些特性),分布式应用可以在这些原语之上实现更高级别的服务:同步、配置维护、集群管理、命名服务。组件设计易于使用,数据模型基于熟悉的文件目录树结构。分布式服务很难进行协调,很容易造成相互竞争以及死锁。zookeeper希望能够使用分布式应用不用从头到尾实现分布式服务的协调工作。

设计目标

简单易用

zookeeper 允许分布式进程通过共享层级命名空间来进行协调,命名空间的组织方式与标准文件系统类似。命名空间由数据寄存器(称为znodes)组成,zookeeper 数据保存在内存中,因此可以实现高吞吐和低延迟。
zookeeper 的实现非常重视高性能、高可用性、严格有序的访问。zookeeper的高性能意味着它可以在大型的分布式系统中使用,可靠性使其不会成为单点故障。严格的有序访问意味着可以在客户端实现复杂的同步原语。

可复制

与它协调的分布式应用一样,它可以在集群中进行复制。
zookeeper
组成zookeeper的服务器之前必须互相感知,他们在内存中通过维护一个状态镜像以及持久存储的事务日志和快照。只要大多数的服务器节点可用,那么zookeeper的服务就可用。
客户端连接到单个zookeeper服务器,通过TCP长连接来和服务端进行请求和响应、监听事件以及发送心跳。如果与服务器TCP连接超时,那个客户端会连接到其他服务器。

有序性

zookeeper 使用递增的数字来标记每个事务更新,后续操作可以通过该顺序来实现高级别的抽象,如同步。

高性能

zookeeper 适合以读为主的场景下,能够支撑数千台客户端运行。在读写比超过 10:1 的情况下表现最佳。

数据模型和分层命名空间

zookeeper 提供的命名空间和文件系统类似,每个节点的名称是由 “/” 分割的路径标识。
节点

节点以及临时节点

不同于标准的文件系统,zookeeper 命名空间中的每个节点及子节点都可以拥有数据,类似于文件系统中允许一个文件也是一个目录。(zookeeper 被设计用来存储协同数据:状态信息、配置信息、地点信息等)。因此每个节点存储的数据通常是比较小的,在 B 到 KB 级别),通过 znode 来表示 zookeeper 数据节点。
zookeeper 维护了一个 “stat” 结构,它包含了数据、权限以及时间戳的版本号,以允许缓存验证和协调更新。每次 znode 的数据更改时,版本号都会增加。例如:每当客户端检索数据时,也会接收到数据的版本号。
存储在命名空间中的每个 znode 数据以原子的方式读写。读取获取与 znode 关联的所有数据字节,写入时替换所有数据。每个节点都可以进行权限控制(ACL),限制每个用户能够进行的操作。
zookeeper 存在临时节点,临时节点的生命周期与创建它的客户端会话生命周期相同,当会话结束中,临时节点被删除。

条件更新及监听

zookeeper 支持设置监听器,客户端可以对 znodes 设置监听器。当 znode 更改时监听器会被触发并删除。监听器触发时会发消息给客户端通知 znode 。当客户端和 zookeeper 服务断开时,会受到另一个本地的通知。

承诺

zookeeper 非常简单快速。由于其目标是构建更复杂的服务(如同步)的基础,因此它提供了一系列保证:

  • 顺序一致性:客户端的更新将按发送顺序执行。
  • 原子性:更新成功或失败,没有中间结果。
  • 单系统镜像:无论客户端连接到那个服务器,看到的都是同样的视图。
  • 可靠性:一旦客户应用更新了数据,那个更新后的状态将一直持续直到下次更新。
  • 及时性:保证客户端在一定的时间延迟内看到最新的视图。

实现

这里写图片描述
- 复制数据库是包含整个数据树的内存数据库。更新会在写入内存数据库前会持久化到磁盘中,用来发生故障时恢复。
- 每个zookeeper服务器都可以为客户端服务。客户端连接到任意一台服务器来提交请求。读请求由连接的服务器内存数据库返回结果。写请求由协商协议处理。
- 作为协商协议的一部分,来自客户端的所有写请求都被转发到称为 “leader” 的单个服务器。其余的服务器(称为“followers”)接受来自 leader 的写入提议并同意写入提议,消息传递层负责替换出问题的 leader,并对 leader 和 followers进行同步。
- zookeeper 使用自定义的原子消息传递协议,由于消息传递是原子的,因此 zookeeper 可以保证每个服务器节点的本地副本数据永远保持一致。当 leader 接收到写请求时,会产生一个写入时状态到新状态的事务。

使用

虽然zookeeper的编程接口非常简单,但是你可以在这之上实现一些高阶的操作,如同步、集群成员管理。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值