Interactive

CAP定理可視化

分散システムは一貫性(C)・可用性(A)・分断耐性(P)を同時にすべては満たせません。 ネットワークの分断(P)は避けられない前提なので、実質的な選択は分断が起きた瞬間、CとAのどちらを犠牲にするかです。 3ノード(A/B/C)のうち1台を実際に孤立させ、CP(正しい値を返せないなら応答を止める)とAP(古いかもしれない値でも応答する)を切り替えてGET/PUTを試すと、挙動の違いが体感できます。

分断時のモード
ノード A"v0"v0ノード B"v0"v0ノード C"v0"v0
分断を発生させる:全ノードが同じ値

書き込み(PUT)

読み取り(GET)

ここが分かる

  • 分断が起きていない平常時は、CP設定でもAP設定でも挙動は同じ——CAPの選択が意味を持つのは分断が起きた瞬間だけ。CPモードのまま操作しても、分断が無ければ何も拒否されない。
  • CPは孤立ノードへの書き込み・読み取りを拒否することで、常に正しい値だけを返す代わりに可用性を犠牲にする。APは孤立ノードでもローカルに応答し続けることで可用性を保つ代わりに、多数派側と値がズレる(分岐する)ことを許容する。
  • APで値が食い違った状態から「分断を解消」すると、より新しい書き込みへ収束する——これが結果整合性(eventual consistency)。CPでは孤立側が最初から書き込みを拒否しているので、そもそも食い違いが起きず、収束させる作業も発生しない。
  • 「1台孤立・2台多数派」という分断の形は、クォーラムの考え方そのもの——多数派側は定足数を満たすので動き続けられるが、孤立した少数派は定足数に届かない。