Mímisbrunnr知恵の泉

← 分散システム 一覧

🎓 レベル:標準 | 重要度:A(必須)

📎 前提:線形化可能性と逐次一貫性 | 関連:PACELC・結果整合性分散システムとは・なぜ難しいか

要点(BLUF)

問題設定 ── 分断したら何を守るか

2つのノードがネットワーク分断で互いに通信できなくなったとします。ユーザがそれぞれに書き込み/読み込みを要求したとき、システムは究極の二択を迫られます。

flowchart TB
    P["ネットワーク分断が発生(Pは不可避)"] --> Q{"分断中の要求にどう答えるか"}
    Q -->|"古い/不整合を返さない=応答を断る"| CP["CP:一貫性を守り可用性を捨てる"]
    Q -->|"とにかく応答する=古い値もありうる"| AP["AP:可用性を守り一貫性を捨てる"]

モデル ── 3つの性質

定理の主張:分断中は C と A を同時に保てない。分断したノードに書かせれば(A)コピー間がずれる(Cを破る)。ずれを防ぐため応答を断れば(C)可用性が落ちる(Aを破る)。

正しさの観点 ── なぜ両立しないか(簡単な証明スケッチ)

ノード G1・G2 が分断されているとする。クライアントが G1 に x=1 を書く。次に G2 から read(x) する。

両立は原理的に不可能——これがCAPの核心です。

設計への翻訳 ── CP と AP

分断時の挙動
CP不整合を返すくらいなら応答を断る(少数派は読み書き不可)合意ベース(Raft)・ZooKeeper・etcd・分散ロック
APとにかく応答する(古い値・並行衝突を許し後で収束)Dynamo系・Cassandra・クォーラム(R+W>N) 緩め・DNS

選択基準:正しさが命(残高・在庫・ロック)なら CP、止まらないことが命(カート・SNS・計測)なら AP。

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

分断は「遅延が無限大になった状態」とも言える。分散システムとは・なぜ難しいか の「遅いと死んだが区別できない」がここで効く。CAPは「通信できない相手と整合を保つことはできない」という、ほぼ自明だが見落としがちな事実を、設計判断に落とし込む道具です。

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

対応ラボ

なし(概念回)。AP側の重なり調整(R+W>N で一貫性を上げる)は クォーラム(R+W>N) のラボで実証します。

関連

第4章 一貫性モデル 目次