Paxos
使用兩個共識建置階段,即使節點斷線也能達成安全共識
問題
當多個節點共用狀態時,它們通常需要就特定值達成共識。領導者和追隨者中,領導者會決定並將其值傳遞給追隨者。但如果沒有領導者,則節點需要自行決定值。(即使有領導者-追隨者,它們也可能需要這樣做才能選出領導者。)
領導者可以使用兩階段提交來確保複本安全地取得更新,但如果沒有領導者,我們可以讓競爭節點嘗試收集多數法定人數。這個程序會因為任何節點都可能發生故障或斷線而變得更加複雜。節點可能在某個值上達到多數法定人數,但在它能夠將此值傳達給整個叢集之前斷線。
解決方案
Paxos 演算法是由 Leslie Lamport 開發的,發表於他 1998 年的論文"兼職議會"中。Paxos 分三個階段進行,以確保多個節點在部分網路或節點發生故障的情況下,對相同的值達成共識。前兩個階段的作用是圍繞一個值建立共識,最後一個階段再將該共識傳達給其餘的複本。
- 準備階段:建立最新的世代時鐘,並收集任何已接受的值。
- 接受階段:為這個世代提出一個值,供複本接受。
- 提交階段:讓所有複本知道已選出一個值。
欲知更多詳細資訊,請參閱 oreilly.com 上線上電子書的第 11 章
此模式是分布式系統模式的一部分
2023 年 11 月 23 日