ZooKeeper 持久化机制
Posted 郭朝阳@
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZooKeeper 持久化机制相关的知识,希望对你有一定的参考价值。
ZooKeeper 持久化机制
概述
ZooKeeper 的数据模型主要涉及两类知识:数据模型 和 持久化机制,其实就是两套 API
- 1、数据模型:DataTree + DataNode
- 2、持久化机制:FileTxnSnalLog = TxnLog + SnapLog
- 3、zk数据库:ZKDataBase = DataTree + FileTxnSnalLog
在 ZKDataBase 对象的内部有两个成员变量:DataTree + FileTxnSnalLog
ZooKeeper 本身是一个对等架构(内部选举,从所有 Learner 中选举一个 Leader, 剩下的成为 Follower)
- 1、每个节点上都保存了整个系统的所有数据(leader存储了数据,所有的follower节点都是leader的副本节点)
- 2、每个节点上的都把数据放在磁盘一份,放在内存一份
ZooKeeper 的数据模型,抽象出了重要的三个 API 用来完成数据的管理:
- 1、DataNode znode 系统中的一个节点的抽象
- 2、DataTree znode 系统的完整抽象
- 3、ZKDataBase 负责管理 DataTree,处理最基本的增删改查的动作,执行 DataTree 的相关快照和恢复的操作
关于 ZooKeeper 中的数据在内存中的组织,其实就是一棵树:
- 1、这棵树就叫做:DataTree (抽象了一棵树)
- 2、这棵树上的节点:DataNode (抽象一个节点)
- 3、关于管理这个 DataTree 的组件就是 ZKDataBase (内存数据库:针对 DataTree 能做各种操作)
ZooKeeper 的持久化的一些操作接口,都在:org.apache.zookeeper.server.persistence 包中。
SnapShot是针对快照的顶级封装;
TxnLog 是针对日志操作的顶级封装;
FileSnap和FileTxnLog是针对这两个封装的实现。
FileTxnSnapLog这个是针对这两个操作的封装,保证了数据的持久化和一致性(内存和磁盘快照数据的一致性)
主要的类总结:
- 第一组:主要是用来操作日志的(如果客户端往 ZooKeeper 中写入一条数据,则记录一条日志)
TxnLog,接口,读取事务性日志的接口
FileTxnLog,实现 TxnLog 接口,添加了访问该事务性日志的 API - 第二组:拍摄快照(当内存数据持久化到磁盘)
Snapshot,接口类型,持久层快照接口
FileSnap,实现 Snapshot 接口,负责存储、序列化、反序列化、访问快照 - 第三组;两个成员变量:TxnLog 和 SnapShot
FileTxnSnapLog,封装了 TxnLog 和 SnapShot - 第四组:工具类
Util,工具类,提供持久化所需的API
以上是关于ZooKeeper 持久化机制的主要内容,如果未能解决你的问题,请参考以下文章