ZooKeeper入门介绍

是什么

用于分布式应用程序的分布式协调服务

设计目标

简单易用

ZooKeeper允许分布式进程通过共享的分层名称空间相互协调,该命名空间的组织方式类似于标准文件系统

实施对高性能,高可用性,严格有序访问加以重视,性能方面意味着它可以在大型的分布式系统中使用。

可复制

ZooKeeper支持多机部署,可复制,可靠性方面使它不会成为单点故障。

顺序标记

ZooKeeper支持,用一个反映所有ZooKeeper事务顺序的数字标记每个更新。后续操作可以使用该命令来实现更高级别的抽象,例如同步原语

速度很快

ZooKeeper数据保留在内存中,这意味着ZooKeeper可以实现高吞吐量和低延迟数。

数据模型和分层名称空间

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

ZooKeeper的层次命名空间

ZooKeeper的层次命名空间

节点和临时节点

znode节点

Znodes维护一个统计数据结构,其中包括用于数据更改,ACL更改和时间戳的版本号,以允许进行缓存验证和协调更新

znode的数据每次更改时,版本号都会增加。例如,每当客户端检索数据时,它也接收数据的版本。

原子地读取和写入存储在名称空间中每个znode上的数据。读取将获取与znode关联的所有数据字节,而写入将替换所有数据。

每个节点都有一个访问控制列表(ACL),用于限制谁可以执行操作。

临时节点

ZooKeeper还具有临时节点的概念。只要创建znode的会话处于活动状态,这些znode就存在。会话结束时,将删除znode

有条件的更新和监视

客户端可以在znode上设置watch。znode更改时,将触发并删除监视。触发监视后,客户端会收到一个数据包,说明znode已更改。如果客户端和其中一个ZooKeeper服务器之间的连接断开,则客户端将收到本地通知。

保证

  • 顺序一致性-来自客户端的更新将按照发送的顺序应用。
  • 原子性-更新成功或失败。没有部分结果。
  • 单个系统映像-无论客户端连接到哪个服务器,客户端都将看到相同的服务视图。也就是说,即使客户端故障转移到具有相同会话的其他服务器,客户端也永远不会看到系统的较旧视图。
  • 可靠性-应用更新后,此更新将一直持续到客户端覆盖更新为止。
  • 及时性-确保系统的客户视图在特定时间范围内是最新的。

简单的API

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

  • create:在树中的某个位置创建一个节点
  • delete:删除节点
  • exists:测试某个位置是否存在节点
  • get data:从节点读取数据
  • set data:将数据写入节点
  • get children :获取节点子节点的列表
  • sync:等待数据传播

实现

复制的数据库是包含整个数据树的内存数据库。更新会记录到磁盘以确保可恢复性,并且在将写入应用于内存数据库之前,会将写入序列化到磁盘。

每个ZooKeeper服务器都为客户端提供服务。客户端仅连接到一台服务器即可提交请求。读取请求从每个服务器数据库的本地副本提供服务。更改服务状态的请求(写请求)由协议协议处理。

作为协议协议的一部分,来自客户端的所有写请求都转发到称为领导者的单个服务器。其余的ZooKeeper服务器(称为跟随者)从领导者接收消息建议并同意消息传递。消息传递层负责替换出现故障的领导者,并将跟随者与领导者同步。

ZooKeeper使用自定义的原子消息传递协议。由于消息传递层是原子层,因此ZooKeeper可以保证本地副本永远不会发散。领导者收到写请求后,它将计算要应用写操作时系统的状态,并将其转换为捕获此新状态的事务。

 ZooKeeper入门指南(初次体验)
使用nexus搭建maven私有云远程仓库 
上一篇:ZooKeeper入门指南(初次体验)
下一篇:使用nexus搭建maven私有云远程仓库
评论

如果我的文章对你有帮助,或许可以打赏一下呀!

支付宝
微信
QQ