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