1 个稳定版本

1.0.0 2021年10月28日

#2877 in 数据库接口

GPL-3.0-or-later

105KB
2.5K SLoC

甘道夫

甘道夫是 Raft 算法的实现,可以用于在任意数据库上建立共识。

概述

该项目由两个模块组成,分别是 gandalf-consensusgandalf-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

Gandolf-consensus 是 Raft 算法的实现,因此它负责将共识引入我们的系统。它还负责与数据库交互,并在条目提交后在该数据库上执行命令。要将甘道夫连接到您的数据库,您需要为您的数据库实现 ParserTracker 特性,然后将甘道夫连接到您的数据库,并将您的客户端指向甘道夫。您可以使用仓库中现有的 gandalf.conf 文件来启动一个集群。

Parser

Parser 特性负责将客户端请求使用数据库协议转换为甘道夫可以理解的内容,以便它可以决定请求是来自 Read 还是 Write 类。然后它将请求附加到日志中,并在是 Write 请求时将其复制到其他节点,如果是 Read 请求则直接执行。

Tracker

Tracker 特性负责管理 Raft 日志并与数据库通信。

Gandolf-KVS

Gandolf-KVS 是一个类似于 Redis 的键值存储,高度灵感来源于 tokio mini-redis,目前是 Gandolf-onsensus 模块唯一支持的数据库。它使用 RESP 在 TCP 上与客户端和共识模块进行通信。此模块由两个二进制文件组成,分别是用于启动服务器的 gandalf-kvs-server 和用于与服务器交互的客户端 gandalf-kvs
目前支持的命令有

命令 功能
设置 为键设置值
获取 检索键的值
加载 执行多个设置或加载快照
快照 创建快照

KVS 的整体架构如下所示

安装

要安装 gandalf-kvs,请使用

cargo install gandalf-kvs

要安装 gandalf,请使用

cargo install gandalf

依赖项

~12–20MB
~267K SLoC