CAP定理の「A」はインフラの「可用性」と全くの別物である
CAP定理の可用性(Availability)は、インフラの可用性とは全く異なる概念を指す。混同すると分散システムの設計で的外れな議論をすることになる。
CAP定理の「可用性(A)」は、インフラエンジニアが言う「可用性を上げる」とは、同じ言葉で全く異なる問題を議論している。この2つを混同すると、分散システムの設計で的外れな議論をすることになる。
何がどう違うのか、重要なポイントを整理した。
それぞれの概念が何を「前提」としているかを整理する。
インフラの可用性:物理的な生存
「サーバーが動いているか」「電源が入っているか」「ユーザーのパケットが届くか」という物理的な生存を指す。
インフラエンジニアが「可用性を上げる」と言うとき、それは二重化や冗長構成によって、物理的な無反応(タイムアウト)を防ぐことを意味する。
CAPの可用性:論理的な振る舞い
インフラの可用性が前提として満たされている世界の話である。
- すべての物理サーバーは正常稼働している
- ユーザーから各サーバーへのパケットは届く
- しかし、サーバー同士はパケットをやり取りできない(ネットワーク分断)
CAPが問うのはこの状態、つまり外からは繋がっているが、内側でノード間の通信が途絶えた状態における振る舞いである。リクエストを受けたノードが何らかのレスポンスを返せるか、を問う。
可用性という言葉の定義が違えば、「可用性がない」が意味する状態も変わる。
インフラの可用性がない:pingが通らない
サーバーが落ちている、ネットワークが切れている。pingが届かない、telnetが繋がらない。ユーザーはタイムアウトを受け取り、接続自体が成立しない。物理的な断絶の問題である。
CAPの可用性がない:500番台エラーが返る
サーバーは生きており、ユーザーからのパケットも届いている。しかし、一貫性を守るために応答を「拒否」する。実務上は500番台のエラーが返ってくる状態がこれにあたる。
物理的な断絶ではなく、論理的な仕様の選択である。
「可用性を上げる」という言葉の意味も、文脈によって全く異なる。
インフラの可用性を上げる
「サーバーが止まらないようにする」ことが目的であり、そのための手段が物理的な障害点の排除である。ハードウェアとインフラ構成で対処する問題である。
- 冗長化・マルチAZ構成
- ハードウェアの信頼性向上
- ロードバランサーの導入
CAPの可用性を上げる
CAP定理では、ネットワーク分断が発生した場合、一貫性(全ノードが同じデータを返すか)と可用性(必ずレスポンスを返すか)のどちらかしか保証できない。「CAPの可用性を上げる」とは、この二択において可用性を優先する設計判断である。つまり、古いデータを返してでもレスポンスを返すことを選ぶ。ビジネス上「古いデータを見せても許容できるか」という問いへの答えがそのまま設計になる。
- 結果整合性(Eventual Consistency)の採用
- 分断時でも古いデータを返す、という仕様の明示的な定義
インフラの問題はハードウェアで解決できる。CAPの問題はアルゴリズムとビジネス判断でしか解決できない。
- インフラの可用性 = 「サーバーが物理的に動いているか」(停止・タイムアウトの防止)
- CAPの可用性 = 「分断時に、一貫性を犠牲にしてでもレスポンスを返すか」(論理的なトレードオフ)
| 比較軸 | インフラの可用性 | CAPの可用性 |
|---|---|---|
| 前提 | なし(可用性そのものを確立する問題) | インフラの可用性が担保されていること |
| 「可用性なし」の状態 | 無反応、タイムアウト、接続不能 | エラー応答、書き込み拒否 |
| 不整合の性質 | 物理的な断絶 | 論理的な仕様(一貫性とのトレードオフ) |
| 解決策 | 冗長化、マルチAZ、ハードウェア更新 | アルゴリズムの選択、ビジネス許容度の定義 |