PAYMENT timeout = 2 минуты STOCK timeout = 30 секунд DELIVERY timeout = 5 минут После 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 #архитектура