2PC (Two-Phase Commit)
Two-Phase Commit (2PC) — протокол распределённой транзакции, гарантирующий атомарность операции между несколькими узлами. Либо все узлы фиксируют транзакцию, либо ни один.
Две фазы
Prepare (голосование) — координатор отправляет Prepare всем участникам. Каждый проверяет, может ли выполнить транзакцию, и отвечает Yes или No
Commit/Abort — если все ответили Yes → координатор отправляет Commit. Если хотя бы один No → Abort
Проблемы
Blocking — если координатор падает после Prepare, но до Commit — участники заблокированы в неопределённости
Производительность — два раунда сетевых обращений, удерживает блокировки между фазами
Альтернатива
Saga Pattern — отказывается от 2PC в пользу компенсирующих транзакций и Eventual Consistency. Более практичен для микросервисов.