Как разрешить проблему рассинхронизации данных в микросервисной архитектуре?
существует сервис А с локальной базой данных A' - сервис пользователей
существует сервис B с локальной базой данных B' - сервис аватарок пользователей
бизнес-логика следующая:
- в сервисе A, в бд A', создается новый пользователь
- после успешного создания пользователя, получаем его id
- в сервисе B создаем, в бд B', создаем аватарку, привязывая id пользователя к ней
при хорошем стечении обстоятельств все хорошо. но могут возникать следующие случаи:
1.
- в A -> A' создается запись, получаем id
- запрос в сервис B не состоялся - сервис B возвращает 500 ошибку
2.
- в A -> A' создается запись, получаем id
- делаем запрос в сервис B
- B не может записать данные в B' - база данных остановлена
3.
- в A -> A' создается запись, получаем id
- сервис A аварийно завершил работу, и не успел обратиться в сервис B
по итогу бизнес-логика не завершена полностью. A -> A' содержит пользователя, но в B -> B' для него нет аватарки.
в реальных же условиях, число сервисов может достигать около 20 штук, и бизнес-операции могут затрагивать, например, 5 сервисов сразу, а число вариантов таких операций может быть много.
как решить проблему рассинхронизации данных в микросервисной архитектуре?