Outbox атомарно сохраняет бизнес-изменение и запись о будущем событии в одной БД-транзакции. Отправка в брокер выполняется отдельно; паттерн не делает commit БД и сетевую отправку одной атомарной операцией.
Как паттерн Transactional Outbox гарантирует атомарность обновления БД и отправки события в брокер без 2PC?
Outbox атомарно сохраняет бизнес-изменение и запись о будущем событии в одной БД-транзакции. Отправка в брокер выполняется отдельно; паттерн не делает commit БД и сетевую отправку одной атомарной операцией.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Outbox атомарно сохраняет бизнес-изменение и запись о будущем событии в одной БД-транзакции. Отправка в брокер выполняется отдельно; паттерн не делает commit БД и сетевую отправку одной атомарной операцией.
Relay читает committed outbox и публикует события, затем отмечает доставку. Если он упадёт после отправки до отметки, событие будет повторено, поэтому потребитель должен быть идемпотентным. До commit событие не публикуют. Нужны устойчивые идентификаторы, контроль отставания, правила порядка и безопасная конкуренция relay. Гарантия — отсутствие разрыва «данные записаны, намерение отправки потеряно» при соблюдении условий, а не универсальное exactly-once.