Interactive
CAP定理可視化
分散システムは一貫性(C)・可用性(A)・分断耐性(P)を同時にすべては満たせません。 ネットワークの分断(P)は避けられない前提なので、実質的な選択は分断が起きた瞬間、CとAのどちらを犠牲にするかです。 3ノード(A/B/C)のうち1台を実際に孤立させ、CP(正しい値を返せないなら応答を止める)とAP(古いかもしれない値でも応答する)を切り替えてGET/PUTを試すと、挙動の違いが体感できます。
分断時のモード
分断を発生させる:全ノードが同じ値
書き込み(PUT)
読み取り(GET)
ここが分かる
- 分断が起きていない平常時は、CP設定でもAP設定でも挙動は同じ——CAPの選択が意味を持つのは分断が起きた瞬間だけ。CPモードのまま操作しても、分断が無ければ何も拒否されない。
- CPは孤立ノードへの書き込み・読み取りを拒否することで、常に正しい値だけを返す代わりに可用性を犠牲にする。APは孤立ノードでもローカルに応答し続けることで可用性を保つ代わりに、多数派側と値がズレる(分岐する)ことを許容する。
- APで値が食い違った状態から「分断を解消」すると、より新しい書き込みへ収束する——これが結果整合性(eventual consistency)。CPでは孤立側が最初から書き込みを拒否しているので、そもそも食い違いが起きず、収束させる作業も発生しない。
- 「1台孤立・2台多数派」という分断の形は、クォーラムの考え方そのもの——多数派側は定足数を満たすので動き続けられるが、孤立した少数派は定足数に届かない。