Sobes.tech
Назад к вопросам
Middle
1

Как работает двухфазный коммит (2PC)?

Компании, где спрашивали
VKVK

Ответ от нейросети

sobes.tech AI

Двухфазный коммит (2PC) — это протокол для обеспечения атомарности распределённых транзакций.

Он состоит из двух этапов:

  1. Фаза подготовки (prepare): Координатор отправляет всем участникам запрос подготовиться к коммиту. Участники выполняют все необходимые проверки и операции, блокируют ресурсы, но не фиксируют изменения, и отвечают «готов» или «не готов».

  2. Фаза коммита (commit/abort): Если все участники ответили «готов», координатор посылает команду коммитить изменения, иначе — откатить.

Таким образом, либо все участники фиксируют изменения, либо все откатывают, обеспечивая согласованность.

Пример упрощённой логики на Go:

// Псевдокод
func twoPhaseCommit(participants []Participant) error {
    for _, p := range participants {
        if !p.Prepare() {
            // если кто-то не готов, откатываем
            for _, p2 := range participants {
                p2.Abort()
            }
            return errors.New("prepare failed")
        }
    }
    for _, p := range participants {
        p.Commit()
    }
    return nil
}