- Replicated state machine(複寫狀態機)
- 一組伺服器各自從一份 replicated log 執行相同的確定性指令序列,因而算出完全相同的狀態複本,即使部分成員故障整體仍可運作。Raft 的全部工作就是讓這些 log 保持一模一樣。
- Term(任期)
- 以連續整數編號、長度任意的一段時期,以一次選舉開場,其中至多只有一位 leader;有些 term 因為分票而自始至終沒有 leader。term 扮演 Raft 的邏輯時鐘,讓伺服器偵測出過期 leader 與過時資訊。
- Committed entry(已提交的 entry)
- 由產生它的那位 leader 複寫到多數派伺服器上的 log entry,因而具備持久性,並保證最終會被所有可用的狀態機執行。提交一筆 entry 也等於提交了 leader log 中它前面的所有 entry。
- Log Matching Property
- 若兩份 log 含有 index 與 term 都相同的 entry,則該位置存的是同一個指令,而且兩份 log 在其之前的每一筆 entry 都相同。它由 AppendEntries 的一致性檢查維持——該檢查帶上新 entry 前一格的 index 與 term。
- Leader Completeness Property
- 若某筆 log entry 在某個 term 被提交,它必定存在於所有更大編號 term 的 leader 的 log 中。這是 entry 得以只從 leader 流向 follower 的前提,而它由選舉限制保證,而非靠任何補齊協定。
- State Machine Safety Property
- 若某台伺服器已把某個 index 的 log entry 套用到狀態機,就不會有另一台伺服器在同一個 index 套用不同的 entry。這是 Raft 最上層的正確性目標,由 Leader Completeness 加上「依 index 順序套用」推導而來。
- Up-to-date(誰的 log 比較新)
- 投票者在 RequestVote 中採用的比較規則:兩份 log 中最後一筆 entry 的 term 較大者較新;若最後的 term 相同,則較長的 log 較新。只要候選人的 log 沒有自己新,投票者就拒絕投票。
- Joint consensus(Cold,new)
- 過渡組態:entry 要複寫到新舊兩個組態的所有伺服器,兩個組態的伺服器都可以擔任 leader,而每一次選舉與每一次提交都必須同時取得兩個組態各自的多數派。它以普通 log entry 的形式寫入,且伺服器一追加就立即生效。
- Last included index / term
- snapshot 的 metadata,指出這份 snapshot 取代掉的最後一筆 log entry 及其 term。它們把 snapshot 定位在 log 中的正確位置,讓 snapshot 之後第一筆 entry 仍有前一格可供 AppendEntries 的一致性檢查比對。