# 数据的读取 Follower Read

![center](./student-guide/diagram/03-Follower-Read-01-01.png)
-------------------------------------------------------------

之前介绍的读写操作都是在 leader 节点上进行的，于是就自然而然引出了这样的想法，follower 节点是不是能够分担 leader 的读压力呢？

答案是可以的，这个功能就是 Follower Read，它的实现方法主要为：
  - 当 TiDB Server 向某个 follower 节点发出读请求时，follower 为获知当前最新 commit 的 raft log 的序号（ commit index ）需要询问 leader 节点。
  - Leader 节点将当前自己的 commit index 告知 follower 节点，如果 follower 发现目前自己还没有 apply 这个序号的 raft log，便开始等待。
  - 直到 follower 确认本地已经 apply 到了 leader 刚才发送过来的 commit index 后，follower 和 leader 已经同步，此时读取数据给 TiDB Server。

这里有个问题需要我们注意：

在上面提到的步骤 2， 有可能 leader 发送给 follower 的 commit index 的 raft log，在 follower 上已经被 append 并且 apply 了（因为 leader 可能还没有来得及 apply，而 follower 已经 apply 了），这个时候有可能出现 follower 先读到，leader 过一会儿才读到的现象。