目录
snapshot.cpp
snapshot.h
Snapshot 模块分析
- butil/time.h
- butil/string_printf.h
- brpc/uri.h
- braft/util.h
- braft/protobuf_file.h
- braft/local_storage.pb.h
- braft/remote_file_copier.h
- braft/snapshot.h
- braft/node.h
- braft/file_service.h
1. 类设计
主要类及其成员
LocalSnapshotMetaTable
_file_map: 文件元数据映射表
_meta: 快照元数据
- 主要函数:
LocalSnapshotWriter
- 成员变量:
_path: 快照路径
_meta_table: 元数据表
_fs: 文件系统适配器
- 主要函数:
init(): 初始化写入器
save_meta(): 保存元数据
add_file(): 添加文件
sync(): 同步数据到磁盘
- 成员变量:
_path: 快照路径
_meta_table: 元数据表
_addr: 服务器地址
_reader_id: 读取器ID
- 主要函数:
init(): 初始化读取器
load_meta(): 加载元数据
generate_uri_for_copy(): 生成复制URI
LocalSnapshotStorage
_path: 存储路径
_last_snapshot_index: 最新快照索引
_ref_map: 引用计数映射
- 主要函数:
类图
classDiagram
class SnapshotStorage {
<<abstract>>
+init()
+create()
+open()
}
class LocalSnapshotStorage {
-string _path
-int64_t _last_snapshot_index
-map<int64_t, int> _ref_map
+init()
+create()
+open()
}
class LocalSnapshotWriter {
-string _path
-LocalSnapshotMetaTable _meta_table
+init()
+save_meta()
+add_file()
}
class LocalSnapshotReader {
-string _path
-LocalSnapshotMetaTable _meta_table
-EndPoint _addr
+init()
+load_meta()
+generate_uri_for_copy()
}
SnapshotStorage <|-- LocalSnapshotStorage
LocalSnapshotStorage ..> LocalSnapshotWriter : creates
LocalSnapshotStorage ..> LocalSnapshotReader : creates
LocalSnapshotWriter --> LocalSnapshotMetaTable : uses
LocalSnapshotReader --> LocalSnapshotMetaTable : uses2. 处理流程
flowchart TD
A[创建快照] --> B{初始化写入器}
B -->|成功| C[保存元数据]
B -->|失败| D[返回错误]
C --> E[添加文件]
E --> F[同步到磁盘]
F -->|成功| G[重命名临时目录]
F -->|失败| H[清理临时文件]
G --> I[更新最新快照索引]快照安装流程
3. 时序图
快照创建时序
sequenceDiagram
participant Node
participant Storage
participant Writer
participant MetaTable
Node->>Storage: create()
Storage->>Writer: new Writer()
Writer->>Writer: init()
Writer->>MetaTable: save_meta()
loop 每个文件
Writer->>Writer: add_file()
Writer->>MetaTable: add_file()
end
Writer->>Writer: sync()
Storage->>Storage: update_last_snapshot()快照复制时序
sequenceDiagram
participant Source
participant Copier
participant Target
Source->>Copier: start_to_copy_from()
Copier->>Source: load_meta()
Copier->>Target: create_snapshot()
loop 每个文件
Copier->>Source: copy_file()
Copier->>Target: add_file()
end
Copier->>Target: sync()安全性保证
- 使用临时目录避免部分写入
- 引用计数管理快照生命周期
- 元数据校验确保完整性
- 异步复制机制
- 文件级别的增量复制
- 支持并发读取
资源管理
5. 最佳实践建议
实现建议
- 合理设置快照间隔
- 实现高效的文件系统适配器
- 添加快照压缩功能
- 优化元数据存储格式
使用建议
- 定期触发快照
- 监控快照大小和耗时
- 合理配置存储路径
- 做好容量规划
_file_map: 文件元数据映射表_meta: 快照元数据
- 成员变量:
_path: 快照路径_meta_table: 元数据表_fs: 文件系统适配器
- 主要函数:
init(): 初始化写入器save_meta(): 保存元数据add_file(): 添加文件sync(): 同步数据到磁盘
- 成员变量:
_path: 快照路径_meta_table: 元数据表_addr: 服务器地址_reader_id: 读取器ID
- 主要函数:
init(): 初始化读取器load_meta(): 加载元数据generate_uri_for_copy(): 生成复制URI
_path: 存储路径_last_snapshot_index: 最新快照索引_ref_map: 引用计数映射
LocalSnapshotWriter
LocalSnapshotStorage
- 使用临时目录避免部分写入
- 引用计数管理快照生命周期
- 元数据校验确保完整性
- 异步复制机制
- 文件级别的增量复制
- 支持并发读取
- 合理设置快照间隔
- 实现高效的文件系统适配器
- 添加快照压缩功能
- 优化元数据存储格式
- 定期触发快照
- 监控快照大小和耗时
- 合理配置存储路径
- 做好容量规划
类图
classDiagram
class SnapshotStorage {
<<abstract>>
+init()
+create()
+open()
}
class LocalSnapshotStorage {
-string _path
-int64_t _last_snapshot_index
-map<int64_t, int> _ref_map
+init()
+create()
+open()
}
class LocalSnapshotWriter {
-string _path
-LocalSnapshotMetaTable _meta_table
+init()
+save_meta()
+add_file()
}
class LocalSnapshotReader {
-string _path
-LocalSnapshotMetaTable _meta_table
-EndPoint _addr
+init()
+load_meta()
+generate_uri_for_copy()
}
SnapshotStorage <|-- LocalSnapshotStorage
LocalSnapshotStorage ..> LocalSnapshotWriter : creates
LocalSnapshotStorage ..> LocalSnapshotReader : creates
LocalSnapshotWriter --> LocalSnapshotMetaTable : uses
LocalSnapshotReader --> LocalSnapshotMetaTable : uses
2. 处理流程
flowchart TD
A[创建快照] --> B{初始化写入器}
B -->|成功| C[保存元数据]
B -->|失败| D[返回错误]
C --> E[添加文件]
E --> F[同步到磁盘]
F -->|成功| G[重命名临时目录]
F -->|失败| H[清理临时文件]
G --> I[更新最新快照索引]快照安装流程
3. 时序图
快照创建时序
sequenceDiagram
participant Node
participant Storage
participant Writer
participant MetaTable
Node->>Storage: create()
Storage->>Writer: new Writer()
Writer->>Writer: init()
Writer->>MetaTable: save_meta()
loop 每个文件
Writer->>Writer: add_file()
Writer->>MetaTable: add_file()
end
Writer->>Writer: sync()
Storage->>Storage: update_last_snapshot()快照复制时序
sequenceDiagram
participant Source
participant Copier
participant Target
Source->>Copier: start_to_copy_from()
Copier->>Source: load_meta()
Copier->>Target: create_snapshot()
loop 每个文件
Copier->>Source: copy_file()
Copier->>Target: add_file()
end
Copier->>Target: sync()安全性保证
资源管理
5. 最佳实践建议
实现建议
使用建议
3. 时序图
快照创建时序
sequenceDiagram
participant Node
participant Storage
participant Writer
participant MetaTable
Node->>Storage: create()
Storage->>Writer: new Writer()
Writer->>Writer: init()
Writer->>MetaTable: save_meta()
loop 每个文件
Writer->>Writer: add_file()
Writer->>MetaTable: add_file()
end
Writer->>Writer: sync()
Storage->>Storage: update_last_snapshot()
快照复制时序
sequenceDiagram
participant Source
participant Copier
participant Target
Source->>Copier: start_to_copy_from()
Copier->>Source: load_meta()
Copier->>Target: create_snapshot()
loop 每个文件
Copier->>Source: copy_file()
Copier->>Target: add_file()
end
Copier->>Target: sync()
No comments yet.