Ответ вслух Senior Микросервисы и Spring Cloud обновлено

Согласованность данных между сервисами

Вопрос

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

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

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

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

Коротко

Каждый сервис владеет своей базой, а распределённые транзакции через 2PC не использую: они хрупкие и плохо масштабируются. Бизнес-операцию, затрагивающую несколько сервисов, оформляю сагой: каждый шаг это локальная транзакция, на сбой есть компенсация, например отмена резерва на складе и возврат платежа.

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

  • База на сервис, нет 2PC

  • Саги: локальные транзакции и компенсации, хореография или оркестрация

  • Outbox для надёжной публикации событий

  • At-least-once доставка и идемпотентные потребители

  • Eventual consistency и как её показывать пользователю

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

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

  • Хореография или оркестрация: что выбрать?
  • Как сделать потребителя идемпотентным?

Разбор

Каждый сервис владеет своей базой, а распределённые транзакции через 2PC не использую: они хрупкие и плохо масштабируются. Бизнес-операцию, затрагивающую несколько сервисов, оформляю сагой: каждый шаг это локальная транзакция, на сбой есть компенсация, например отмена резерва на складе и возврат платежа. Простые цепочки делаю хореографией через события, сложные с ветвлениями оркестратором, где состояние саги видно в одном месте. События публикую через transactional outbox, чтобы изменение данных и событие не разъезжались. Доставка at-least-once, поэтому потребители идемпотентны: храню id обработанных событий или делаю операции естественно идемпотентными. Пользователь видит промежуточные статусы вроде «оплата обрабатывается». Зависшие саги мониторю и разбираю.

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

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

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