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