CAP定理の「A」はインフラの「可用性」と全くの別物である
分散システムのCAP定理を学習していた時、「可用性」という言葉の意味が混乱しました。調べてみたら、インフラの「可用性」とCAP定理の「可用性」は同じ単語なのに全く違う概念でした。
分散システムのCAP定理について学習していた時、「可用性(Availability)」という言葉で混乱しました。ACIDとCAPの「整合性」に続いて、今度は「可用性」です。
私はインフラの話に触れる機会が多かったので、「可用性」と聞くと「サーバーを二重化して、片方が落ちても動くようにする」という意味だと思い込んでいました。でも、CAP定理の文脈では「ネットワーク分断時に、エラーを返すか古いデータを返すか」という全く違う意味で使われていました。
同じ「可用性(Availability)」という言葉なのに、全く別の概念を指していたことに気付きました。
気付いたこと
CAP定理を学習していて、「あれ、可用性って2つの意味があるんじゃないか?」と気付きました。調べてみたら、やっぱり違いました。
インフラの可用性(私が最初に考えていた方)
これは「サーバーが物理的に動いているか」という話でした。
例えば:
User → LB → Server A (稼働中) Server B (停止中) ← ここが落ちても、Aで処理できるユーザーから見て「接続できない」「タイムアウトになる」という状態を防ぐのが目的。物理的な冗長構成の話です。
CAPの可用性(CAP定理で言われている方)
これは「ネットワーク分断時にどう振る舞うか」という話でした。
例えば:
User → Server A (稼働中) Server B (稼働中) ← どちらも動いているが、A-B間の通信が切れたサーバーは両方とも動いています。ユーザーからは両方に接続できます。でも、サーバー同士の通信が切れている。
この状態で:
- 一貫性を優先する: エラーを返す(「今はデータの整合性が保証できないので処理を拒否します」)
- 可用性を優先する: 古いデータでもレスポンスを返す(「多少古いかもしれませんが、とりあえず返します」)
CAPの可用性って、この選択の話でした。
重要な違い
一番の気づきは、この2つでした:
| 比較軸 | インフラの可用性 | CAPの可用性 |
|---|---|---|
| 前提 | なし(物理的な生存の確立) | インフラは動いている前提 |
| 「なし」の状態 | タイムアウト、接続不能 | エラー応答(500番台) |
CAPの可用性は「インフラは動いている」前提という点が、一番の発見でした。両方とも「可用性」という言葉を使うのに、前提条件が全く違います。
まとめ
CAP定理を学習していた時、「可用性」という言葉の意味で混乱しました。調べてみたら、インフラの可用性とCAPの可用性は同じ単語なのに全く別のレイヤーの問題でした。
特に、CAPの可用性は「インフラは動いている」前提で、可用性がない時の挙動も違います(タイムアウト vs 500番台エラー)。この2つの違いを意識すると、分散システムの学習がスムーズになります。