SDN
← 概念一覧へ
一貫性と可用性

CAP定理

CAP Theorem

ネットワークで複数台に分かれた分散システムでは、一貫性(C)・可用性(A)・分断耐性(P)の3つを同時には満たせず、最大2つしか選べない、という定理。

キーポイント
  • Consistency(一貫性): どのノードに読みに行っても、必ず最新の書き込み(またはエラー)が返る。
  • Availability(可用性): すべてのリクエストに必ず応答が返る(ただし最新とは限らない)。
  • Partition Tolerance(分断耐性): ノード間のネットワークが切れても、システムは動き続ける。
  • 現実のネットワークは必ず切れる(=Pは捨てられない)ので、実質はCとAのどちらを取るかの選択になる。
  • CP: 一貫性を優先(銀行残高など)。分断中は応答を止めてでも矛盾を防ぐ。
  • AP: 可用性を優先(SNSのいいね数など)。分断中も古い値を返してでも応答を続ける。
トレードオフ

ネットワーク分断(通信が切れた状態)が起きた瞬間、システムは『矛盾したデータを返してでも応答するか(AP)』『応答を止めてでも矛盾を防ぐか(CP)』の二択を迫られる。CPは正確だが分断中は使えなくなる時間が生じうる。APは止まらないが、一時的に古い・食い違うデータをユーザーに見せてしまう。どちらが正解かは業務次第(お金=CP、SNSのカウンタ=APなど)。

まず一番のつまずきを先回り

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 の住み分け(一貫性×可用性)

図を描画中...

関連する概念

この概念で腕試し

関連する 9 問のクイズに挑戦できます。

クイズを解く