Interactive

Paxos合意アルゴリズム可視化

Paxosは、複数のノードが同時に異なる値を提案しても、最終的にただ1つの値に収束することを保証する分散合意アルゴリズムです。 Proposer 2台・Acceptor 3台のシーケンス図で、Prepare→Promise→Accept→Acceptedの2往復をステップ再生できます。 正常系に加え、2つのProposerが競合するケースと、既に決まった値を後から引き継ぐケースを切り替えて、 なぜPaxosが「安全」なのかを体感できます。

競合なし。Prepare→Promise→Accept→Acceptedの2往復で"Blue"が決定

Proposer 1提案したい値: BlueProposer 2提案したい値: RedAcceptor 1Acceptor 2Acceptor 31. Prepare(1)2. Prepare(1)3. Prepare(1)4. Promise(1)5. Promise(1)6. Promise(1)7. 判定:3/3(過半数)からPromiseを獲得8. Accept(1, "Blue")9. Accept(1, "Blue")10. Accept(1, "Blue")11. Accepted(1, "Blue")12. Accepted(1, "Blue")13. Accepted(1, "Blue")14. 完了:値 "Blue" が正式に決定
PreparePromiseAcceptAccepted拒否判定・結果
1 / 14
フェーズ1a: PrepareProposer 1Acceptor 1

1. Prepare(1)

n = 1

提案番号1で「これから提案するので、これより小さい番号の提案は今後拒否してほしい」と依頼する(フェーズ1a)。

ここが分かる

  • Acceptorは「これより小さい提案番号は今後拒否する」という片道の約束をするだけ。値そのものを検証したり合意したりはしない——これがPaxosの手続きを単純に保っている。
  • Proposerが過半数からPromiseを得た際、もしAcceptorの誰かが既にaccept済みの値を報告してきたら、自分の希望を捨ててその値を使わなければならない。これにより、一度過半数に受理された値は、後からより大きい番号で提案し直されても変わらない。
  • 過半数(quorum)の考え方が核心:2つの過半数は必ず1台以上のAcceptorで重なるため、異なる値が同時に過半数を得ることは起こり得ない。だから複数のProposerが競合しても、決定される値は1つに収まる。