#consensus #key-value #system #raft-consensus #kvs #gandolf

bin+lib gandolf-kvs

用于甘道夫共识系统中的键值存储

2 个版本 (1 个稳定版)

1.0.0 2021年10月26日
0.1.0 2021年10月26日

#2086数据库接口


用于 gandolf-consensus

GPL-3.0-or-later

30KB
878

甘道夫

甘道夫是 Raft 算法的实现,可用于对任何数据库达成共识。

概述

该项目由两个模块组成:gandalf-consensusgandalf-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 算法的实现,因此它负责将共识引入我们的系统。它还负责与数据库交互,并在条目提交后在该数据库上执行命令。要将甘道夫连接到您的数据库,您需要为您的数据库实现 ParserTracker 特性,然后连接甘道夫到您的数据库,并将您的客户端指向甘道夫。您可以使用存储在存储库中的现有 gandalf.conf 文件来启动集群。

解析器

解析器特责任是将客户端请求使用数据库协议转换为甘道夫可理解的内容,以便它可以决定请求是否为 ReadWrite 类型。然后,如果它是 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