Выбор ответа Senior Микросервисы и Spring Cloud обновлено

Сага

Вопрос

Заказ требует списать деньги в сервисе платежей и зарезервировать товар на складе. Как сохранить согласованность без распределённой транзакции?

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

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

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

Коротко

Правильный ответ: Сага: локальные транзакции с компенсациями при сбое шага. Сага разбивает операцию на локальные шаги, каждый со своей транзакцией и событием.

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

  1. Сага: локальные транзакции с компенсациями при сбое шагаправильный ответ
  2. Двухфазный коммит через XA между базами всех сервисов
  3. Общая база данных для всех сервисов с одной транзакцией
  4. Синхронные вызовы сервисов подряд внутри одного @Transactional

Разбор

Сага разбивает операцию на локальные шаги, каждый со своей транзакцией и событием. Если шаг не удался, выполняются компенсирующие действия для уже сделанных. Координация через события (хореография) или центральный оркестратор. XA плохо масштабируется и редко поддерживается брокерами. Общая база ломает независимость сервисов. @Transactional не распространяется на чужие сервисы.

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

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

Термины по теме