Кратко
- Участник голосует «да» лишь после сохранения состояния, достаточного для redo или undo своей части; с этого момента он не вправе решать в одиночку, но общего исхода ещё не знает.
- Устойчивое решение координатора — отдельный факт протокола. Если подготовленный участник не может его узнать, ожидание сохраняет атомарность лучше выдуманного локального ответа.
- Commit распространяется на подключённые менеджеры транзакционных ресурсов и сам по себе не доказывает однократное выполнение письма, ручной задачи или действия внешнего устройства.
Участник возвращается после сбоя. В его журнале есть принудительно записанный prepare, локальная работа завершилась успешно, и он помнит отправленное «да». Нет только вердикта. Назвать такое состояние «почти committed» — значит смешать готовность с полномочием. Точное название: prepared, или in-doubt.
Работы Jim Gray о транзакциях превращают это различие в практический метод. Первая фаза создаёт возможность подчиниться любому исходу и ограничивает односторонние действия. Вторая передаёт устойчивое решение, принятое другой уполномоченной стороной.
Prepare фиксирует обещание, а не результат
В Notes on Data Base Operating Systems 1978 года Gray описывает запрос координатора: каждый участник должен перейти в состояние, из которого сможет повторить или отменить свою часть. До ответа AGREE необходимая информация UNDO и REDO помещается в надёжное хранилище.
До «да» участник ещё может отказаться и выполнить abort. После него он обязан сохранять журнал, блокировки или версии, позволяющие выполнить как commit, так и abort. Локальный успех не превращается в глобальный исход — он становится устойчивым условным обязательством.
C. Mohan, Bruce Lindsay и Ron Obermarck чётко проводят эту границу в статье о распределённой системе IBM R*. Подчинённый узел принудительно записывает prepare, посылает YES, входит в prepared и больше не может самостоятельно выбрать commit или abort.
Точка commit находится у координатора
Координатор собирает требуемые голоса. Когда условия выполнены, он принудительно записывает глобальный commit и только затем объявляет результат. В работе о R* эта запись названа точкой коммита. Поэтому отдельное «да» появляется раньше факта, которому участник должен будет подчиниться.
Без такого разделения несколько локальных успехов могли бы стать противоречащими истинами. Один узел покажет изменения, приняв своё «да» за commit, а другой, отказавший до подготовки, будет обязан их отменить. Две фазы подчиняют локальные возможности одному устойчивому решению.
Даже знание всех голосов не делает участника координатором. Информация о намерениях и полномочие установить исход — разные свойства. Восстановление должно найти подлинное решение, а не вычислить наиболее правдоподобное.
Восстановление возвращает знание протокола
Правило Gray намеренно механично. Если принудительно записанного согласия нет, можно выполнить abort: устойчивое обещание не покинуло узел. Если запись есть, участник узнаёт вердикт у координатора или через уполномоченный канал восстановления и выполняет REDO либо UNDO.
В операционном интерфейсе следует различать working, prepared/in-doubt, committed и aborted. Объединение prepared с «успехом» скрывает главное неизвестное. Сервис может быть исправен, локальные данные целы, а глобальный исход всё ещё не установлен.
Полезные свидетельства — идентификатор транзакции, координатор или служба восстановления, время prepare, последний подтверждённый контакт и удерживаемые ресурсы. Повтор бизнес-действия не разрешает старое состояние и может создать второй внешний эффект.
Блокировка — отказ сочинить вердикт
Если координатор исчезает после «да», но до доставки результата, классический 2PC способен блокироваться. Gray и Leslie Lamport прямо используют это ограничение в Consensus on Transaction Commit: единственного координатора хватает для нормального пути, однако его отказ может остановить продвижение.
Ожидание удерживает блокировки и ёмкость, задерживает следующие операции. Тем не менее оно честно сохраняет две границы: участнику недостаёт и знания, и полномочий. Предположить commit — риск расколоть результат; предположить abort — риск противоречить уже сохранённому в другом месте commit.
Работа о R* допускает эвристическое решение оператора в чрезвычайном случае, но предупреждает о возможном несовпадении с глобальным вердиктом. Принудительный исход следует явно отмечать как исключение с последующей сверкой. Он не делает 2PC неблокирующим.
Граница транзакции проходит по границе участия
В “The Transaction Concept: Virtues and Limitations” Gray отличает защищённые действия от «реальных действий». Журнал возвращает данные, но не забирает выданные деньги, не отзывает доставленное письмо, не отменяет решение человека и не обращает действие устройства, не участвовавшего в транзакции.
Для внешних эффектов нужен отдельный механизм: задержать их до commit, дать ключ идемпотентности, устойчиво записать запрос на последующую доставку либо определить компенсацию. Компенсация — новое бизнес-действие, а не идеальный rollback.
Поэтому база может быть committed, когда внешнее сообщение ещё ожидает, задублировано или завершилось ошибкой. Возможна и обратная картина: устройство уже сработало, а транзакция затем перешла в abort. Честная модель состояния отдельно показывает транзакционный вердикт и доказательство внешнего эффекта.
У этой истории несколько авторов
Ясность Gray не оправдывает миф об одном изобретателе. В собственной исторической заметке он называет ранние работы Ron Obermarck, Earl Jenner и Steve Weick и отмечает независимое открытие 2PC Butler Lampson и Howard Sturgis. Mohan, Lindsay и Obermarck написали анализ R* и его оптимизаций. Andreas Reuter стал соавтором позднейшего фундаментального труда, а Lamport — работы о Paxos Commit.
Такая точность лучше показывает вклад Gray: необходимость раздельно отвечать, что система знает, что она обещала, кто вправе решить и какие последствия остаются вне её контроля.
Источники
- Jim Gray, “Notes on Data Base Operating Systems” (1978)
- Jim Gray, “The Transaction Concept: Virtues and Limitations” (1981)
- C. Mohan, Bruce Lindsay и Ron Obermarck о транзакциях в R*
- Jim Gray и Andreas Reuter, Transaction Processing: Concepts and Techniques
- Jim Gray и Leslie Lamport, “Consensus on Transaction Commit”
- Microsoft Open Specifications, фазы commit
Обзор для участников
Подробный контекст профиля
Войдите с подходящим уровнем подписки, чтобы открыть полный обзор и примечания к источникам.
Только для Стратегического сообщества
Стратегическое сообщество
Открыто всем читателям. Вступите и войдите, чтобы открыть обзоры профилей.
Вступить в Стратегическое сообществоТолько для Альянса лидеров
Альянс лидеров
Для проверенных владельцев IP-активов и руководителей. Войдите, чтобы открыть обзоры Альянса.
Вступить в Альянс лидеров
