Ответ
Теорема CAP (Consistency, Availability, Partition Tolerance) — это фундаментальный принцип для распределенных систем, который гласит, что любая распределенная система может одновременно гарантировать только два из трех следующих свойств:
-
Consistency (Согласованность): Любое чтение возвращает самые актуальные данные (результат последней записи) или ошибку. Все узлы системы видят одни и те же данные в один и тот же момент времени.
-
Availability (Доступность): Любой запрос к системе получает корректный отклик (не ошибку), но без гарантии, что он содержит самые актуальные данные. Система всегда работоспособна.
-
Partition Tolerance (Устойчивость к разделению сети): Система продолжает функционировать, даже если связь между ее узлами (нодами) нарушена (произошел «разрыв сети»).
Практическое применение:
В реальных распределенных системах устойчивость к разделению сети (P) является обязательным требованием, так как сбои в сети неизбежны. Поэтому на практике выбор всегда стоит между согласованностью и доступностью:
-
CP (Consistency + Partition Tolerance): Система выбирает согласованность в ущерб доступности. При разрыве сети часть системы может стать недоступной для записи или даже для чтения, чтобы избежать риска отдать устаревшие данные.
- Примеры: MongoDB, Redis, etcd, CockroachDB.
-
AP (Availability + Partition Tolerance): Система выбирает доступность в ущерб согласованности. При разрыве сети все узлы остаются доступными, но некоторые из них могут возвращать устаревшие данные. Согласованность достигается позже (модель "eventual consistency").
- Примеры: Cassandra, CouchDB, Riak, Amazon DynamoDB.
-
CA (Consistency + Availability): Такая система не может быть распределенной. Этот выбор характерен для монолитных (одноузловых) баз данных, таких как PostgreSQL или MySQL в стандартной конфигурации.