Кейс: распределённое оформление заказа
Вопрос
В интернет-магазине оформление заказа проходит через три сервиса: склад (резерв), платежи (списание), доставку (назначение слота). Общей базы нет. Опиши, как обеспечишь согласованность.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Сага: шаги и компенсации для каждого сервиса
Выбор оркестрации (явный процесс) или хореографии и почему
Статусная модель заказа с промежуточными состояниями
Идемпотентность шагов и компенсаций, outbox
Таймауты и ручной разбор зависших саг
Что могут спросить следом
- Что видит клиент, пока сага не завершилась?
- Что делать, если сама компенсация не прошла?
Разбор
Использую сагу. Шаги: зарезервировать товар, списать деньги, назначить слот доставки. Компенсации: снять резерв, вернуть деньги, освободить слот. Здесь лучше оркестрация: сервис заказов как оркестратор ведёт процесс, и вся логика видна в одном месте. Заказ получает промежуточные статусы: «резервируем», «ждём оплату», «назначаем доставку», клиент видит «оформляем заказ». Если слот не назначен, оркестратор вызывает возврат денег и снятие резерва в обратном порядке. Все команды и компенсации идемпотентны, события публикуются через outbox. На каждом шаге таймаут, а саги, которые не завершились за отведённое время или где компенсация упала, попадают в очередь на ручной разбор с алертом.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.