Как реализовать подобие транзакции в микросервисах
Есть 2 сервиса общаются по grpc, нужно гарантировать консистентность данных в обоих. Например нужно создать пользователя в сервисе 1, как-то с ним поработать и записать в базу только если запрос в сервисе 2 был удачным, если же нет откатить.
Какие решения у себя применяете?
Ответы (1 шт):
Есть два варианта, как реализовать транзакции в микросервисах:
- Двухфазная фиксация.
На подготовительном этапе все микросервисы, участвующие в работе, готовятся к фиксации и уведомляют координатора, что готовы завершить транзакцию. Затем на следующем этапе либо происходит фиксация, либо координатор транзакции выдает всем микросервисам команду выполнить откат.
- Согласованность в конечном счете и компенсация / SAGA
При таком подходе распределенная транзакция выполняется как совокупность асинхронных локальных транзакций на соответствующих микросервисах. Микросервисы обмениваются информацией через шину событий.
Более подробно можно прочитать здесь: https://habr.com/ru/company/piter/blog/522366/