📜  Zookeeper-基础知识

📅  最后修改于: 2020-11-28 14:24:34             🧑  作者: Mango


在深入探讨ZooKeeper的工作之前,让我们看一下ZooKeeper的基本概念。我们将在本章中讨论以下主题-

  • 建筑
  • 分层名称空间
  • 届会
  • 手表

ZooKeeper的体系结构

看下图。它描述了ZooKeeper的“客户端-服务器体系结构”。

ZooKeeper的体系结构

下表说明了ZooKeeper体系结构中的每个组件。

Part Description
Client

Clients, one of the nodes in our distributed application cluster, access information from the server. For a particular time interval, every client sends a message to the server to let the sever know that the client is alive.

Similarly, the server sends an acknowledgement when a client connects. If there is no response from the connected server, the client automatically redirects the message to another server.

Server Server, one of the nodes in our ZooKeeper ensemble, provides all the services to clients. Gives acknowledgement to client to inform that the server is alive.
Ensemble Group of ZooKeeper servers. The minimum number of nodes that is required to form an ensemble is 3.
Leader Server node which performs automatic recovery if any of the connected node failed. Leaders are elected on service startup.
Follower Server node which follows leader instruction.

分层命名空间

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

  • 在图中,首先您有一个用“ /”分隔的根znode 。在root下,您有两个逻辑名称空间configworker

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

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

分层命名空间

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

  • 版本号-每个znode都有一个版本号,这意味着与znode关联的数据每次更改时,其相应的版本号也会增加。当多个Zookeeper客户端试图在同一znode上执行操作时,使用版本号很重要。

  • 动作控制列表(ACL) -ACL基本上是用于访问znode的身份验证机制。它控制着所有znode的读写操作。

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

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

Znodes的类型

Znodes分为持久性,顺序性和短暂性。

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

  • 临时znode-临时znode处于活动状态,直到客户端处于活动状态。当客户端与ZooKeeper集成断开连接时,临时znode会自动删除。因此,仅短暂的znode不允许再有孩子。如果删除了临时znode,则下一个合适的节点将填充其位置。临时znode在Leader选举中扮演重要角色。

  • 顺序znode-顺序znode可以是持久性的,也可以是短暂的。当将新的znode创建为顺序znode时,ZooKeeper会通过在原始名称上附加10位序列号来设置znode的路径。例如,如果将路径为/ myapp的znode创建为顺序znode,则ZooKeeper会将路径更改为/ myapp0000000001并将下一个序列号设置为0000000002。如果同时创建了两个顺序的znode,则ZooKeeper永远不会使用相同的数字每个znode。顺序znode在锁定和同步中起重要作用。

届会

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

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

会话超时通常以毫秒为单位。当会话由于某种原因结束时,在该会话期间创建的临时znode也会被删除。

手表

监视是一种简单的机制,可以使客户端获得有关ZooKeeper集成中的更改的通知。客户端可以在读取特定的znode时设置手表。监视将向znode(客户机在其上注册)的任何更改发送通知到已注册的客户机。

Znode更改是与znode关联的数据的修改或znode的子级中的更改。手表仅触发一次。如果客户端再次想要通知,则必须通过另一个读取操作来完成。连接会话期满后,客户端将与服务器断开连接,并且关联的监视也将被删除。