Dragonboat 统一存储 LogDB 实现分析
一、项目概览 Dragonboat 是纯 Go 实现的(multi-group)Raft 库。 为应用屏蔽 Raft 复杂性,提供易于使用的 NodeHost 和状态机接口。该库(自称)有如下特点: 高吞吐、流水线化、批处理; 提供了内存/磁盘状态机多种实现; 提供了 ReadIndex、成员变更、Leader转移等管理端API; 默认使用 Pebble 作为 存储后端。 本次代码串讲以V3的稳定版本为基础,不包括GitHub上v4版本内容。 二、整体架构 三、LogDB 统一存储 LogDB 模块是 Dragonboat 的核心持久化存储层,虽然模块名字有Log,但是它囊括了所有和存储相关的API,负责管理 Raft 协议的所有持久化数据,包括: Raft状态 (RaftState) Raft内部状态变更的集合结构 包括但不限于: ClusterID/NodeID: 节点ID RaftState: Raft任期、投票情况、commit进度 EntriesToSave:Raft提案日志数据 Snapshot:快照元数据(包括快照文件路径,快照大小,快照对应的提案Index,快照对应的R...
