- 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 的请求处理。
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 组成的,维护同一份逻辑日志的副本。
Links