Пристегнитесь, потому что это не тривиальная проблема.
Если это настоящая микросервисная архитектура, где каждая служба имеет свою собственную выделенную базу данных, то вы, очевидно, не сможете эффективно выполнить транзакцию. Возможно, вы сможете выполнить 2-фазную фиксацию , но у нее есть свои проблемы, особенно с долгоживущими блокировками БД.
Масштабируемым подходом к вашей проблеме является Шаблон распределенной саги :
Реализация каждой бизнес-транзакции, охватывающей несколько сервисов, в виде саги. Сага - это последовательность локальных транзакций. Каждая локальная транзакция обновляет базу данных и публикует сообщение или событие для запуска следующей локальной транзакции в саге. Если локальная транзакция терпит неудачу из-за нарушения бизнес-правила, тогда сага выполняет серию компенсирующих транзакций, которые отменяют изменения, сделанные предыдущими локальными транзакциями.
Я думаю, что вышеизложенное довольно лаконично, поэтому я намеренно отклонюсь от касательной:
Распределенными системами сложно управлять. Убедитесь, что вы не нарушаете YAGNI архитектурой вашей системы. Если возможно, спросите себя, действительно ли вам нужна распределенная архитектура на этом этапе.
Обеспечение согласованности данных в распределенной системе является относительно сложным
Задача, которая в большинстве случаев требует специальной службы координатора, дополнительного кода для управления всем этим и всей сложности, которая сопровождает все это дополнительное оборудование.