1 个稳定版本
1.0.0 | 2021年10月28日 |
---|
在 数据库接口 中排名第 2632
每月 21 次下载
用于 gandalf-consensus
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
Gandol-consensus 是 Raft 算法的实现,因此它负责将一致性带到我们的系统中。它还负责与数据库交互,并在条目提交后对其执行命令。要将甘道夫连接到您的数据库,您需要为您自己的数据库实现 Parser
和 Tracker
特性,然后连接甘道夫到您的数据库,并将您的客户端指向甘道夫。您可以使用仓库中现有的 gandalf.conf 文件来启动一个集群。
解析器
解析器特性负责将客户端请求使用数据库协议转换为甘道夫可理解的形式,以便它可以决定请求是来自 Read
还是 Write
类型。然后它将请求附加到日志中,并在它是 Write
请求时将其复制到其他节点,或者在它是 Read
请求时直接执行。
跟踪器
跟踪器特性负责管理 Raft 日志并与数据库通信。
甘道夫-KVS
甘道夫-KVS 是一个类似 Redis 的键值存储,高度灵感来自 tokio mini-redis,并用作目前甘道夫共识模块的唯一支持数据库。它使用 RESP
通过 TCP 与客户端和一致性模块进行通信。此模块由两个二进制文件组成,gandalf-kvs-server
用于启动服务器,以及 gandalf-kvs
,用于与服务器交互。
当前支持的命令有
命令 | 功能 |
---|---|
设置 | 为键设置一个值 |
获取 | 检索键的值 |
加载 | 一次性执行多个设置或加载快照 |
快照 | 拍摄快照 |
kvs的整体架构如图所示
安装
要安装gandalf-kvs,请使用
cargo install gandalf-kvs
要安装gandalf,请使用
cargo install gandalf
依赖项
~7–15MB
~151K SLoC