Что такое теорема CAP (теорема Брюэра) и как она применяется к распределенным системам?

Ответ

Теорема CAP (Consistency, Availability, Partition Tolerance) — это фундаментальный принцип для распределенных систем, который гласит, что любая распределенная система может одновременно гарантировать только два из трех следующих свойств:

  1. Consistency (Согласованность): Любое чтение возвращает самые актуальные данные (результат последней записи) или ошибку. Все узлы системы видят одни и те же данные в один и тот же момент времени.

  2. Availability (Доступность): Любой запрос к системе получает корректный отклик (не ошибку), но без гарантии, что он содержит самые актуальные данные. Система всегда работоспособна.

  3. 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 в стандартной конфигурации.