System Design Space
Граф знанийНастройки

Обновлено: 15 марта 2026 г. в 19:32

Workflow Orchestration: Temporal, Cadence, Step Functions

medium

Как проектировать долгоживущие бизнес-процессы в микросервисах: durable execution, retries/compensation, stateful workflows и выбор между Temporal, Cadence и AWS Step Functions.

Эта глава темы 9 фокусируется на оркестрации workflow, compensation и идемпотентной обработке шагов.

В реальном проектировании систем материал помогает принимать решения через измеримые ограничения: latency budget, blast radius, устойчивость контрактов и стоимость эксплуатации интеграции.

Для system design interview глава дает структурный язык объяснения: почему выбран подход, какие альтернативы рассматривались и какие operational риски надо фиксировать заранее.

Практическая польза главы

Практика проектирования

Проектируйте long-running процессы с явными шагами компенсации и ownership состояния.

Качество решений

Сравнивайте orchestration и choreography по прозрачноcти управления и сложности эволюции.

Interview articulation

На интервью структурируйте saga-кейс через happy path, failure path и recovery policy.

Failure framing

Задавайте timeout/retry limits, чтобы workflow не зависали и не дублировали действия.

Primary source

Temporal Workflows

Базовая модель durable execution и workflow semantics.

Открыть документацию

Workflow orchestration - это отдельный архитектурный слой для управления долгоживущими бизнес-процессами между микросервисами. Он централизует состояние процесса, retry/timeout-политики, компенсации и операционный контроль исполнения.

Сигналы, что оркестрация действительно нужна

Процесс длится минуты, часы или дни

Когда бизнес-флоу выходит за пределы одного HTTP-запроса, нужен durable state и возможность безопасно продолжить выполнение после сбоя.

Есть компенсации и rollback-сценарии

Если шаги затрагивают несколько сервисов, оркестратор упрощает реализацию Saga-подхода: явные компенсации, порядок откатов и прозрачная история действий.

Нужны стандартизированные retry/timeout-политики

Единые правила повторов, backoff и дедлайнов уменьшают дублирование инфраструктурного кода в каждом сервисе.

Важен операционный контроль

Нужны replay, ручной restart шага, pause/resume, аудит и метрики по состояниям workflow в одном контуре наблюдаемости.

Temporal, Cadence, Step Functions: практическое сравнение

ПлатформаМодель состоянияМодель разработкиRetry/timeoutTrade-offs
TemporalDurable execution + event historyCode-first workflow в SDK (Go/Java/TS/...)Политики retry на activity/workflow + timersНужна deterministic дисциплина и отдельный operational контур.
CadenceDurable execution (архитектурно близко к Temporal)Code-first workflow в SDKActivity retry policies и контроль через domain settingsЧаще выбирается в существующих инсталляциях и миграционных сценариях.
AWS Step FunctionsManaged state machine (ASL, визуальные состояния)Декларативные state-машины + AWS-интеграцииRetry/Catch на уровне состоянийСильная интеграция с AWS, но выше риск vendor lock-in.

Эталонный флоу с компенсациями

Типовой заказной процесс: резервируем товар, списываем оплату, создаём отгрузку, отправляем подтверждение. При сбое выполняем компенсации в обратном порядке.

Эталонный процесс оркестрации

Happy path и компенсации Saga в одном визуальном флоу.

Success pathCompensation pathFailure in createShipmentЗаказ полученworkflow startedreserveInventory()резерв товараchargePayment()списание оплатыcreateShipment()создание отгрузкиsendConfirmation()подтверждение клиентуCompletedworkflow doneОшибка шагаshipment creation failedrefundPayment()возврат оплатыreleaseInventory()освобождение резерваRolled Backsaga compensated
Успешный путьКомпенсацииТочка ошибки
export async function OrderWorkflow(input: OrderInput): Promise<void> {
  const reservation = await reserveInventory(input.orderId, input.items);

  try {
    await chargePayment(input.orderId, input.amount);
    await createShipment(input.orderId, reservation.warehouseId);
    await sendConfirmation(input.orderId);
  } catch (error) {
    await refundPayment(input.orderId);
    await releaseInventory(input.orderId);
    throw error;
  }
}

Контракт выполнения и эксплуатационный чеклист

Execution contract

  • Идемпотентность каждого activity: повторный запуск шага не должен нарушать бизнес-состояние.
  • Явные timeout/deadline для каждого внешнего вызова и для workflow целиком.
  • Компенсации должны быть бизнес-эквивалентны действию, а не только техническим rollback.
  • Версионирование workflow-логики: старые инстансы продолжают работать по старым правилам.
  • Каждое состояние workflow должно быть наблюдаемым через метрики и трассировку.

Reliability checklist

  • У каждого workflow есть стабильный business key (например, `orderId`) и dedup policy.
  • Activity не содержит скрытых nondeterministic вызовов без обертки в side-effect primitive.
  • Ошибки разделены на retryable и non-retryable с разной политикой реакции.
  • Ручные операции (`resume`, `terminate`, `retry from failed step`) описаны как runbook.
  • SLO оркестрации измеряется отдельно: start latency, completion latency, failure rate.

Риски реализации

Смешивание бизнес-логики и transport-деталей

Держите workflow как слой координации, а доменные решения и внешние интеграции выносите в отдельные activity/handler слои.

Неявные компенсации

Определяйте компенсации рядом с каждым шагом и тестируйте их отдельно в fault-инъекциях.

Один гигантский workflow

Декомпозируйте флоу на под-процессы с чёткими входами/выходами и bounded context ownership.

Недостаточная observability

Публикуйте метрики по статусам шагов, retry depth, queue lag и времени до завершения.

References

Связанные главы

Чтобы отмечать прохождение, включи трекинг в Настройки

System Design Space

© 2026 Александр Поломодов