Получить доступ

Что утверждает CAP-теорема?

MiddleCAP и согласованность
Ещё спрашивают так:
  • Что такое CAP?
  • Почему нельзя одновременно согласованность и доступность?
Коротко

При разделении сети (P) распределённая система выбирает: отвечать, рискуя отдать устаревшее (A), или отказать, сохранив согласованность (C).

  • Разделение сети не выбирают — оно случается, поэтому реальный выбор — CP или AP на время сбоя
  • Без сбоя можно иметь и C, и A; цена согласованности тогда — задержка (PACELC)
  • CP: etcd, ZooKeeper, кворумная запись в Spanner; AP: Cassandra, DynamoDB по умолчанию, DNS

А ещё C в CAP — линеаризуемость, а не C из ACID

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Формулировка. Согласованность (C) — каждое чтение видит последнюю подтверждённую запись, как будто копия одна (линеаризуемость). Доступность (A) — каждый запрос к работающему узлу получает ответ, не ошибку. Устойчивость к разделению (P) — система продолжает работать, когда часть узлов не может связаться с другой частью.

Почему выбор. Если сеть разделилась, узел, получивший запись, не может сообщить о ней узлам по другую сторону. Тогда узел другой стороны либо отвечает своими данными — возможно устаревшими (выбрана A), либо отказывает до восстановления связи (выбрана C).

Важные уточнения:

  • P в распределённой системе неизбежна, поэтому «CA-систем» на практике нет — это просто система, которая не переживает разделение;
  • выбор не обязательно один на всю систему: корзина может быть AP, а списание денег — CP;
  • PACELC: при разделении (P) выбираем A или C, иначе (E) — между задержкой (L) и согласованностью (C). Синхронная репликация и кворумы стоят задержки и в нормальном режиме.

Примеры: CP — etcd, ZooKeeper, Consul, системы на Raft; AP — Cassandra, Riak, DynamoDB с итоговой согласованностью, DNS. Многие системы настраиваются: Cassandra с QUORUM ведёт себя ближе к CP.

Что хотят услышать

  • Расшифровка трёх букв с точным смыслом C и A.
  • Почему P неизбежна и выбор — между C и A во время разделения.
  • Примеры CP и AP систем.
  • PACELC и выбор по типу данных — плюс.

Частые ошибки

  • «Выбираем любые две из трёх» и CA-системы.
  • Путать C из CAP с согласованностью из ACID.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓При сетевом разделении (Partition) приходится выбирать между согласованностью (C) и доступностью (A); P неизбежно, выбор C/A возникает только при разделении
  • ✗Распределённая система не может одновременно быть быстрой, надёжной и дешёвой
  • ✗Любая БД обязана поддерживать ACID-транзакции
  • ✗Кэш и БД всегда полностью синхронизированы

Что спросят дальше

  • Что такое PACELC?
  • Пример AP- и CP-системы?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем