Мне нужно обрабатывать распределенные транзакции в микросервисной архитектуре. Теоретически, один из лучших способов сделать это - использовать шаблон Saga Orchestration. Проблема в том, что я не смог найти подробной информации о том, как обеспечить масштабируемость.
Воспользуемся примером ниже. CreateOrderSaga может быть много, если у меня несколько OrderService.API, и это будет так. Потому что у меня может быть несколько OrderService.API. Тогда, если CreateOrderSaga является своего рода конечным автоматом, значит ли это, что он должен обрабатывать все шаги в нем самостоятельно или другие координаторы могут выполнять его работу?
Тогда что, если этот один API выйдет из строя во время выполнения процесса саги, могут ли другие координаторы саг продолжать работать с тем же состоянием, в котором остался аварийный API? Как лучше всего справиться с этой ситуацией? Как может помочь хранение событий?
Позвольте мне объяснить подробнее
Coordinator1 в одном из Order.API запускает CreateOrderSaga
CreateOrderSaga в Coordinator1 создает заказ, который находится в состоянии ожидания.
Потом по какой-то причине вылетел Coordinator1. (возможно, электричество пропало) заказ остался в состоянии ожидания и никого не интересует. Кто-то должен продолжить его обработку или пометить его как неудачный (кто несет ответственность). Возможно, также необходимы некоторые компенсационные транзакции.
Так можно ли заставить координатора саги запускать процесс, но другие также могут продолжать его обрабатывать?
Как можно увеличить масштаб координатора саг?
Решение:
Я выбрал Masstransit для управления распределенными транзакциями