Paxos 曾是公認的共識演算法,但它難以理解、也難以實作,因此建構於其上的生產系統容易出現微妙的錯誤,而這些錯誤只有在領導者失效時才會浮現。

Raft 在撰寫時採取了不同的優先順序:它在容錯能力與效能上與 Paxos 相當,差別在於它的設計目標是易於理解。其作者將共識拆解為領導者選舉、依序複製的日誌,以及一條安全規則。

正是這樣的分離,讓更廣泛的讀者能夠正確地實作它。易理解性被視為首要要求,結果便是一套團隊真正能夠推理並交付上線的共識演算法。

為必須驗證演算法的人類而設計演算法

易於理解的階段能對應到程式設計師可驗證的內容。

共識演算法中的小聰明往往會滋生實作錯誤。

更廣泛的正確實作採用,勝過邊際的效能優勢。

當正確性取決於許多其他人是否做對時,就讓困難的事變得易於驗證;僅止於聰明的設計,因錯誤而付出的代價會超過它在優雅上所獲得的。

Raft 被 etcd、Consul、CockroachDB 以及許多其他分散式系統採用,並成為工程師學習與建構共識的預設方式。

追溯依據

參考來源

  1. In Search of an Understandable Consensus Algorithm (Raft) Stanford University · raft.github.io
  2. etcd documentation etcd · etcd.io