Продвинутый
Какие проблемы возникают при реализации компенсирующих транзакций в паттерне Saga?
Паттерн Saga откатывает распределенную транзакцию, вызывая компенсирующие действия. Но это не так просто, как SQL ROLLBACK.
Проблемы:
1. Отсутствие изоляции: Пока Сага не завершилась, другие транзакции могут прочитать промежуточные (грязные) данные. Пример: Сага начислила бонусы, юзер успел их потратить, а потом Сага упала и попыталась откатить бонусы, но баланс уже ушел в минус.
2. Сбой самой компенсации: Что делать, если компенсирующая транзакция (возврат денег) упала из-за ошибки сети? Решение: Компенсации обязаны быть идемпотентными и ретраиться до бесконечности (пока не пройдут успешно).