Skip to content

1: ERaftKV 白皮书目录

Colin edited this page Apr 5, 2023 · 8 revisions

介绍

本文描述了一个正在进行中的系统设计文档。旨在设计一个持久化分布式 KV 存储系统 ERaftKV,它使用 Raft 协议来保证数据一致性,同时支持节点组成多分片大规模数据存储集群,满足存储海量数据的需求。

产品设计目标

  • 数据强一致存储,保证数据安全可靠在分布式系统中持久化存储。
  • 支持 KV 数据类型的操作,包括对 key 进行 PUT,GET,DEL,SCAN 操作,用户在对集群数据进行操作要保证操作的持久性,读写的顺序一致性。
  • 动态的进行集群的配置,包括增加和删除节点,增加和删除集群的分片配置,包括集群分片负责哪些 key-range。 (key-range or slot 或者 key-range,slot 全部支持,可配置)
  • 支持 raft 打快照,进行日志的压缩合并,快照期间要求不阻塞数据读写。
  • 支持指定 leader 进行切换。
  • Raft 选举支持 PreVote,新加入节点追数据不参与选举,避免触发不必要的选举。
  • 支持按 slot 迁移数据,迁移过程中增量的请求不受影响,保证迁移 key 的事务。
  • Raft 日志冲突的时候,减少 rpc 快速匹配冲突开始的日志位置。
  • Raft 状态机里面的事件通知到上层。
  • Raft 读优化,加读队列保证 leader 节点提交后返回读请求,不写没必要的日志。(是否保证线性一致性,可以配置)
  • 对外就是一个大的存储集群,用户只需要增加新的机器,或者推出宕机故障机器。

总体设计文档列表

  • Raft 库日志存储结构
  • Raft 库选举流程
  • Raft 库日志复制流程
  • ERaftKV 分片节点动态变更
  • ERaftKV 日志快照
  • ERaftKV 集群多分片
  • ERaftKV 对外接口以及客户端

细节设计文档列表

  • ERaftKV RPC
  • ERaftKV Raft 库数据结构以及操作接口
  • ERaftKV 存储层核心数据结构以及操作接口
  • ERaftKV 网络层核心数据接口以及操作接口

工程质量设计文档

  • 单测规范设计
  • ci 流程
  • pr 规范文档
  • cr 规范文档
  • 代码风格规范文档