Function Composition для serverless-оркестрации в AWS и Azure

Когда микросервисы связаны прямыми вызовами, теряется история выполнения, а сбой одного шага останавливает весь процесс. Мы разрабатываем оркестрацию на базе AWS Step Functions и Azure Durable Functions, чтобы каждый этап был прозрачным и управляемым. Наша команда реализует проект под ключ — от проектирования до поддержки, обеспечивая надёжность и масштабируемость вашего решения.

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Function Composition для serverless-оркестрации в AWS и Azure
Сложный
~5 дней
Часто задаваемые вопросы

Представьте: микросервисная архитектура, где 15 Lambda-функций последовательно обрабатывают заказ — валидация, проверка склада, расчёт доставки, списание оплаты, уведомление. Если связать их прямыми вызовами, история теряется, ошибки трудно локализовать, а при сбое одного шага весь процесс зависает. Для финтех-платформы с нагрузкой 1000 заказов/сек мы решили эту проблему, внедрив оркестрацию через AWS Step Functions. Результат — сокращение времени обработки на 30% и полная прозрачность каждого выполнения. Такие же результаты показывают 30+ проектов, где мы применяли оркестрацию: от e-commerce до FinTech. Средняя экономия на инфраструктуре достигает 40%, а окупаемость внедрения — 3-6 месяцев.

Прямые вызовы одной Lambda из другой — антипаттерн: теряется история выполнения, сложно обрабатывать ошибки, нет видимости прогресса. Оркестрация с помощью Step Functions или Durable Functions решает проблемы N+1 запросов к базам данных, потерю состояния и отсутствие мониторинга. Наши инженеры реализовали более 30 проектов с оркестрацией — от e-commerce до FinTech. Оцените ваш проект за один день — пишите, и мы подготовим коммерческое предложение.

Когда нужна оркестрация вместо прямых вызовов?

Бизнес-процесс состоит из нескольких шагов с состоянием, требуются условия ветвления (if step_A succeeded, then step_B, else step_C), параллельное выполнение нескольких функций с ожиданием результата, долгоживущие процессы (>15 минут для Lambda) или человеческое подтверждение на каком-то шаге (wait for callback). Во всех этих случаях прямые вызовы приводят к спагетти-коду и проблемам с отладкой.

Function Composition как решение проблем serverless-оркестрации

Оркестратор берёт на себя маршрутизацию, повторные попытки и сбор метрик. Вместо десятков вызовов из кода вы описываете workflow декларативно. Это упрощает отладку — каждое выполнение можно проследить шаг за шагом в консоли. При сбое система автоматически повторяет шаг или переходит к компенсирующему действию. По нашим оценкам, внедрение оркестрации снижает затраты на инфраструктуру до 40% за счёт оптимизации вызовов. Сравните: прямое связывание Lambda требует 15 вызовов на заказ с риском таймаутов, оркестратор же выполняет те же шаги с гарантированной обработкой ошибок в 5 раз быстрее.

AWS Step Functions: практический пример

Пример State Machine (ASL)
{ "Comment": "Обработка заказа",
  "StartAt": "ValidateOrder",
  "States": {
    "ValidateOrder": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:us-east-1:123:function:validate-order",
      "Next": "CheckInventory",
      "Retry": [
        {
          "ErrorEquals": ["Lambda.ServiceException"],
          "MaxAttempts": 3
        }
      ],
      "Catch": [
        {
          "ErrorEquals": ["ValidationError"],
          "Next": "NotifyInvalidOrder"
        }
      ]
    },
    "CheckInventory": {
      "Type": "Parallel",
      "Branches": [
        {
          "StartAt": "ReserveItems",
          "States": {
            "ReserveItems": {
              "Type": "Task",
              "Resource": "arn:...:reserve-items",
              "End": true
            }
          }
        },
        {
          "StartAt": "CalculateShipping",
          "States": {
            "CalculateShipping": {
              "Type": "Task",
              "Resource": "arn:...:calc-shipping",
              "End": true
            }
          }
        }
      ],
      "Next": "ProcessPayment"
    },
    "ProcessPayment": {
      "Type": "Task",
      "Resource": "arn:aws:states:::lambda:invoke.waitForTaskToken",
      "Parameters": {
        "FunctionName": "arn:...:process-payment",
        "Payload": {
          "taskToken.$": "$$.Task.Token",
          "orderId.$": "$.orderId"
        }
      },
      "Next": "FulfillOrder",
      "TimeoutSeconds": 300
    },
    "FulfillOrder": {
      "Type": "Task",
      "Resource": "arn:...:fulfill-order",
      "End": true
    },
    "NotifyInvalidOrder": {
      "Type": "Task",
      "Resource": "arn:...:notify-invalid",
      "End": true
    }
  }
}

.waitForTaskToken позволяет Step Functions ждать callback от внешней системы (например, платёжного шлюза) без постоянного опроса. Платёжный шлюз вызывает SendTaskSuccess с токеном, когда транзакция завершена.

Terraform для Step Functions

resource "aws_sfn_state_machine" "order_processing" {
  name = "order-processing"
  role_arn = aws_iam_role.sfn_role.arn
  definition = templatefile("${path.module}/state_machine.json", {
    validate_lambda_arn = aws_lambda_function.validate_order.arn
    reserve_lambda_arn = aws_lambda_function.reserve_items.arn
    payment_lambda_arn = aws_lambda_function.process_payment.arn
    fulfill_lambda_arn = aws_lambda_function.fulfill_order.arn
  })

  logging_configuration {
    log_destination = "${aws_cloudwatch_log_group.sfn.arn}:*"
    include_execution_data = true
    level = "ERROR"
  }

  tracing_configuration {
    enabled = true # X-Ray tracing
  }
}

Сравнение: AWS Step Functions vs Azure Durable Functions

Характеристика AWS Step Functions Azure Durable Functions
Максимальная длительность 1 год Неограниченно (проверки каждые 10 сек)
Визуализация выполнения Встроенная консоль Application Insights
Ценообразование $0.025/1k переходов (Standard) Плата за execution time + storage
Интеграция с языками JSON/ASL C#, Python, JavaScript, F#
Условная компиляция Нет Да (if/else в коде)

Ваш выбор зависит от экосистемы: если вы на AWS — Step Functions, если на Azure — Durable Functions. В случае мультиоблака можно использовать единый оркестратор на базе Temporal или Camunda, но это выходит за рамки serverless.

Azure Durable Functions: альтернатива

.NET / Node.js / Python оркестратор на базе Azure Functions:

import azure.durable_functions as df

def orchestrator_function(context: df.DurableOrchestrationContext):
    parallel_tasks = [
        context.call_activity("ReserveItems", context.get_input()),
        context.call_activity("CalculateShipping", context.get_input())
    ]
    results = yield context.task_all(parallel_tasks)
    approval = yield context.wait_for_external_event("ApprovalReceived")
    if approval:
        return (yield context.call_activity("FulfillOrder", context.get_input()))
    else:
        return (yield context.call_activity("CancelOrder", context.get_input()))

main = df.Orchestrator.create(orchestrator_function)

Durable Functions используют Azure Storage для хранения состояния. Оркестратор может ждать внешнего события неограниченно долго.

Как обрабатывать ошибки в оркестрации?

В распределённых процессах нет встроенных транзакций. Паттерн Saga — компенсирующие действия при отказе:

"ProcessPayment": {
  "Type": "Task",
  "Resource": "...",
  "Catch": [{
    "ErrorEquals": ["PaymentFailed"],
    "Next": "CompensateReservation"
  }]
},
"CompensateReservation": {
  "Type": "Task",
  "Resource": "arn:...:release-reservation",
  "Next": "NotifyPaymentFailed"
}

Каждый шаг, который нужно откатить при ошибке, имеет компенсирующую функцию. Видимость обеспечивается через CloudWatch Metrics и X-Ray для Step Functions, а для Durable Functions — Application Insights.

Express vs Standard Workflows

Standard Express
Длительность До 1 года До 5 минут
Execution history Полная CloudWatch Logs
Цена $0.025/1k transitions $0.00001/state transition
Подходит для Бизнес-процессы High-volume, short workflows

Standard Workflows в 2500 раз дороже Express Workflows за переход, но поддерживают длительные процессы с полным аудитом. Для проектов с нагрузкой более 10 000 вызовов в день выгоднее Express.

Что входит в работу

  • Архитектурная документация с описанием workflow и всех функций.
  • Код оркестратора и лямбда-функций (или Azure Functions) в вашем репозитории.
  • Инфраструктурный код (Terraform / Bicep) для развёртывания.
  • Настроенный мониторинг и алерты (CloudWatch / Application Insights).
  • Доступ к репозиторию и инструкции по развёртыванию.
  • Обучение вашей команды работе с оркестратором.

Процесс работы и сроки

  1. Проектирование state machine + ASL описание — 2–3 дня.
  2. Lambda функции для каждого шага — 3–7 дней.
  3. Step Functions state machine + IAM — 2–3 дня.
  4. Обработка ошибок + компенсации — 2–3 дня.
  5. Мониторинг + алерты + тестирование — 2–3 дня.

Свяжитесь с нами для консультации — закажите реализацию Function Composition под ключ. Пишите, и получите коммерческое предложение с детальным планом в течение одного дня. Наш опыт подтверждают 30+ успешных внедрений в финтехе, e-commerce и логистике. Получите консультацию — просто напишите нам.

Наши компетенции:

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1393
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1368
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1139
  • Разработка веб-сайта для компании ФИКСПЕР
    Разработка веб-сайта для компании ФИКСПЕР
    1060