CAP 定理

分散システムで一貫性、可用性、分断耐性の 3 つを同時に満たすことはできないという定理

分散システムデータベース

CAP 定理とは

CAP 定理は、Eric Brewer が 2000 年に提唱した定理で、分散システムはネットワーク分断 (Partition) が発生した場合、一貫性 (Consistency) と可用性 (Availability) を同時に満たすことができないとする。

3 つの特性

特性 説明
Consistency (一貫性) 全ノードが同じデータを返す
Availability (可用性) 全リクエストに応答する
Partition Tolerance (分断耐性) ネットワーク分断に耐える

ネットワーク分断時の選択

ノード A ←×→ ノード B  (ネットワーク分断)

CP (一貫性 + 分断耐性):
  ノード A: 書き込みを拒否 (一貫性を優先)
  → 可用性を犠牲

AP (可用性 + 分断耐性):
  ノード A: 古いデータでも応答 (可用性を優先)
  → 一貫性を犠牲

AWS サービスの分類

サービス 分類 説明
DynamoDB (デフォルト) AP 結果整合性、高可用性
DynamoDB (ConsistentRead) CP 強い整合性
Aurora CP 同期レプリケーション
ElastiCache (Redis) AP 非同期レプリケーション
S3 AP 結果整合性 (2020 年以降は強い整合性)

DynamoDB の整合性モデル

// AP: 結果整合性 (デフォルト、高速)
const item = await db.get({
  TableName: 'users',
  Key: { id: '123' },
});

// CP: 強い整合性 (やや遅い)
const item = await db.get({
  TableName: 'users',
  Key: { id: '123' },
  ConsistentRead: true,
});

PACELC 定理 (CAP の拡張)

ネットワーク分断時 (P):
  A (可用性) or C (一貫性) を選択

正常時 (E = Else):
  L (レイテンシ) or C (一貫性) を選択

DynamoDB は PA/EL (分断時は可用性、正常時はレイテンシを優先)。

実務での判断

ケース 推奨
EC サイトの商品表示 AP (古いデータでも表示)
在庫の減算 CP (正確な在庫数が必要)
ユーザーのプロフィール AP (結果整合性で十分)
金融取引 CP (強い整合性が必須)

CAP 定理を扱う関連書籍も多い。

関連用語