Москва: проверенные б/у ноутбуки с гарантией и проверкой перед оплатой
+7 906 722-94-45

Главная → Статьи → CAP theorem: теорема CAP в распределенных системах

CAP theorem: компромисс между согласованностью, доступностью и устойчивостью к разделению

Теорема CAP: Consistency, Availability, Partition tolerance — как выбирать между ними в распределенных системах и практические последствия.

Прямой ответ

CAP theorem — теорема о невозможности одновременного обеспечения всех трех свойств в распределенной системе (CAP — «CAP теорема» — CAP — incident — «компромисс» — CAP), зачем: понимание компромиссов (CAP — «нельзя всё сразу» — CAP — incident — «компромисс» — CAP — postgres — «выбор» — CAP); три свойства CAP (CAP — «CAP» — CAP): (1) Consistency (Согласованность) (CAP — «все узлы видят одни данные» — CAP — incident — «согласованность» — CAP — postgres — «линеаризуемость» — CAP — consistency — «согласованность» — CAP — «все чтения возвращают последнюю запись» — CAP); (2) Availability (Доступность) (CAP — «все запросы получают ответ» — CAP — incident — «доступность» — CAP — postgres — «без ошибок» — CAP — consistency — «доступность» — CAP — «каждый запрос получает ответ» — CAP); (3) Partition tolerance (Устойчивость к разделению) (CAP — «система работает при разделении сети» — CAP — incident — «разделение сети» — CAP — postgres — «сеть может разделиться» — CAP — consistency — «устойчивость» — CAP — «система продолжает работать» — CAP); теорема (CAP — «нельзя все три» — CAP — incident — «максимум два» — CAP — postgres — «выбор двух» — CAP — consistency — «компромисс» — CAP — «при разделении сети выбираем C или A» — CAP); варианты выбора (CAP — «выбор» — CAP): (1) CP (Consistency + Partition tolerance) (CAP — «согласованность + устойчивость» — CAP — incident — «жертвуем доступностью» — CAP — postgres — «при разделении — отказы» — CAP — consistency — «CP» — CAP — «ZooKeeper, etcd, HBase» — CAP); (2) AP (Availability + Partition tolerance) (CAP — «доступность + устойчивость» — CAP — incident — «жертвуем согласованностью» — CAP — postgres — «при разделении — устаревшие данные» — CAP — consistency — «AP» — CAP — «Cassandra, DynamoDB, CouchDB» — CAP); (3) CA (Consistency + Availability) (CAP — «согласованность + доступность» — CAP — incident — «жертвуем устойчивостью» — CAP — postgres — «без разделения сети» — CAP — consistency — «CA» — CAP — «традиционные БД (не распределенные)» — CAP); когда выбирать (CAP): CP (CAP — «когда важна согласованность» — CAP — incident — «согласованность критична» — CAP — postgres — «финансы» — CAP — consistency — «CP» — CAP), AP (CAP — «когда важна доступность» — CAP — incident — «доступность критична» — CAP — postgres — «соцсети» — CAP — consistency — «AP» — CAP); антипаттерны: игнорировать CAP (CAP — «игнорировать теорему» — CAP — incident — «проблемы» — CAP — postgres — «понимать CAP» — CAP), неправильный выбор (CAP — «неправильный выбор» — CAP — incident — «проблемы» — CAP — postgres — «правильный выбор» — CAP).

Практика: применение CAP theorem

CP системы (CAP — ZooKeeper (CAP — «ZooKeeper — CP» — CAP — postgres — «согласованность» — CAP — incident — «при разделении — отказы» — CAP — consistency); AP системы (CAP — Cassandra (CAP — «Cassandra — AP» — CAP — postgres — «доступность» — CAP — incident — «при разделении — устаревшие данные» — CAP — consistency — Cassandra); CA системы (CAP — PostgreSQL (CAP — «PostgreSQL — CA (не распределенная)» — CAP — postgres — «согласованность + доступность» — CAP — incident — «без разделения» — CAP — postgres); Выбор (CAP — по задаче (CAP — «выбор по задаче» — CAP — postgres — «выбор» — CAP — incident — «по задаче» — CAP — consistency).

Практический сценарий: выбор между CP и AP

Контекст: распределенная система (postgres — нужно выбрать (incident — CAP), боль: компромисс (CAP — «нельзя всё сразу» — CAP — incident — «компромисс» — CAP — postgres); решение — CAP theorem: (1) анализ (CAP — что важнее (CAP — «согласованность или доступность» — CAP — postgres — «анализ» — CAP — incident); (2) CP (CAP — если важна согласованность (CAP — «ZooKeeper» — CAP — postgres — «CP» — CAP — consistency); (3) AP (CAP — если важна доступность (CAP — «Cassandra» — CAP — postgres — «AP» — CAP — consistency — Cassandra); (4) реализация (CAP — выбор системы (CAP — «выбор системы» — CAP — postgres — «реализация» — CAP — incident); результат: выбор сделан (CAP — «CP или AP» — CAP — incident — «компромисс понятен» — CAP — postgres — «система выбрана» — CAP); вывод: CAP theorem решили задачу (понимание компромиссов — CAP — ADR — «игнорировать CAP» — антипаттерн — postgres — понимать CAP — CAP — техдолг).

FAQ

Что такое CAP theorem и какие три свойства? CAP theorem (CAP — теорема о невозможности (CAP — «CAP теорема» — CAP — incident — «нельзя все три» — CAP — postgres); свойства (CAP): Consistency (CAP — «согласованность» — CAP — incident — «все узлы видят одни данные» — CAP — postgres — consistency), Availability (CAP — «доступность» — CAP — incident — «все запросы получают ответ» — CAP — postgres — consistency), Partition tolerance (CAP — «устойчивость к разделению» — CAP — incident — «система работает при разделении» — CAP — postgres — consistency); «игнорировать CAP» — антипаттерн (проблемы — postgres — понимать CAP — CAP — ADR — техдолг).

Какие варианты выбора существуют и чем они отличаются? Варианты (CAP — выбор (CAP — «выбор двух» — CAP — incident — «максимум два» — CAP — postgres): CP (CAP — «согласованность + устойчивость» — CAP — incident — «жертвуем доступностью» — CAP — postgres — «ZooKeeper, etcd» — CAP — consistency), AP (CAP — «доступность + устойчивость» — CAP — incident — «жертвуем согласованностью» — CAP — postgres — «Cassandra, DynamoDB» — CAP — consistency — Cassandra), CA (CAP — «согласованность + доступность» — CAP — incident — «жертвуем устойчивостью» — CAP — postgres — «традиционные БД» — CAP — consistency); отличие: CP — согласованность (CAP — consistency), AP — доступность (CAP — consistency — Cassandra), CA — без разделения (CAP — postgres — «выбор по задаче» — CAP — incident — ADR — техдолг).

Как выбрать между CP и AP и какие системы относятся к каждому типу? Выбор (CAP — по задаче (CAP — «выбор по задаче» — CAP — incident — «по задаче» — CAP — postgres); как: CP (CAP — «когда важна согласованность» — CAP — incident — «согласованность критична» — CAP — postgres — «финансы» — CAP — consistency), AP (CAP — «когда важна доступность» — CAP — incident — «доступность критична» — CAP — postgres — «соцсети» — CAP — consistency — Cassandra); системы: CP (CAP — «ZooKeeper, etcd, HBase» — CAP — postgres — «CP» — CAP — consistency), AP (CAP — «Cassandra, DynamoDB, CouchDB» — CAP — postgres — «AP» — CAP — consistency — Cassandra); «неправильный выбор» — антипаттерн (проблемы — postgres — правильный выбор — CAP — ADR — техдолг).

Что происходит при разделении сети в CP и AP системах? При разделении (CAP — сеть разделилась (CAP — «разделение сети» — CAP — incident — «разделение» — CAP — postgres — consistency); CP (CAP — «жертвуем доступностью» — CAP — incident — «отказы» — CAP — postgres — «меньшинство отказывает» — CAP — consistency — «согласованность» — CAP); AP (CAP — «жертвуем согласованностью» — CAP — incident — «устаревшие данные» — CAP — postgres — «все отвечают» — CAP — consistency — «доступность» — CAP — Cassandra); «игнорировать разделение» — антипаттерн (проблемы — postgres — понимать последствия — CAP — ADR — техдолг).

Источники: Wikipedia (CAP theorem), Martin Fowler (patterns), Cassandra docs — ссылки в шапке.