Сохраните состояние процесса и повторяйте упавший шаг идемпотентно. Для нескольких сервисов используйте saga с явно заданными компенсациями, а не попытку удержать одну общую DB-транзакцию.
Как обеспечить отказоустойчивость в микросервисном сценарии: заказ оформлен, платёж прошёл, а дальнейший шаг — уменьшение остатка или уведомление — упал?
Сохраните состояние процесса и повторяйте упавший шаг идемпотентно. Для нескольких сервисов используйте saga с явно заданными компенсациями, а не попытку удержать одну общую DB-транзакцию.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Сохраните состояние процесса и повторяйте упавший шаг идемпотентно. Для нескольких сервисов используйте saga с явно заданными компенсациями, а не попытку удержать одну общую DB-транзакцию.
Уменьшение остатка и уведомление имеют разную критичность: неудачное письмо обычно не требует отмены оплаты, а нехватка товара может требовать компенсации по бизнес-правилу. Outbox помогает надёжно передать события, reconciliation — найти зависшие процессы. Refund или резервирование должны иметь собственные подтверждённые статусы, retries и защиту от дублей.