Продвинутый
Как решить проблему распределенных транзакций в микросервисах?
Так как в микросервисах у каждого сервиса своя БД, мы не можем сделать классический SQL COMMIT сразу для трех баз.
Решение: Паттерн Saga (Сага)
Глобальная бизнес-транзакция разбивается на цепочку локальных транзакций.
1. Сервис А делает свою часть и кидает событие.
2. Сервис Б делает свою часть.
3. Если Сервис В падает с ошибкой (например, нет товара на складе), запускается обратный процесс — Компенсирующие транзакции.
4. Сервис Б и Сервис А получают команду отменить свои действия (вернуть деньги, отменить бронь), возвращая систему в исходное консистентное состояние.