1个稳定版本
| 1.0.0 | 2021年10月26日 |
|---|
#2851 在 数据库接口
105KB
2.5K SLoC
Gandolf
Gandolf是Raft算法的实现,可用于在任意数据库上引入共识。
概述
该项目由两个模块组成:gandalf-consensus 和 gandalf-kvs,后者是Gandolf自己的数据库,可以被其他数据库替换。项目的整体架构如图所示。
每个数字代表系统发出的一个 RaftMessage。
| 编号 | 名称 |
|---|---|
| 1 | VoteMsg |
| 2 | VoteResp |
| 3 | AppendMsg |
| 4 | AppendResp |
| 5 | ClientReadMsg |
| 6 | ClientWriteMsg |
| 7 | ClientResp |
| 8 | ClientError |
| 9 | SnapMsg |
| 10 | InstallSnapshot |
| 11 | InstallSnapshotResp |
Gandolf-consensus
Gandolf-consensus是Raft算法的实现,因此它负责将共识引入我们的系统。它还负责与数据库交互并在提交条目后在其上执行命令。要连接Gandolf到您的数据库,您需要为您自己的数据库实现Parser和Tracker特性,然后将Gandolf连接到您的数据库,并将您的客户端指向Gandolf。您可以使用存储在仓库中的现有gandolf.conf文件来启动集群。
Parser
Parser特性负责将客户端请求使用数据库协议转换为Gandolf可理解的内容,从而决定请求是来自Read还是Write类型。然后它将请求追加到日志,并在是Write类型的情况下将其复制到其他节点,或者在是Read类型的情况下直接执行它。
Tracker
Tracker特性负责管理Raft日志并与数据库通信。
Gandolf-KVS
Gandolf-KVS是一个类似Redis的键值存储,高度受到tokio mini-redis的启发,用作Gandolf-consensus模块目前唯一支持的数据库。它使用RESP通过TCP与客户端和共识模块通信。此模块由两个二进制文件组成:gandalf-kvs-server,用于启动服务器,以及gandalf-kvs,用于与服务器交互。
目前支持的命令有
| 命令 | 功能 |
|---|---|
| Set | 为键设置值 |
| Get | 检索键的值 |
| Load | 在一次操作中执行多个设置或加载快照 |
| Snap | 拍摄快照 |
KVS的整体架构如图所示
安装
要安装gandolf-kvs,请使用
cargo install gandalf-kvs
要安装gandolf,请使用
cargo install gandalf
依赖项
~11-20MB
~251K SLoC