CAP теорема (также известная как теорема Брюера) — это фундаментальный принцип в распределённых системах, который утверждает, что невозможно одновременно обеспечить все три следующих свойства:
-
Consistency (Согласованность)
Все узлы системы видят одни и те же данные в один и тот же момент времени.
Пример: После записи нового значения все последующие чтения возвращают это значение.
-
Availability (Доступность)
Каждый запрос к системе получает ответ (успешный или ошибка), но без гарантии, что данные актуальны.
Пример: Система продолжает работать даже при отказе части узлов.
-
Partition Tolerance (Устойчивость к разделению)
Система продолжает функционировать, даже если между её узлами происходит обрыв связи (network partition).
Формулировка теоремы
Вы можете выбрать только 2 из 3 свойств одновременно.
Варианты комбинаций:
-
CP (Согласованность + Устойчивость к разделению)
- Система ждёт, пока все узлы синхронизируются, даже если это займёт время (например, PostgreSQL в строгом режиме репликации).
- Риск: временная недоступность данных при сетевых проблемах.
-
AP (Доступность + Устойчивость к разделению)
- Система отвечает сразу, даже если данные не согласованы (например, Cassandra, DynamoDB).
- Риск: возможны "конфликты" данных (например, в корзине интернет-магазина могут появиться различающиеся товары).
-
CA (Согласованность + Доступность)
- Работает только в идеальной сети без разделений (на практике почти не встречается).
Примеры в реальных системах
- CP: MongoDB (в определённых конфигурациях), Zookeeper.
- AP: Cassandra, Riak.
- CA: Традиционные SQL-СУБД (MySQL, PostgreSQL) в пределах одного дата-центра.
Почему важно понимать CAP?
- Помогает выбрать правильную БД для проекта.
- Объясняет, почему распределённые системы иногда "теряют" данные или отвечают старыми версиями.
- Критично для систем, где важны либо мгновенная согласованность (банки), либо бесперебойная работа (соцсети).
Мифы о CAP
- "CAP означает, что надо всегда жертвовать одним свойством" — на практике системы часто переключаются между режимами (например, при восстановлении после разделения).
- "CA-системы существуют" — они возможны только в идеальных условиях (например, один сервер).
Резюмируем:
CAP теорема — это компромисс в проектировании распределённых систем. Выбор между согласованностью, доступностью и устойчивостью зависит от требований вашего проекта. Например, для банка критична согласованность (CP), а для ленты новостей — доступность (AP).