Mímisbrunnr知恵の泉

← 分散システム 一覧

🎓 レベル:発展 | 重要度:A(必須)

📎 前提:障害モデル(クラッシュ・オミッション・ビザンチン) | 関連:PaxosRaft

要点(BLUF)

問題設定 ── 合意の3条件

合意性: 全プロセスが同じ値を決定妥当性: その値は提案された値\text{合意性: 全プロセスが同じ値を決定} \quad\wedge\quad \text{妥当性: その値は提案された値} 停止性(活性): すべての正しいプロセスはいつか決定する\text{停止性(活性): すべての正しいプロセスはいつか決定する}

合意性と妥当性は安全性(悪いことが起きない)、停止性は活性(良いことがいつか起きる)。リーダー選出(リーダー選出(Bully・Ring))もアトミックコミット(2相コミット・3相コミット)も、この形に帰着します。

FLP ── なぜ非同期だと不可能か

非同期=メッセージ遅延や処理速度に上限が無いモデル(障害モデル(クラッシュ・オミッション・ビザンチン))。ここでの核心的困難:

「遅い」と「死んだ」が原理的に区別できない

flowchart LR
    A["ノードからの応答が来ない"] --> Q{"どっち?"}
    Q -->|"待ち続ける"| L["活性を失う(永久待ち)"]
    Q -->|"死んだとみなし進む"| S["後で復活し別決定→安全性を失う"]

FLPの証明は「どんなアルゴリズムにも、決定が永遠に先延ばしされる実行(スケジュール)が必ず存在する」ことを、二価(bivalent)状態(まだ0にも1にも転びうる状態)が必ず残せることから示します。たった1つの遅いメッセージで、決定を無限に遅らせられる——だから「常に停止」は保証できません。

正しさの観点 ── 安全性は犠牲にしない

FLPが言うのは「停止性(活性)が保証できない」であって、「合意性(安全性)が破れる」ではありません。だから実用システムは:

この分離が分散合意の設計哲学です。Paxos(Paxos)もRaft(Raft)も、ネットワークが荒れている間は決まらないかもしれないが、間違った決定は絶対にしない

回避策の比較

回避やり方代表
部分同期普段は同期的と仮定し、タイムアウトで故障検出。荒れたら一時的に進まないPaxos・Raft・2相コミット・3相コミット
ランダム化コイン投げで対称性を破り、確率1で停止Ben-Or・一部のBFT
故障検出器「最終的に正確」な故障検出器Ωを仮定Chandra-Toueg

なぜ分散だと難しいか(直観)

単一マシンの「合意」は自明(変数に代入するだけ)。分散では、全員が同時に同じ事実を知ることができない(共通知識の不可能性)。誰かが落ちたかも分からないまま「全員一致」を作るのが本質的に難しい。FLPはその難しさの数学的な底を示した結果です。

⚠️ よくある誤解・落とし穴

対応ラボ

なし(不可能性の定理)。FLPを回避した実際の合意の挙動は Raftリーダー選出(Bully・Ring) のラボで観察します。

関連

第5章 合意 目次