Gymterview
middle

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

CAP-теорема (теорема Брюера) утверждает, что в распределённой системе невозможно одновременно обеспечить все три свойства: согласованность (Consistency), доступность (Availability) и устойчивость к разделению (Partition Tolerance).

  • C (Consistency) — согласованность: все узлы видят одинаковые данные в одно время. Любое чтение возвращает результат последней успешной записи.
  • A (Availability) — доступность: каждый запрос получает ответ (успех или ошибка), даже если часть узлов недоступна.
  • P (Partition Tolerance) — устойчивость к разделению: система продолжает работать при потере связи между узлами сети.

Визуализация

Пример
                    Consistency (C)
                         ╱╲
                        ╱  ╲
                       ╱    ╲
                 CP   ╱  CAP ╲   CA
                     ╱ (невоз-╲
                    ╱  можно)  ╲
                   ╱────────────╲
     Partition    ╱      AP      ╲  Availability (A)
     Tolerance (P)

Реальный выбор: CP vs AP

Поскольку в реальных распределённых системах сетевые разделения (P) неизбежны, фактический выбор — между CP и AP:

Тип системы Жертвует Приоритет Примеры БД Подходит для
CP Доступностью Согласованность HBase, ZooKeeper, MongoDB (majority) Финансовые операции, где важна точность
AP Немедленной согласованностью Доступность Cassandra, DynamoDB, CouchDB Аналитика, каталоги, eventual consistency допустима
CA Устойчивости к разделению И то, и другое PostgreSQL, MySQL (без репликации) Одиночный узел, нет распределённости

Практическое применение

  • Для основных финансовых операций (переводы, платежи) выбирают CP — лучше вернуть ошибку, чем провести некорректную транзакцию.
  • Для сервисов аналитики и отображения истории можно использовать AP — допустима задержка в несколько секунд.

Важно понимать, что CAP-теорема описывает предел, а не бинарный выбор. Многие современные системы позволяют настраивать уровень согласованности на уровне отдельных операций (например, Cassandra поддерживает уровни консистентности от ONE до ALL).

На собеседовании: Интервьюер хочет услышать, что P неизбежна в распределённых системах и реальный выбор — между CP и AP. Частая ошибка — говорить, что можно выбрать CA в распределённой системе, или не понимать, что CAP — это спектр, а не жёсткий выбор.