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