Микросервисная архитектура Откат базы данных - PullRequest
1 голос
/ 25 марта 2020

У меня микросервисная архитектура с несколькими службами, каждая из которых содержит свою собственную базу данных, и шлюз, который рассматривается как бизнес-логика c.

Шлюз:

  • Обрабатывает логи c
  • Вызывает сервисы

Сервис 1:

  • Хранит данные, относящиеся к сервису
  • Имеет собственную базу данных

Сервис 2:

  • Хранит данные, относящиеся к сервису
  • Имеет собственную базу данных

Так, например, Шлюз вызывает Сервис 1, чтобы вставить некоторые данные. Затем он вызывает службу 2, чтобы также вставить некоторые данные.

Теперь проблема: что, если вызов службы 2 завершится неудачно, как мне отменить вставку в службу 1? Я знаю, что могу вызвать метод http://.../delete, но это не может быть лучшим решением. Так какой же лучший способ отменить изменения?

1 Ответ

1 голос
/ 25 марта 2020

Учитывая очень специфические c детали вашей архитектуры, прямым ответом будет распределенное управление транзакциями. Но это было бы немного сложнее не с точки зрения реализации, а с точки зрения обслуживания, производительности и т. Д. 1012 *.


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

  • Вы можете разделить базу данных между микросервисами, что облегчит обработку транзакций.
  • Вы можете ввести механизм связи между микросервисами, например Apache Кафка (RabbitMQ или Hazelcast экономически эффективны).
...