Распределённые данные · проверено по источникам

Теорема CAP

Теорема CAP устанавливает предел для распределённой службы чтения и записи: в асинхронной модели при разделении сети нельзя гарантировать одновременно линеаризуемую согласованность и ответ в конечном итоге на каждый запрос, полученный исправным узлом. Формальная доступность A не задаёт числовой срок ответа; допустимость самого ответа определяется спецификацией операции.

Также ищут: CAP theorem · Brewer theorem

Практический смысл

Почему это важно

Если площадки потеряли связь, нужно заранее определить, какие ответы допускает каждая операция и какие гарантии сохраняются. Получение ответа, его допустимость по спецификации и соблюдение срока SLA требуют отдельных проверок. Для заказа важно поведение чтений и записей при разрыве связи; пара букв у названия продукта его не описывает.

Доказательная часть

Что подтверждено

  1. В асинхронной модели Гилберта и Линч невозможно одновременно гарантировать атомарную согласованность и доступность службы чтения и записи при допустимых сетевых разделениях. Речь идёт о гарантиях для всех разрешённых выполнений модели, а не о вероятности одного удачного запроса.

    Граница применимости: Теорема CAP Гилберта и Линч, асинхронная модель и её формальные определения; не универсальная классификация всех свойств базы данных.

  2. CAP не означает постоянный свободный выбор любых двух букв. Когда связь уже разделена, нельзя отменить это событие настройкой. Компромисс штатного режима между задержкой и согласованностью отдельно рассматривает PACELC.

    Граница применимости: Граница теоремы CAP и принципа PACELC; P означает учёт разделений сети в модели.

  3. Согласованность C в теореме CAP — атомарная, то есть линеаризуемая, история чтений и записей. Это не проверка допустимого остатка или внешних ключей: правильность такого правила данных относится к другой задаче.

    Граница применимости: Формальная согласованность CAP; сравнение с транзакционными ограничениями PostgreSQL.

  4. Формальная доступность A требует, чтобы каждый запрос, полученный исправным узлом, в итоге получил ответ. Определение не задаёт числовой предел задержки. Допустимость ответа с ошибкой проверяется отдельно по заранее заданной спецификации операции: из определения A самого по себе не следует ни обязательный бизнес-успех, ни право заменить любой ответ произвольной ошибкой.

    Граница применимости: Определение доступности в асинхронной модели Гилберта и Линч сопоставлено с допустимыми результатами операций по спецификации объекта у Херлихи и Винг. Это различение свойства завершения и корректности ответа; числовой SLA и универсальная политика ошибок в теореме не заданы.

  5. Пусть спецификация регистра требует от чтения вернуть значение, а от записи — подтверждение. После разделения узел A подтвердил запись 1 вместо 0. Начатое затем чтение на узле B, который не получил запись, не может вернуть 0 с сохранением линеаризуемости. Если разделение не заканчивается, бесконечное ожидание связи нарушает A. Ответ об ошибке не входит в заданные результаты этого регистра; его допустимость нельзя вывести из одного требования A.

    Граница применимости: Учебный вывод из модели CAP и спецификации линеаризуемого регистра: один объект, две исправные разделённые части, нет другой записи и внешнего пути передачи значения. Спецификация задана до отказа; пример не устанавливает общий запрет ошибок для других операций.

  6. Разделение сети не требует остановки процессов: узлы по обе стороны могут работать и принимать запросы, но не получать нужные сообщения друг от друга. Проверка только отказа питания одного сервера не воспроизводит этот сценарий.

    Граница применимости: Сетевое разделение в модели CAP; конкретные ограничения доставки задаются сценарием испытания.

Граница терминов

Не путать

Принцип PACELC

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

Согласованность транзакции

C в CAP означает линеаризуемый порядок операций. Согласованность транзакции связана с сохранением правил допустимого состояния. Правильная сумма заказа и свежий ответ разделённой реплики — разные проверки.

Перед спецификацией

Что проверить

  1. Запишите, что именно означает согласованность для выбранного чтения или записи.
  2. Заранее задайте спецификацию операции и допустимые ответы, включая предусмотренные ошибки.
  3. Разделите связь между работающими частями, а не ограничивайтесь выключением узла.
  4. После подтверждённой записи проверьте чтение на изолированной стороне.
  5. Проверьте отдельно получение ответа каждым запросом к исправному узлу и допустимость ответа по спецификации.
  6. Определите, какие операции ждут восстановления связи и что произойдёт, если разделение не закончится.
  7. Предел задержки и процент доступности задайте отдельно: формальная A не подставляет числа в SLA.
  8. Отдельно измерьте задержку и гарантии при восстановленной связи.
Открытые основания

Первоисточники

  • Первичная публикация

    Brewer's Conjecture and the Feasibility of Consistent, Available, Partition-Tolerant Web Services

    MIT Laboratory for Computer Science · Gilbert and Lynch, SIGACT News 33(2), 2002

    Формализует CAP impossibility для atomic consistency и availability в asynchronous network model.

    Открыть первоисточник
  • Первичная публикация

    Consistency Tradeoffs in Modern Distributed Database System Design

    Yale University / IEEE Computer · Daniel Abadi, IEEE Computer 45(2), 2012

    Вводит PACELC: partition tradeoff и отдельный normal-operation latency/consistency tradeoff.

    Открыть первоисточник
  • Первичная публикация

    Linearizability: A Correctness Condition for Concurrent Objects

    Carnegie Mellon University / ACM · Herlihy and Wing, ACM TOPLAS 12(3), July 1990

    Даёт формальное real-time correctness condition для concurrent operations.

    Открыть первоисточник
  • Официальная документация

    PostgreSQL 18 Documentation: Constraints

    PostgreSQL Global Development Group · документация PostgreSQL 18, страница открыта 7 сентября 2026 года

    Открыт редактором 7 сентября 2026 года, заголовок документа сверен. Проверить CHECK и NULL, NOT NULL, UNIQUE и границу проверок одной строки; пример заказа — редакторское применение этих правил.

    Открыть первоисточник
Сообщить об ошибке

Опишите проблему — постараемся исправить как можно скорее.

Спасибо!

Получили ваше сообщение.
Подтвердите действие