Что утверждает CAP-теорема в распределённых системах?

«Что утверждает CAP-теорема в распределённых системах?» — вопрос из категории Архитектура, который задают на 24% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

CAP-теорема (теорема Брюера) утверждает, что в распределённой системе, подверженной сетевым сбоям (разделам — P), невозможно одновременно обеспечить:

  • Согласованность (Consistency, C): Все узлы видят одни и те же данные в один момент времени.
  • Доступность (Availability, A): Каждый запрос к системе получает ответ (успешный или ошибочный).

На практике система может гарантировать только два из трёх свойств:

Компромисс Описание Примеры систем
CP (Согласованность + Устойчивость к разделению) При сетевом разделении система блокирует запросы для сохранения согласованности данных, жертвуя доступностью. MongoDB (в конфигурации с сильной согласованностью), HBase, Redis (в режиме кластера).
AP (Доступность + Устойчивость к разделению) При разделении система остаётся доступной, но может возвращать устаревшие или несогласованные данные. Cassandra, DynamoDB, CouchDB.
CA (Согласованность + Доступность) Реализуется только в системах без сетевых разделений (например, в одном узле или идеальной сети). Традиционные RDBMS (PostgreSQL, MySQL) в рамках одного дата-центра.

Важно: Теорема описывает поведение системы в момент сетевого раздела, а не её постоянные характеристики. Современные системы часто стремятся к гибким компромиссам (например, базовая доступность и согласованность в конечном счёте).