顾名思义,safe read index就是安全的可读索引,etcd经过这个来保证每次读到的都是最新的数据,而不是脏数据。安全
简单说一下读数据的流程:服务器
一、leader收到读请求以后,会把当前的commit index记录下来,当作safe read index. 而后向其余服务器广播请求,以此来肯定本身是否仍是leader(若是收到集群中大多数机器的回应则仍是leader)日志
二、肯定leader以后,状态机会把safe read index以前的全部操做应用到状态机里索引
三、执行客户端的读请求,并返回结果it
若是客户端一开始连的是follower,流程也基本一致,follower会从leader那里获取一个safe read index,而后等状态机应用完以后再执行读操做,并返回结果集群
这里再留一个问题:请求
若是follower当前的日志跟leader相差较大,那么按照这个流程,读操做须要等待一段较长的时间才能获取结果,那其实是不是这个样子的呢?数据