После timeout Orchestrator уже решает: retry
проверить статус
запустить компенсацию
отправить в manual processing Observability здесь особенно важна Для Saga недостаточно логов вида: Something went wrong Нужны идентификаторы: sagaId orderId commandId correlationId Чтобы в логах можно было собрать всю цепочку: SAGA-5001
CreatePayment PaymentSucceeded ReserveStock StockReservationFailed RefundPayment PaymentRefunded CancelOrder SagaCompensated Полезны и метрики: saga_started
saga_completed
saga_compensated
saga_failed
saga_stuck
saga_duration
retry_count Если: saga_stuck > 0 это уже повод посмотреть, где застряли процессы. Какие плюсы у Saga Orchestration Главные: процесс виден в одном месте
понятно текущее состояние
проще управлять retry
проще делать компенсации
легче мониторить
удобно работать со сложными ветвлениями Для длинных бизнес-процессов это большой плюс. Какие минусы Первый - появляется еще один компонент. Orchestrator тоже нужно: разрабатывать тестировать масштабировать мониторить Второй - он может стать слишком большим. Если через него проходят вообще все процессы компании: Order Payment Delivery Refund Loyalty Registration Documents Notifications рано или поздно получится: God Orchestrator который знает слишком много. Это уже сильная связанность. Поэтому хороший Orchestrator обычно отвечает за один конкретный бизнес-процесс. Например: OrderSagaOrchestrator а не: EverythingOrchestrator Если совсем коротко Saga Orchestration выглядит так: Orchestrator / | / | v v v Payment Warehouse Delivery Он: знает последовательность шагов
хранит состояние Saga
отправляет команды
получает результаты
делает retry
запускает компенсации При этом каждый сервис: сам владеет своей БД
сам выполняет свою бизнес-логику
сам отвечает за локальную транзакцию И главная мысль здесь такая: Orchestrator не делает работу за сервисы. Он управляет тем, в каком порядке эта работа должна происходить. В следующем посте разберем второй вариант Saga - Choreography. Там центрального Orchestrator вообще не будет. Сервисы будут общаться через события и сами запускать следующий шаг процесса. #микросервисы #saga #архитектура