Ответ вслух Senior Асинхронные интеграции и брокеры обновлено

Кейс: распределённое оформление заказа

Вопрос

В интернет-магазине оформление заказа проходит через три сервиса: склад (резерв), платежи (списание), доставку (назначение слота). Общей базы нет. Опиши, как обеспечишь согласованность.

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Использую сагу. Шаги: зарезервировать товар, списать деньги, назначить слот доставки.

Что должно прозвучать в ответе

  • Сага: шаги и компенсации для каждого сервиса

  • Выбор оркестрации (явный процесс) или хореографии и почему

  • Статусная модель заказа с промежуточными состояниями

  • Идемпотентность шагов и компенсаций, outbox

  • Таймауты и ручной разбор зависших саг

Что могут спросить следом

  • Что видит клиент, пока сага не завершилась?
  • Что делать, если сама компенсация не прошла?

Разбор

Использую сагу. Шаги: зарезервировать товар, списать деньги, назначить слот доставки. Компенсации: снять резерв, вернуть деньги, освободить слот. Здесь лучше оркестрация: сервис заказов как оркестратор ведёт процесс, и вся логика видна в одном месте. Заказ получает промежуточные статусы: «резервируем», «ждём оплату», «назначаем доставку», клиент видит «оформляем заказ». Если слот не назначен, оркестратор вызывает возврат денег и снятие резерва в обратном порядке. Все команды и компенсации идемпотентны, события публикуются через outbox. На каждом шаге таймаут, а саги, которые не завершились за отведённое время или где компенсация упала, попадают в очередь на ручной разбор с алертом.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.