1 个不稳定版本

使用旧的 Rust 2015

0.0.0 2018 年 6 月 7 日

#20#etcd

MIT/Apache

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

功能

期望

  • 使用 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 待办事项

  • 写入日志
  • 读取所有日志

无运行时依赖