Что такое CAP-теорема?

Ответ

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-системы, допуская временную несогласованность.