CAP定理
CAP Theorem
ネットワークで複数台に分かれた分散システムでは、一貫性(C)・可用性(A)・分断耐性(P)の3つを同時には満たせず、最大2つしか選べない、という定理。
まず一番のつまずきを先回り
CAP定理は『3つのうち2つ』と説明されますが、実務上は最初からPは確定で選んでいます。なぜなら、複数台に分かれたシステムでは、ネットワークがいつか必ず切れる(=分断 partition が起きる)からです。ケーブルが抜ける、ルーターが落ちる、データセンター間が遅延する…これは『起きるかも』ではなく『いつか必ず起きる』前提です。
だから現実の選択は 「分断が起きたときに、CとAのどちらを諦めるか」 という二択に集約されます。ここが一番の勘所です。
図を描画中...
具体例: 2拠点に分かれた在庫管理
東京と大阪にDBがあり、在庫『残り1個』を共有しているとします。突然、東京-大阪間の回線が切れました(分断発生)。
- CPの判断: 「お互いの状況が確認できない以上、二重に売ったら困る。だから今は注文を受け付けない(=エラーを返す)」。安全だが、その間は売上ゼロ。
- APの判断: 「とにかく注文は受け続ける。両拠点で同時に売れたら後で在庫がマイナスになるかもしれないが、回線復旧後に調整する」。止まらないが、矛盾(二重販売)が起きうる。
各要素の意味を1行で
| 要素 | 意味 | これを諦めると |
|---|---|---|
| C (Consistency) | どこで読んでも最新が返る | 古いデータが返ることがある |
| A (Availability) | 必ず応答が返る | エラーや無応答になることがある |
| P (Partition Tolerance) | 回線が切れても動く | 分散システムとして成立しない |
CP / AP の使い分け
- CP(一貫性優先)が向く: 原子的な読み書き(同時に1つしか成立させたくない処理)が必要なビジネス。お金、在庫、予約席。分断中はタイムアウト(応答が返らない)が起こりうる。
- AP(可用性優先)が向く: 結果整合性(後で揃えばOK)を許せて、エラーで止まる方が困る場合。SNSのフィード、閲覧数、レコメンド。分断が解消されたら書き込みが伝播して揃う。
つまずきポイント
- 「CAは選べる(分断を無視できる)」と思いがちだが、分断が起きていない平常時はCもAも両立できる。CAPが効いてくるのは『分断が起きたその瞬間だけ』。普段からどちらか諦めているわけではない。
- 1台構成(分散していない)システムにCAPは関係ない。分散しているからこそ生じる悩み。
📊 図解
CP と AP の住み分け(一貫性×可用性)
図を描画中...