1 个不稳定版本
使用旧的 Rust 2015
0.0.0 | 2018 年 6 月 7 日 |
---|
#20 在 #etcd
2KB
Mum - 基于 Raft 的分布式 kv 存储
用法
服务器
# server side
RUST_LOG=server,mum cargo run --bin server -- --id 1 --snap_dir example_dir/1/snap/ --wal_dir example_dir/1/ --addrs 127.0.0.1:9005 --addrs 127.0.0.1:9006 --addrs 127.0.0.1:9007
RUST_LOG=server,mum cargo run --bin server -- --id 2 --snap_dir example_dir/2/snap/ --wal_dir example_dir/2/ --addrs 127.0.0.1:9005 --addrs 127.0.0.1:9006 --addrs 127.0.0.1:9007
RUST_LOG=server,mum cargo run --bin server -- --id 3 --snap_dir example_dir/3/snap/ --wal_dir example_dir/3/ --addrs 127.0.0.1:9005 --addrs 127.0.0.1:9006 --addrs 127.0.0.1:9007
客户端
# kv --op (get/set/del/scan)
# conf --op (add/remove)
RUST_LOG=ctl,mum ./target/debug/ctl kv --op get --y hello1 --value world1 --kv_addr 127.0.0.1:9005
功能
- 使用 简单的 Write-Ahead Log 存储 Raft 日志以实现灾难恢复。
- 使用 简单的 MVCC K/V 存储 (基于 MVCC 的 K/V 存储) 来存储键/值。
- Raft 一致性算法。
- Tokio 网络框架用于 rust-lang。
- 用户界面基于 Redis 协议。(可能)
期望
- 使用 raft-rs, grpc-rs, tokio 构建简单的 HA key-value 服务
- 提供基本的获取、设置、删除和扫描操作
- 在一个节点中保存的数据必须在磁盘上持久化(重启不会丢失数据)。
- 需要展示 - 杀死少数节点,服务仍然可以工作。
- 需要展示 - 杀死多数节点,服务不能工作。
- 需要支持动态添加/删除节点。
- 使用基准测试工具查找一些性能问题。
简单的 MVCC K/V 存储
K/V 存储功能
- 单文件持久化存储
- 写时复制,读无锁(MVCC)
- 自动垃圾收集
- 快照(可能)
K/V 存储待办事项
- Get(Key) -> Option
- Set(Key, Value)
- Delete(Key) -> Option
- Scan() -> Iter
- 支持 MVCC
- 支持快照
简单的 Write-Ahead Log
WAL 功能
- 多段
- 灾难恢复的回复日志
WAL 待办事项
- 写入日志
- 读取所有日志