【きゃっぷていり】
CAP定理 とは?
最終更新:
💡 通信が分断されたとき、整合した値と全要求への応答は両立できない
ネットワーク分断が起こり得る分散データシステムで、強い一貫性と、正常なノードへのすべての要求に応答する可用性を同時には保証できないという定理。分断時の動作を考える手掛かりになる。
📌 このページのポイント
CAPは「3つから2つ選ぶ」でいい?
それだけだと誤解しやすいよ。通信が分断され得る条件で、強い一貫性Cと、すべての要求に応答する可用性Aを同時に保証できない、という話なんだ。いつでも好きな二つを選べる商品メニューではないよ。
分断すると何が困るの?
古い0を返せば応答はできるね。
うん。でも完了した更新より前の値を返すので、この例では強い一貫性を守れない。逆に値を確かめるまで待つと、分断が続く限り応答できない。エラーだけを返しても、要求された読み取りを完了したことにはならないよ。
Cはデータのルールを守ること?
使うDBをCP型かAP型で決めればいい?
分類だけでは足りないよ。同じシステムでも、操作や設定、対象データによって判断が変わる。たとえば在庫の過剰販売を許すか、予約を一時停止するかは業務要件次第。製品名だけで自動的には決まらないんだ。
分断がないときも、どちらかを諦めるの?
CAPだけを理由に、通常時も片方を捨てる必要はないよ。ただし、応答の遅さや障害からの復旧も設計に関わる。どの操作を止め、どの値を返し、通信が戻ったらどう整えるかまで考えよう。
まとめ:ざっくりこれだけ覚えればOK!
「CAP定理」って出てきたら「分断時に強い一貫性と全要求への応答を両方は保証できない」と思えばだいたいOK!
📖 おまけ:英語の意味
「CAP Theorem (Brewer's Theorem)」 = 一貫性・可用性・分断耐性の頭文字
💬 Consistency、Availability、Partition toleranceの頭文字だよ。Eric Brewerが2000年の講演で提示した予想を、Seth GilbertとNancy Lynchが形式化・証明したことでも知られているよ。