【きゃっぷていり】

CAP定理 とは?

💡 分散システムの「3つのうち2つしか選べない」法則
📌 このページのポイント
CAP定理 ― 3つのうち2つしか同時に満たせない C 一貫性 A 可用性 P 分断耐性 CA RDBMS CP MongoDB AP Cassandra 2つを選択 (3つ同時は不可)
CAP定理
ひよこ ひよこ

なぜ3つ同時に満たせないの?

ペンギン先生 ペンギン先生

ネットワーク分断(Partition)が起きた場合を考えよう。サーバーAとBの間の通信が切れた時、Aに書き込まれたデータはBに伝わらない。このときBへの読み取りに対して①古いデータを返す(一貫性を犠牲→AP型)か②エラーを返す(可用性を犠牲→CP型)の二択になるんだよ

ひよこ ひよこ

実際にはどう選ぶの?

ペンギン先生 ペンギン先生

ビジネス要件次第だよ。銀行の口座残高は一貫性が最重要(二重引き出しは許されない)→CP型。SNSのいいね数は多少古くても表示を優先→AP型。ECサイトの在庫数は「最終的に正しければOK」→結果整合性(AP型+補正処理)。重要なのは「データごとに」要件が違うことを理解して使い分けることだね

ひよこ ひよこ

結果整合性(Eventual Consistency)って?

ペンギン先生 ペンギン先生

「今すぐは一貫していないけど、しばらく待てばそのうち一貫する」という保証。DynamoDBCassandraがこのモデル。書き込み後にレプリカへの伝搬に数ミリ秒〜数秒かかる間、古いデータが読めることがある。多くのWebアプリケーションではこの程度の遅延は問題にならないよ

ひよこ ひよこ

CAP定理は批判もある?

ペンギン先生 ペンギン先生

あるよ。「3つから2つ選ぶ」という説明は単純化しすぎで、実際にはCとAの間にグラデーションがある。Martin Kleppmannは「分断が起きている間の動作」と「通常時の動作」を分けて考えるべきと指摘している。PACELC定理(CAPの拡張)では「分断なし時のLatencyとConsistencyのトレードオフ」も加味しているよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「CAP定理」って出てきたら「分散DBはC・A・Pの3つを同時に全部は満たせない」と思えればだいたいOK!
📖 おまけ:英語の意味
「CAP Theorem (Brewer's Theorem)」 = CAP定理(ブリューワーの定理)
💬 2000年にEric Brewerが予想し、2002年に証明された。分散システム設計の基本定理だよ
← 用語集にもどる