Paxos

ノードとの切断時でも安全な合意に達するために、コンセンサス構築フェーズを 2 つ使用します

問題

複数のノードが状態を共有する場合、それらは特定の値について相互に同意する必要があります。リーダーとフォロワーを使用すると、リーダーが決定してフォロワーにその値を渡します。しかしリーダーが存在しない場合、ノードは値を自分自身で決定する必要があります。(リーダーとフォロワーがある場合でも、リーダーを選択する必要がある場合があります。)

リーダーは 2 フェーズ コミット を使用することで、レプリカがアップデートを安全に取得することを確実にすることができます。しかし、リーダーがいない場合、競合するノードが 多数決 を獲得しようとする可能性があります。このプロセスは、どのノードも障害が発生したり切断されたりする可能性があるためにさらに複雑になります。ノードは値で過半数を獲得できますが、その値をクラスタ全体に伝達する前に切断される場合があります。

解決策

Paxos アルゴリズムはレズリー・ランポートによって開発され、彼の 1998 年の論文 "パートタイム議会" に発表されました。Paxos は 3 つのフェーズで動作し、部分的なネットワークまたはノード障害があっても、複数のノードが同じ値に合意するようにします。最初の 2 つのフェーズは値についてのコンセンサスを構築するために機能し、最後のフェーズが残りのレプリカにそのコンセンサスを伝達します。

  • 準備フェーズ: 最新の 世代クロック を確立し、すでに受け入れられている値を収集します。
  • 受け入れフェーズ: この世代の値を提案し、レプリカで受け入れます。
  • コミットフェーズ: すべてのレプリカに値が選択されたことを知らせます。

詳細については、oreilly.com のオンライン電子書籍の 第 11 章 を参照してください。

このパターンは、分散システムのパターン の一部です。

2023 年 11 月 23 日