Что происходит если один участник не отвечает в двухфазном коммите
Что проверяют
Понимаете ли вы, что 2PC это блокирующий протокол, и различаете ли молчание участника до голосования и после. Вопрос отсеивает тех, кто выучил две фазы по картинке, но не думал про отказы, ради которых протокол и существует.
Как отвечать
Ответ распадается надвое.
Участник молчит на фазе prepare. Координатор ждёт до таймаута, трактует отсутствие ответа как голос против и рассылает откат всем. Исход безопасный: транзакция не состоялась, данные согласованы, ничего чинить не нужно.
Участник ответил «готов» и замолчал на второй фазе. Он находится в состоянии prepared: изменения записаны в его журнал, блокировки взяты, но решать за себя он уже не имеет права. После перезапуска он обязан спросить у координатора исход и применить его. Всё это время строки заблокированы, и конкурирующие транзакции ждут.
Отсюда главный вывод: если недоступен сам координатор, все проголосовавшие участники блокируются и разблокировать их может только он или администратор. Это неустранимое свойство протокола, а не дефект реализации. Поэтому в продакшене нужны журнал решений координатора и процедура восстановления, таймауты на блокировки и мониторинг зависших транзакций. В Java это мир JTA и XA, где администратору доступны эвристические решения, и они честно помечаются как расхождение данных.
Хорошо закончить альтернативами: сага с компенсациями, транзакционный outbox с идемпотентными потребителями, вынесение решения координатора в реплицируемый лог.
Где спотыкаются
Считают, что участник может сам откатиться по таймауту после голоса «готов». Не может: координатор мог уже подтвердить транзакцию остальным, и односторонний откат разъедет данные.
Заявляют, что 2PC гарантирует согласованность при любых сбоях. Он гарантирует атомарность решения, но ценой доступности, и при отказе координатора система встаёт.
Предлагают 2PC между микросервисами поверх HTTP или очереди. Там нет ни prepared-состояния, ни общих блокировок, и протокол превращается в набор сетевых вызовов без гарантий.