# 写作执行-续

![`smart`](ExecuteandWrite02_aa_003_20220512.png)

-----------------------------------------------------------
当一个参与修改Region的TiKV服务器收到写操作时，它就开始写入过程。这个过程主要由线程池模块`Scheduler`、Raftstore和Apply组成。过程如下：

1. `Scheduler` 模块负责协调事务并发写入和推送下发的修改操作。当出现键值写冲突（例如锁冲突、版本冲突等）时，`Scheduler` 会使用闩来协调，获取到闩的线程会将写请求发送给 Raftstore 模块，而未获取到闩的线程则会处于等待状态。

2. 当Raftstore模块收到写请求后，它会将写请求转换为Raft Log并写入RocksDB Raft，负责持久化这些Raft Logs。同时，Raftstore模块会将Raft Logs复制到其他TiKV上的RocksDB Raft（包括已写入Region的副本），准备写入其他Region副本。

3. 由于RocksDB Raft存储Raft日志，Apply模块将这些Raft日志应用于RocksDB KV，此时，写操作被持久化到RocksDB KV中。

总而言之，修改操作由`Scheduler`控制，写入Raftstore模块，转换为Raft Log并写入其他包含副本的TiKV服务器的RocksDB Raft实例，最后由Apply模块持久化到RocksDB KV实例。

