顧名思義,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相差較大,那麼按照這個流程,讀操做須要等待一段較長的時間才能獲取結果,那其實是不是這個樣子的呢?數據