Теорема CAP (также известная как теорема Брюэра) утверждает, что в распределённой вычислительной системе невозможно одновременно обеспечить:
- Согласованность (Consistency): Все узлы видят одни и те же данные в один и тот же момент времени. Любая операция чтения получает последние записанные данные.
- Доступность (Availability): Каждый запрос получает непустой ответ, независимо от состояния других узлов. Система всегда доступна для операций чтения и записи.
- Устойчивость к разделению (Partition Tolerance): Система продолжает работать, несмотря на потерю связи между узлами (сетевые разделения).
В условиях сетевого разделения (P), система вынуждена выбирать между согласованностью (C) и доступностью (A).
- CA система: Предполагает отсутствие сетевых разделений. При их возникновении система становится либо недоступной, либо несогласованной. Примеры: классические реляционные базы данных с синхронной репликацией в рамках локальной сети.
- CP система: Жертвует доступностью в пользу согласованности во время сетевого разделения. Если узел не может связаться с большинством, он перестает отвечать на запросы, чтобы гарантировать консистентность данных. Примеры: Zookeeper, etcd, распределенные системы, использующие протоколы консенсуса типа Paxos или Raft.
- AP система: Жертвует согласованностью в пользу доступности во время сетевого разделения. Система продолжает отвечать на запросы, но может предоставлять устаревшие или конфликтующие данные. Согласованность достигается позднее (eventual consistency). Примеры: DynamoDB, Cassandra, MongoDB (по умолчанию в некоторых конфигурациях).
Теорема CAP относится к распределённым системам хранения данных. В реальных системах часто приходится искать компромиссы и выбирать модель, наиболее подходящую для конкретных требований приложения.