Zookeeper

来源:互联网 发布:centos 7.3 安装vftp 编辑:程序博客网 时间:2024/05/21 00:52
在深入了解ZooKeeper的运作之前,让我们来看看ZooKeeper的基本概念。我们将在本章中讨论以下主题:
1、Architecture(架构)
2、Hierarchical namespace(层次命名空间)
3、Session(会话)
4、Watches(监视)

ZooKeeper的架构

看看下面的图表。它描述了ZooKeeper的“客户端-服务器架构”。

ZooKeeper的架构

作为ZooKeeper架构的一部分的每个组件在下表中进行了说明。

部分描述Client(客户端)

客户端,我们的分布式应用集群中的一个节点,从服务器访问信息。对于特定的时间间隔,每个客户端向服务器发送消息以使服务器知道客户端是活跃的。

类似地,当客户端连接时,服务器发送确认码。如果连接的服务器没有响应,客户端会自动将消息重定向到另一个服务器。

Server(服务器)服务器,我们的ZooKeeper总体中的一个节点,为客户端提供所有的服务。向客户端发送确认码以告知服务器是活跃的。EnsembleZooKeeper服务器组。形成ensemble所需的最小节点数为3。Leader服务器节点,如果任何连接的节点失败,则执行自动恢复。Leader在服务启动时被选举。Follower跟随leader指令的服务器节点

层次命名空间

下图描述了用于内存表示的ZooKeeper文件系统的树结构。ZooKeeper节点称为 znode 每个znode由一个名称标识,并用路径(/)序列分隔。

  • 在图中,首先有一个由“/”分隔的znode。在根目录下,你有两个逻辑命名空间 config  workers 

  • config 命名空间用于集中式配置管理,workers 命名空间用于命名。

  •  config 命名空间下,每个znode最多可存储1MB的数据。这于UNIX文件系统相类似,除了父znode也可以存储数据。这种结构的主要目的是存储同步数据并描述znode的元数据。此结构称为 ZooKeeper数据模型

分层命名空间

ZooKeeper数据模型中的每个znode都维护着一个 stat 结构。stat仅提供znode的元数据。它由版本号,操作控制列表(ACL),时间戳和数据长度组成。

  • 版本号 - 每个znode都有版本号,这意味着每当与znode相关联的数据发生变化时,其对应的版本号也会增加。当多个zookeeper客户端尝试在同一znode上执行操作时,版本号的使用就很重要。

  • 操作控制列表(ACL) - ACL基本上是访问znode的认证机制。它管理所有znode读取和写入操作。

  • 时间戳 - 时间戳表示创建和修改znode所经过的时间。它通常表示为毫秒。ZooKeeper标识“事务ID"(zxid)对znode的每个更改。Zxid 是唯一的,并且为每个事务维护时间,以便您可以轻松地确定从一个请求到另一个请求的时间。

  • 数据长度 - 存储在znode中的数据总量是数据长度。您最多可以存储1MB的数据。

Znodes的类型

Znodes被分为持久性,连续性和短暂性。

  • Persistence znode - 即使在创建该特定znode的客户端断开连接后,Persistence znode仍然存在。 默认情况下,除非另有说明,否则所有znode都是持久的。

  • 临时znode - 临时znode有效,直到客户端活着。 当客户端从ZooKeeper集合断开连接时,临时znode会自动删除。 为此,只有临时znode不允许有孩子进一步。 如果删除临时znode,则下一个合适的节点将填充其位置。 临时znode在领导选举中发挥重要作用。

  • 顺序znode - 顺序znode可以是持久的或短暂的。 当一个新的znode被创建为一个连续的znode,然后ZooKeeper设置znode的路径,通过附加一个10位的序列号到原始名称。 例如,如果将具有路径 / myapp 的znode创建为顺序znode,则ZooKeeper将将路径更改为 / myapp0000000001 ,并将下一个序列号设置为0000000002.如果两个 顺序znode是并发创建的,那么ZooKeeper从不对每个znode使用相同的数字。 顺序znode在锁定和同步中起重要作用。

会话

会话对于ZooKeeper的操作非常重要。 会话中的请求按FIFO顺序执行。 一旦客户端连接到服务器,将建立会话并向客户端分配会话ID 

客户端以特定的时间间隔发送心跳以保持会话有效。 如果ZooKeeper集合没有从客户端接收到超过在服务启动时指定的时间段(会话超时)的心跳,则它决定客户端死亡。

会话超时通常用毫秒表示。 当会话由于任何原因结束时,在该会话期间创建的临时znode也会被删除。

观察者

观察者(Watcher)是一种简单的机制,使客户端得到关于ZooKeeper集合中的更改的通知。客户端可以在读取特定znode时设置Watcher。Watcher会向注册的客户端发送任何znode(客户端注册表)更改的通知。

Znode更改是与znode的相关数据的修改或znode的孩子的更改。 只触发一次watcher。 如果客户端想要再次通知,则必须通过另一个读取操作来完成。 当连接会话过期时,客户端将与服务器断开连接,相关联的watcher也将被删除。

原创粉丝点击