Как реализовать подобие транзакции в микросервисах

Есть 2 сервиса общаются по grpc, нужно гарантировать консистентность данных в обоих. Например нужно создать пользователя в сервисе 1, как-то с ним поработать и записать в базу только если запрос в сервисе 2 был удачным, если же нет откатить.

Какие решения у себя применяете?


Ответы (1 шт):

Автор решения: Danil Apsadikov

Есть два варианта, как реализовать транзакции в микросервисах:

  1. Двухфазная фиксация.

На подготовительном этапе все микросервисы, участвующие в работе, готовятся к фиксации и уведомляют координатора, что готовы завершить транзакцию. Затем на следующем этапе либо происходит фиксация, либо координатор транзакции выдает всем микросервисам команду выполнить откат.

  1. Согласованность в конечном счете и компенсация / SAGA

При таком подходе распределенная транзакция выполняется как совокупность асинхронных локальных транзакций на соответствующих микросервисах. Микросервисы обмениваются информацией через шину событий.

Более подробно можно прочитать здесь: https://habr.com/ru/company/piter/blog/522366/

→ Ссылка