Что такое CAP-теорема
CAP-теорема (теорема Брюера) утверждает, что в распределённой системе невозможно одновременно обеспечить все три свойства: согласованность (Consistency), доступность (Availability) и устойчивость к разделению (Partition Tolerance).
- C (Consistency) — согласованность: все узлы видят одинаковые данные в одно время. Любое чтение возвращает результат последней успешной записи.
- A (Availability) — доступность: каждый запрос получает ответ (успех или ошибка), даже если часть узлов недоступна.
- P (Partition Tolerance) — устойчивость к разделению: система продолжает работать при потере связи между узлами сети.
Визуализация
Пример
Consistency (C)
╱╲
╱ ╲
╱ ╲
CP ╱ CAP ╲ CA
╱ (невоз-╲
╱ можно) ╲
╱────────────╲
Partition ╱ AP ╲ Availability (A)
Tolerance (P)
Реальный выбор: CP vs AP
Поскольку в реальных распределённых системах сетевые разделения (P) неизбежны, фактический выбор — между CP и AP:
| Тип системы | Жертвует | Приоритет | Примеры БД | Подходит для |
|---|---|---|---|---|
| CP | Доступностью | Согласованность | HBase, ZooKeeper, MongoDB (majority) | Финансовые операции, где важна точность |
| AP | Немедленной согласованностью | Доступность | Cassandra, DynamoDB, CouchDB | Аналитика, каталоги, eventual consistency допустима |
| CA | Устойчивости к разделению | И то, и другое | PostgreSQL, MySQL (без репликации) | Одиночный узел, нет распределённости |
Практическое применение
- Для основных финансовых операций (переводы, платежи) выбирают CP — лучше вернуть ошибку, чем провести некорректную транзакцию.
- Для сервисов аналитики и отображения истории можно использовать AP — допустима задержка в несколько секунд.
Важно понимать, что CAP-теорема описывает предел, а не бинарный выбор. Многие современные системы позволяют настраивать уровень согласованности на уровне отдельных операций (например, Cassandra поддерживает уровни консистентности от ONE до ALL).
На собеседовании: Интервьюер хочет услышать, что P неизбежна в распределённых системах и реальный выбор — между CP и AP. Частая ошибка — говорить, что можно выбрать CA в распределённой системе, или не понимать, что CAP — это спектр, а не жёсткий выбор.