• 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 的请求处理。