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