Выбор ответа Senior Консистентность и CAP обновлено

Компенсации в саге

Вопрос

Сага оформления заказа: 1) создать заказ, 2) списать деньги, 3) зарезервировать товар. Шаг 3 не удался: товара нет. Что должна сделать сага?

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

Выберите вариант, и откроется разбор.

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

Коротко

Правильный ответ: Компенсации в обратном порядке: вернуть деньги, отменить. В саге нет общей транзакции: каждый шаг уже закоммичен в своём сервисе.

Варианты ответа

  1. Откатить все шаги одной распределённой транзакцией БД
  2. Повторять шаг 3, пока товар не появится на складе
  3. Компенсации в обратном порядке: вернуть деньги, отменитьправильный ответ
  4. Ничего: заказ останется оплаченным, деньги вернёт поддержка

Разбор

В саге нет общей транзакции: каждый шаг уже закоммичен в своём сервисе. Откат делается компенсациями в обратном порядке. Бесконечный ретрай не поможет, если товара действительно нет. Оставлять деньги списанными нельзя, это ошибка дизайна, а не процесс поддержки.

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

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