zookeeper个人基础教程(一)基础篇

  1. 概述
    zookeeper 是apache旗下的hadoop子项目,它一个开源的,分布式的服务协调器。同样通过zookeeper可以实现服务间的同步与配置维护。通常情况下,在分布式应用开发中,协调服务这样的工作不是件容易的事,很容易出现死锁,不恰当的选举竞争等。zookeeper就是担负起了分布式协调的重担。
  2. 特点
  • 使用简单:ZooKeeper允许分布式程序通过一个类似于标准文件系统的共享的层次化名称空间来相互协调。名称空间由数据寄存器(称为znode)组成,在ZooKeeper中,它们类似于文件和目录。与为存储而设计的典型文件系统不同,ZooKeeper数据保存在内存中,这意味着ZooKeeper可以达到高吞吐量和低延迟数
  • 同步与复制:组成ZooKeeper服务的服务器必须互相有感知。客户端连接到一个ZooKeeper服务器。客户端维护一个TCP连接,通过它发送请求、获取响应、获取观察事件和发送心跳。如果连接到服务器的TCP连接中断,客户端将连接到另一个服务器。
  • 读取速度快 基于内存读取,延迟低
  • 有序 Follower通过队列和zxid等顺序标识保证请求的顺序处理,一言不合就会重新同步Leader
  1. znode类型
  • PERSISTENT-持久化目录节点
    客户端与zookeeper断开连接后,该节点依旧存在
  • PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点
    客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号。当一个新的znode被创建为一个顺序节点时,ZooKeeper通过将10位的序列号附加到原始名称来设置znode的路径 比如znode0000000001,下一个节点将同步命名为znode0000000002
  • EPHEMERAL-临时目录节点
    客户端与zookeeper断开连接后,该节点被删除
  • EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点
    客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号
  1. zookeeper到底是什么?
  • ZooKeeper是一种集中式服务,用于维护配置信息,命名,提供分布式同步和提供组服务。所有这些类型的服务都以分布式应用程序的某种形式使用。每次实施它们都需要做很多工作来修复不可避免的错误和竞争条件。由于难以实现这些类型的服务,应用程序最初通常会吝啬它们,这使得它们在变化的情况下变得脆弱并且难以管理。即使正确完成,这些服务的不同实现也会在部署应用程序时导致管理复杂性。
  • ZooKeeper是一种用于分布式应用程序的高性能协调服务。它在一个简单的界面中公开了常用服务 - 例如命名,配置管理,同步和组服务 - 因此您不必从头开始编写它们。您可以使用现成的方法来实现共识,组管理,领导者选举和在线协议
  1. ZooKeeper:分布式应用程序的分布式协调服务
  • ZooKeeper是一种用于分布式应用程序的分布式开源协调服务。它公开了一组简单的原语,分布式应用程序可以构建这些原语,以实现更高级别的服务,以实现同步,配置维护以及组和命名。它被设计为易于编程,并使用在熟悉的文件系统目录树结构之后设计的数据模型。它在Java中运行,并且具有Java和C的绑定。

  • 众所周知,协调服务很难做到。他们特别容易出现比赛条件和死锁等错误。ZooKeeper背后的动机是减轻分布式应用程序从头开始实施协调服务的责任。

  • ZooKeeper很简单。ZooKeeper允许分布式进程通过共享的分层命名空间相互协调,该命名空间的组织方式与标准文件系统类似。名称空间由数据寄存器组成 - 在ZooKeeper用语中称为znodes - 这些与文件和目录类似。与专为存储而设计的典型文件系统不同,ZooKeeper数据保存在内存中,这意味着ZooKeeper可以实现高吞吐量和低延迟数量。

  • ZooKeeper实现非常重视高性能,高可用性,严格有序的访问。ZooKeeper的性能方面意味着它可以在大型分布式系统中使用。可靠性方面使其不会成为单点故障。严格的排序意味着可以在客户端实现复杂的同步原语。

  • ZooKeeper被复制。与它协调的分布式进程一样,ZooKeeper本身也可以在称为集合的一组主机上进行复制。

在这里插入图片描述
组成ZooKeeper服务的服务器必须彼此了解。它们维护内存中的状态图像,以及持久性存储中的事务日志和快照。只要大多数服务器可用,ZooKeeper服务就可用。

  • 客户端连接到单个ZooKeeper服务器。客户端维护TCP连接,通过该连接发送请求,获取响应,获取监视事件以及发送心跳。如果与服务器的TCP连接中断,则客户端将连接到其他服务器。

  • ZooKeeper是有序的。ZooKeeper使用反映所有ZooKeeper事务顺序的数字标记每个更新。后续操作可以使用该顺序来实现更高级别的抽象,例如同步原语(同步操作的基本类型数据?)。

  • ZooKeeper很快。它在“主导读取”工作模式中特别快。ZooKeeper应用程序在数千台计算机上运行,​​并且在读取比写入更常见的情况下表现最佳,比率大约为10:1。

ZooKeeper的分层命名空间

在这里插入图片描述
ZooKeeper非常快速而且非常简单。但是,由于其目标是构建更复杂的服务(如同步)的基础,因此它提供了一系列保证。这些是:

  • 顺序一致性 客户端的更新将按发送顺序应用。(FIFO顺序)
  • 原子性 更新要么成功要么失败
  • 单系统映像 无论服务器连接到哪个服务器,客户端都将看到相同的服务视图。
  • 可靠性 一旦应用了更新,它将从那时起持续到客户端覆盖更新。
  • 及时性 系统的客户视图保证在特定时间范围内是最新的。
  1. API
    ZooKeeper的设计目标之一是提供一个非常简单的编程接口。因此,它仅支持以下操作:
  • create:在树中的某个位置创建一个节点

  • delete:删除节点

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

  • get data:从节点读取数据

  • set data:将数据写入节点

  • get children:检索节点的子节点列表

  • sync:等待传播数据

  1. 原理

ZooKeeper Components显示ZooKeeper服务的高级组件。除请求处理器外,构成ZooKeeper服务的每个服务器都复制其自己的每个组件的副本。
在这里插入图片描述
复制数据库是包含整个数据树的内存数据库。更新将记录到磁盘以获得可恢复性,并且写入在应用于内存数据库之前会序列化到磁盘。

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

作为协议协议的一部分,来自客户端的所有写入请求都被转发到称为领导者的单个服务器。其余的ZooKeeper服务器(称为关注者)接收来自领导者的消息提议并同意消息传递。消息传递层负责替换失败的领导者并将关注者与领导者同步。

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

本文参考地址: https://zookeeper.apache.org/doc/current/zookeeperOver.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值