# 路由功能

![center](./student-guide/diagram/04-route-01-01.png)
-------------------------------------------------------------
因为 PD 保存了所有 TiKV 的集群信息，自然对 TiDB Server 提供了路由的功能。假设 TiDB Server 要对 key 写入一个值。

- TiKV Client 先从 PD 获取 key 属于哪一个 region，PD 将这个 Region 相关的元信息返回。

- TiKV Client 有一个 Region Cache 可以缓存元信息，这样就不需要每次都从 PD 获取。然后直接给 region 的 leader peer 发送命令。

- 有可能 region 的 leader 已经漂移到其他 peer，TiKV 会返回 NotLeader 错误，并带上新的 leader 的地址，TiKV Client 在 Region Cache 里面更新，并重新向新的 leader 发送请求。

- 也有可能 region 的 version 已经变化，譬如 split 了，这时候，key 可能已经落入了新的 region 上面，TiKV Client 会收到 StaleCommand 的错误，于是重新从 PD 获取，进入状态 1。