Что утверждает CAP-теорема?
- Что такое CAP?
- Почему нельзя одновременно согласованность и доступность?
При разделении сети (P) распределённая система выбирает: отвечать, рискуя отдать устаревшее (A), или отказать, сохранив согласованность (C).
- Разделение сети не выбирают — оно случается, поэтому реальный выбор — CP или AP на время сбоя
- Без сбоя можно иметь и C, и A; цена согласованности тогда — задержка (PACELC)
- CP: etcd, ZooKeeper, кворумная запись в Spanner; AP: Cassandra, DynamoDB по умолчанию, DNS
А ещё C в CAP — линеаризуемость, а не C из ACID
Подробно
Формулировка. Согласованность (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.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Распределённая система не может быть одновременно быстрой, надёжной и дешёвой
- ✓При сетевом разделении приходится выбирать между согласованностью и доступностью
- ✗Можно выбрать любые два свойства из трёх, например CA — отказавшись от устойчивости к разделению сети
- ✗Кэш и БД всегда полностью синхронизированы
Что спросят дальше
- Что такое PACELC?
- Пример AP- и CP-системы?
Разбор темы
- CAP и согласованность
Точная формулировка CAP и типичные искажения, неизбежность разделения и выбор C/A по операции, спектр согласованности и сессионные гарантии, кворумы N/R/W и их пределы, PACELC и разрешение конфликтов.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.