Откат транзакции, когда вызов API уже был выполнен - PullRequest
0 голосов
/ 06 декабря 2018

Недавно я столкнулся с проблемой работы с микросервисами.Мое основное приложение работает с реляционными базами данных, микросервис работает с БД Mongo и предоставляет ReST API с методами CRUD для некоторой модели.Методы CRUD также реализованы в приложении.Сначала из приложения поступает вызов из внешнего интерфейса, создается новая запись в реляционной базе данных (там сохраняются только некоторые поля), затем модель сохраняется извне - в БД Mongo.В конце концов сделка совершается.Таким образом, если что-то пойдет не так и транзакция будет отменена, вызов API уже будет выполнен.В случае создания я могу просто удалить вновь созданную запись из БД Mongo, но в случае редактирования я понятия не имею, что делать.

Одной из идей было перезаписать модель в БД Mongo с помощьюзапись из реляционной базы данных, но в этом случае данные будут незаметными, поскольку не все поля сохраняются там.

Есть идеи по этому поводу?

1 Ответ

0 голосов
/ 11 декабря 2018

Есть несколько способов сделать это:

Использование 2PC (двухфазная фиксация) : вы в основном запрашиваете операцию в любом распределенном сервисе, а затем подтверждаете / откатываете ее впоследствии.

Использование sagas : С помощью sagas вы должны обеспечить своего рода «операцию отката» для операций, которые вы выполняли в своих распределенных сервисах.Когда вам нужно откатить уже выполненную операцию, вы вызываете сервис и указываете откат.

Больше информации о сагах здесь: https://microservices.io/patterns/data/saga.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...