• Store stands for an instance of tinykv-server
  • Peer stands for a Raft node which is running on a Store
  • Region is a collection of Peers, also called Raft group
  1. 【客户端 Client】客户端发出请求
  2. 【调度层 Cluster/PD】调度组件接收到客户端请求,通过保存的元数据 (后续我们要维护该元数据的时效性) 判断该请求 key 在哪个 region 里,以及 leader 在哪个 store。将 request 发往对应 store 的 router。至此 request 被确定在哪个 store/节点/进程处理。
  3. 【共识层 Node】 对应 store 的 Router 接收请求,将请求送入 leader peer 的 sender channel 中
  4. 【共识层 Peer】 sender channel 实际上是对应 leader peer 的 raftCh, peer 有一个 raftWorker 会不断监听 raftCh,取出其中的消息进行处理
  5. 【共识层 Raft】 raftWorker 会将消息取出,通过 RawNode → Raft → RaftLog 逐层处理。 raftWorker 的监听与处理流程如下所示:
  6. 【存储引擎 State machine】消息处理后,raftWorker 会检查是否有 ready,即是否达成了 Quorum。若有,说明共识层产生了新的更新,此时通过 HandleRaftReady 将更新 apply,即通过 peer_storage 写入存储引擎。
  7. 【返回 Response】当 raft log 被 apply 后,即代表 client 的请求被处理。无论成功与否,此时会通过 callback 给客户端返回请求。Cluster 会监听 callback 的 Response,并将其取出返回给 client。至此完成 client 的请求处理。

Concept

  • Region 是按 Key 范围划分的数据分片。
  • Store 是一个 TinyKV 进程,一般在不同机器上实现高可用。。
  • Peer 是某个 Region 在某个 Store 上的副本。
                 Store A       Store B       Store C
Region 1 [a,m)   Peer 1 ★      Peer 2        Peer 3
Region 2 [m,z)   Peer 4        Peer 5 ★      Peer 6

★ 表示该 Region 的 Leader
  • Raft Group 是由一个 Leader 和多个 Follower 组成的,维护同一份逻辑日志的副本。