Zookeeper 简明教程
Zookeeper - Fundamentals
在深入探讨 ZooKeeper 的工作原理之前,让我们了解一下 ZooKeeper 的基本概念。在本章中,我们将讨论以下主题:
-
Architecture
-
Hierarchical namespace
-
Session
-
Watches
Architecture of ZooKeeper
请看以下图表。它描述了 ZooKeeper 的“客户端-服务器架构”。
ZooKeeper 架构的一部分的每个组件在以下表格中都有说明。
Part |
Description |
Client |
客户机,作为分布式应用程序集群中的节点之一,从服务器访问信息。对于特定时间间隔,每个客户端会向服务器发送一条消息来让服务器知道该客户端是活动的。类似地,当客户端连接时,服务器会发送确认。如果连接的服务器没有响应,则客户端会自动将消息重定向到另一台服务器。 |
Server |
服务器,作为 ZooKeeper 集群中的节点之一,向客户端提供所有服务。向客户端发送确认以通知其服务器是活动的。 |
Ensemble |
ZooKeeper 服务器组。要形成集群所需的最小节点数为 3。 |
Leader |
如果任何连接的节点发生故障,则执行自动恢复的服务器节点。领导者在服务启动时被选出。 |
Follower |
遵循领导者指令的服务器节点。 |
Hierarchical Namespace
以下图表描述了用于内存表示的 ZooKeeper 文件系统的树结构。ZooKeeper 节点称为 znode 。每个 znode 由一个名称标识并由路径(/)序列分隔。
-
在图表中,您首先有一个根 znode ,用“/”分隔。在根下,您有两个逻辑名称空间 config 和 workers 。
-
config 命名空间用于集中配置管理, workers 命名空间用于命名。
-
在 config 命名空间下,每个 znode 可以最多存储 1MB 的数据。这与 UNIX 文件系统类似,但不同之处在于父 znode 也能存储数据。这种结构的主要目的是为了存储同步数据并描述 znode 的元数据。该结构被称为 ZooKeeper Data Model 。
ZooKeeper 数据模型中的每个 znode 都维护一个 stat 结构。一个状态信息简单地提供了 znode 的 metadata 。它包括版本号、操作控制列表 (ACL)、时间戳和数据长度。
-
Version number − 每个 znode 有一个版本号,这意味着与 znode 关联的数据每次更改时,其相应的版本号也会增加。当多个 zookeeper 客户端尝试对同一个 znode 执行操作时,使用版本号很重要。
-
Action Control List (ACL) − ACL 基本上是一种访问 znode 的身份验证机制。它管理所有 znode 的读取和写入操作。
-
Timestamp − 时间戳表示从 znode 的创建和修改开始经过的时间。它通常以毫秒为单位表示。ZooKeeper 会通过“事务 ID”(zxid)识别对 znode 进行的每次更改。 Zxid 是唯一的,并为每个事务记录时间,这样便于轻松识别从一个请求到另一个请求之间经过的时间。
-
Data length − znode 中存储的数据总量就是数据长度。您可以最多存储 1MB 的数据。
Types of Znodes
znode 被归类为持久性、顺序性和临时性。
-
Persistence znode − 持久性 znode 即使创建它的客户端断开连接后仍然存在。默认情况下,所有 znode 都是持久性的,除非另有指定。
-
Ephemeral znode − 临时 znode 在客户端处于活动状态时是处于活动状态的。当客户端与 ZooKeeper 集群断开连接时,临时 znode 将被自动删除。出于此原因,不允许只有临时 znode 再有子 znode。如果一个临时 znode 被删除,那么下一个合适的节点将填补它的位置。临时 znode 在领导者选举中发挥着重要作用。
-
Sequential znode − 顺序 znode 可以是持久性的,也可以是临时的。当创建一个新 znode 为顺序 znode 时,ZooKeeper 通过将一个 10 位的序列号附加到原始名称来设置 znode 的路径。例如,如果路径为 /myapp 的 znode 被创建为顺序 znode,ZooKeeper 将把路径更改为 /myapp0000000001 ,并将下一个序列号设置为 0000000002。如果同时创建两个顺序 znode,那么 Zookeeper 永远不会为每个 znode 使用相同的号码。顺序 znode 在锁定和同步中发挥着重要作用。