Теорема CAP: почему распределённые системы не могут иметь всё сразу
Представьте, что ваше приложение работает на нескольких серверах в разных городах.
Внезапно...
Сетевое соединение между серверами прерывается.
Теперь у системы есть выбор:
Продолжать принимать запросы?
Или отклонять запросы, пока всё не синхронизируется?
Именно эту проблему решает теорема CAP.
Что такое теорема CAP?
CAP означает:
C — Consistency (Согласованность)
Каждый пользователь видит одни и те же данные, независимо от того, к какому серверу подключился.
Пример: Перевод ₹1000. Каждый сервер сразу показывает обновлённый баланс.
A — Availability (Доступность)
Каждый запрос получает ответ.
Даже если один или несколько серверов недоступны.
Ответ может не содержать самых свежих данных.
P — Partition Tolerance (Устойчивость к разделению)
Система продолжает работать, даже если связь между серверами прервана.
В распределённых системах сетевые сбои неизбежны.
Главное правило. Когда происходит сетевое разделение (partition)...
Можно выбрать только одно из двух:
✔️ Согласованность (Consistency)
ИЛИ
✔️ Доступность (Availability)
Гарантировать оба одновременно нельзя.
Partition Tolerance в распределённых системах не опционален — вы обязаны считать, что это случится.
- CP-системы
Выбирают:
✔️ Согласованность
✔️ Устойчивость к разделению
Пример:
Сервер A ✖️ Сеть ✖️ Сервер B
Если серверы не могут общаться, часть запросов отклоняется, чтобы сохранить согласованность данных.
Применение:
- Банковские системы
- Платёжные системы
- Управление запасами
Правильность важнее, чем постоянный ответ.
- AP-системы
Выбирают:
✔️ Доступность
✔️ Устойчивость к разделению
Даже если серверы теряют связь, они продолжают отвечать.
Некоторые пользователи могут временно видеть устаревшие данные.
Применение:
- Социальные сети
- Ленты новостей
- Каталоги товаров
Доступность важнее немедленной согласованности.
= Реальные примеры =
Банкинг
Неверные балансы недопустимы. Выбирают CP.
Лайки в Instagram
Видеть 1024 лайка вместо 1026 пару секунд — не проблема. Выбирают AP.
Корзина покупок
Многие системы ищут баланс.
Корзина должна оставаться доступной, а важные операции (оплата) — строго согласованными.
Главный вывод. Теорема CAP не говорит: «Выбери любые два».
Она говорит:
Когда происходит сетевое разделение, вы обязаны выбрать между Согласованностью и Доступностью.
Каждая распределённая система делает этот компромисс.
👉 Java Portal
