Skip to content

Latest commit

 

History

History
36 lines (22 loc) · 2.24 KB

shujucunchu.md

File metadata and controls

36 lines (22 loc) · 2.24 KB

从存储位置上来说,事务日志和数据快照一样,都存储在本地磁盘上;而从业务角度来讲,内存数据就是我们创建数据节点、添加监控等请求时直接操作的数据。

事务日志数据主要用于记录本地事务性会话操作,用于 ZooKeeper 集群服务器之间的数据同步。

事务快照则是将内存数据持久化到本地磁盘。

❝ 这里要注意的一点是,数据快照是每间隔一段时间才把内存数据存储到本地磁盘,因此数据并不会一直与内存数据保持一致。 ❞ 在单台 ZooKeeper 服务器运行过程中因为异常而关闭时,可能会出现数据丢失等情况。

「内存数据」

ZooKeeper 的数据模型可以看作一棵树形结构,而数据节点就是这棵树上的叶子节点。

从数据存储的角度看,ZooKeeper 的数据模型是存储在内存中的。

我们可以把 ZooKeeper 的数据模型看作是存储在内存中的数据库,而这个数据库不但存储数据的节点信息,还存储每个数据节点的 ACL 权限信息以及 stat 状态信息等。

而在底层实现中,ZooKeeper 数据模型是通过 DataTree 类来定义的。 DataTree 类定义了一个 ZooKeeper 数据的内存结构。

DataTree 的内部定义类 nodes 节点类型、root 根节点信息、子节点的 WatchManager 监控信息等数据模型中的相关信息。

可以说,一个 DataTree 类定义了 ZooKeeper 内存数据的逻辑结构。

「事务日志」

为了整个 ZooKeeper 集群中数据的一致性,Leader 服务器会向 ZooKeeper 集群中的其他角色服务发送数据同步信息,在接收到数据同步信息后, ZooKeeper 集群中的 Follow 和 Observer 服务器就会进行数据同步。

❝ 而这两种角色服务器所接收到的信息就是 Leader 服务器的事务日志。 ❞ 在接收到事务日志后,并在本地服务器上执行。这种数据同步的方式,避免了直接使用实际的业务数据,减少了网络传输的开销,提升了整个 ZooKeeper 集群的执行性能。

整理:沉默王二,戳转载链接,作者:月伴飞鱼,戳原文链接