📅  最后修改于: 2020-11-28 14:24:34             🧑  作者: Mango
在深入探讨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下,您有两个逻辑名称空间config和worker 。
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分为持久性,顺序性和短暂性。
持久性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的子级中的更改。手表仅触发一次。如果客户端再次想要通知,则必须通过另一个读取操作来完成。连接会话期满后,客户端将与服务器断开连接,并且关联的监视也将被删除。