Что такое Two-Phase Commit

«Что такое Two-Phase Commit» — вопрос из категории Базы данных, который задают на 24% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Two-Phase Commit (2PC) — это протокол распределённых транзакций, обеспечивающий атомарность в системах с несколькими участниками.

Фазы:

  1. Prepare Phase: Координатор запрашивает у всех участников готовность к фиксации. Участники отвечают "готов" или "отказ".
  2. Commit/Rollback Phase: Если все участники готовы, координатор отправляет команду "commit". Если хотя бы один отказал — "rollback".

Пример на псевдокоде:

// Координатор
func twoPhaseCommit() {
    prepared := askAllParticipants() // Фаза 1
    if all(prepared) {
        sendCommit() // Фаза 2 (commit)
    } else {
        sendRollback() // Фаза 2 (rollback)
    }
}

Проблемы:

  • Блокировка при отказе координатора.
  • Не подходит для высоконагруженных систем из-за синхронного ожидания.

Альтернативы: 3PC, Saga.