CAP-теорема

CAP-теорема утверждает: распределённая система не может одновременно гарантировать все три свойства. Нужно выбрать два из трёх.

C Consistency A Availability P Partition Tolerance CP PostgreSQL ZooKeeper AP Cassandra DynamoDB P — необходимость, реальный выбор: CP или AP
  • C — Consistency (Согласованность): все узлы видят одни и те же данные в один момент времени. Если записали на один узел — читая с любого другого, сразу получишь актуальное значение.
  • A — Availability (Доступность): система всегда отвечает на запросы (пусть и не самыми свежими данными), не зависает.
  • P — Partition Tolerance (Устойчивость к разделению): система продолжает работать, даже если связь между узлами нарушена (сетевой сбой, узел упал).

В реальности P — не выбор, а необходимость. Сетевые разделения случаются всегда. Поэтому реальный выбор: CP или AP.

CPAP
При сбое сетиОткажет отвечать (чтобы не дать устаревшие данные)Ответит устаревшими данными
ПримерPostgreSQL, HBase, ZooKeeperCassandra, DynamoDB, CouchDB
Подходит дляФинансы, бронированияЛайки, счётчики, корзина
Копнуть глубже

PACELC — расширение CAP. CAP описывает только ситуацию сетевого разделения. PACELC добавляет: а в нормальной работе (без сбоя) тоже есть выбор между Latency (задержкой) и Consistency. Согласованность требует, чтобы все реплики подтвердили запись до ответа клиенту — это задержка. Eventual Consistency (конечная согласованность) отвечает быстро, но данные временно расходятся между репликами.

Eventual Consistency — данные в конечном счёте станут согласованы. Типичный пример: вы лайкнули пост, 2 секунды счётчик на другой реплике показывает старое значение, потом синхронизируется. Для лайков — приемлемо. Для баланса банковского счёта — нет.

Strong vs Eventual Consistency в Spring. @Transactional обеспечивает сильную согласованность в рамках одного узла PostgreSQL. При работе с несколькими БД или микросервисами (Saga pattern — см. тему «Saga») получаем только eventual consistency — нет транзакции, охватывающей несколько сервисов.

Quorum-чтение/запись в Cassandra. Можно настроить: считать данные согласованными, если их подтвердило большинство (QUORUM) или все (ALL) реплики. QUORUM read + QUORUM write = strong consistency при наличии 3 реплик. ONE read + ONE write = скорость, но eventual consistency.

🎤 Закрыл тему, если можешь объяснить:
• что означает каждая буква CAP и почему выбор реально между CP и AP;
• что такое eventual consistency и когда она приемлема (если дошёл до 2-го слоя).