2 个版本 (1 个稳定版)
1.0.0 | 2021年10月26日 |
---|---|
0.1.0 | 2021年10月26日 |
#2086 在 数据库接口
30KB
878 行
甘道夫
甘道夫是 Raft 算法的实现,可用于对任何数据库达成共识。
概述
该项目由两个模块组成:gandalf-consensus
和 gandalf-kvs
,其中 gandalf-kvs
是甘道夫自己的数据库,可以被其他数据库替换。项目的整体架构如下所示。
每个数字代表系统发出的一个 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
甘道夫-共识是 Raft 算法的实现,因此它负责将共识引入我们的系统。它还负责与数据库交互,并在条目提交后在该数据库上执行命令。要将甘道夫连接到您的数据库,您需要为您的数据库实现 Parser
和 Tracker
特性,然后连接甘道夫到您的数据库,并将您的客户端指向甘道夫。您可以使用存储在存储库中的现有 gandalf.conf 文件来启动集群。
解析器
解析器特责任是将客户端请求使用数据库协议转换为甘道夫可理解的内容,以便它可以决定请求是否为 Read
或 Write
类型。然后,如果它是 Write
请求,它将请求附加到日志并复制到其他节点,如果是 Read
请求,则仅执行它。
跟踪器
跟踪器特责任于管理 Raft 日志并与数据库通信。
Gandolf-KVS
甘道夫-KVS 是一个类似于 Redis 的键值存储,它高度灵感来源于 tokio mini-redis,并用作目前甘道夫-共识模块唯一支持的数据库。它使用 RESP
通过 TCP 与客户端和共识模块通信。此模块由两个二进制文件组成:用于启动服务器的 gandalf-kvs-server
和用于与服务器交互的客户端 gandalf-kvs
。
目前支持的命令有
命令 | 功能 |
---|---|
Set | 为键设置值 |
Get | 检索键的值 |
Load | 执行多个设置操作或加载快照 |
Snap | 创建快照 |
KVS 的整体架构如下所示
安装
要安装 gandalf-kvs,请使用
cargo install gandalf-kvs
要安装 gandalf,请使用
cargo install gandalf
依赖项
~7–14MB
~150K SLoC