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