We detected you are likely not from a Russian-speaking region. Would you like to switch to the international version of the site?

К списку статей

Сервернаяless‑архитектура: сравнение

Serverless‑архитектура (часто по‑русски говорят «серверлес») — это подход, при котором разработчик фокусируется на логике приложения, а инфраструктуру (прокрутка запросов, масштабирование, отказоустойчивость, управление серверами) берёт на себя платформа. На практике это обычно проявляется в виде функций (FaaS) и событийного обмена (event‑driven), где код запускается по триггерам: HTTP, очереди, триггеры хранилищ, расписания, webhooks и т. п.

Однако «серверлес» — не магия. Нужны архитектурные решения по наблюдаемости, безопасности, управлению данными, требованиям к обработке персональных данных, а также понимание, как считать стоимость и как избегать скрытых ограничений (холодный старт, лимиты времени выполнения, сетевые ограничения).

Ниже — сравнение популярных вариантов и рекомендации, как проектировать serverless для задач в РФ с учётом актуальных требований законодательства.

Базовые элементы serverless

В типовой serverless‑архитектуре встречаются следующие компоненты:

  • Functions (FaaS): короткоживущие обработчики без явного управления серверами.
  • API Gateway / HTTP front: входной слой для HTTP‑запросов и маршрутизации.
  • Event bus / Queue: доставка событий и задач с гарантией повторных попыток.
  • State / Storage: внешнее хранилище (БД, объектное хранилище, кеши).
  • AuthN/AuthZ: токены, ролевые модели, интеграция с провайдерами идентификации.
  • Observability: логи, метрики, трассировка, корреляция запросов.
  • Secrets management: безопасное хранение ключей и параметров.

Ключевые критерии сравнения

При сравнении платформ и подходов serverless важно оценить:

  • Модель исполнения: время выполнения, лимиты памяти/CPU, поддержка слоёв зависимостей.
  • Триггеры: HTTP, очереди, pub/sub, события хранилищ, расписания.
  • Управление секретами и ключами (KMS/серверные хранилища).
  • Сетевая модель: NAT, доступ к ВПН/частным сетям, egress‑контроль.
  • Наблюдаемость: единый формат логов, корреляция, retention.
  • Стоимость: цена запросов + вычисление + хранение + исходящий трафик.
  • Экосистема IaC: Terraform/Serverless Framework/CloudFormation и т. п.
  • Соответствие требованиям РФ: размещение данных/обработки, требования к ПДн, договорные и технические меры.

Сравнение: AWS Lambda, Azure Functions, Google Cloud Functions

Ниже — концептуальное сравнение. Детали конкретных тарифов и лимитов зависят от региона и периода.

1) AWS Lambda

  • Триггеры: API Gateway, SQS, SNS, EventBridge, S3, DynamoDB Streams, CloudWatch Events.
  • Сильные стороны: зрелая экосистема, мощные интеграции с AWS‑сервисами, развитые паттерны event‑driven.
  • Ограничения/риски: холодный старт, ограничения по времени, упаковка зависимостей, отдельная стоимость egress.
  • Безопасность: IAM‑политики, KMS, секреты, VPC‑доступ (с нюансами по NAT).

Для архитектуры в РФ главный практический вопрос — где физически размещаются данные и как вы обеспечиваете требования по обработке информации, включая персональные данные (при наличии). Это уже не «про Lambda», а про организацию процесса и выбор облака/региона/договорной базы.

2) Azure Functions

  • Триггеры: HTTP, Queue Storage, Service Bus, Event Grid, Blob Storage, Timer.
  • Сильные стороны: тесная интеграция с Azure‑сервисами, удобная модель событий (Event Grid).
  • Ограничения/риски: режимы hosting (Consumption/Premium), нюансы по запуску и масштабированию.
  • Безопасность: Managed Identity, Key Vault, доступ к сетям, политики.

Azure‑подход часто удобен, если у компании уже инфраструктура в Azure. Но при наличии требований к локализации данных и контролю обработки следует заранее проверять доступные региональные варианты и технические меры.

3) Google Cloud Functions

  • Триггеры: HTTP, Pub/Sub, Cloud Storage, Firestore/other events (в зависимости от продукта).
  • Сильные стороны: события через Pub/Sub, развитая платформа данных.
  • Ограничения/риски: особенности модели функций (в том числе версия/платформа), стоимость операций и egress.
  • Безопасность: IAM, KMS, контроль сетевого доступа.

Как и в других облаках, соответствие требованиям РФ упирается в размещение данных и регламент обработки. Для serverless важно дополнительно учесть, что «данные» могут возникать в логах/трассировке — и их тоже нужно защищать.

Альтернатива для РФ: self‑managed и «условно serverless»

Во многих проектах (особенно с требованиями к размещению/контролю) выбирают гибрид:

  • Функции на Kubernetes (Knative/подобные): управляемая модель «как serverless», но инфраструктура в вашем контуре или под вашим контролем.
  • Платформы на российских провайдерах (в зависимости от потребностей организации): аналогичная функциональность, но с локализацией и контрактными особенностями.
  • Платформы FaaS/контейнерные задачи: если код можно запускать как контролируемые job‑ы/воркеры.

Этот подход часто лучше стыкуется с практикой комплаенса, но требует квалификации по эксплуатации (сетевой периметр, обновления, политика доступа, резервирование, аудит).

Архитектурные паттерны для serverless

Event‑Driven

Часто лучший выбор — строить систему вокруг событий: «сформировали заказ» → событие → обработчики: расчёт статусов, уведомления, аудит, индексация, отправка в CRM. Это снижает связность и позволяет независимо масштабировать части системы.

Idempotency (повторяемость)

В serverless почти всегда возможны повторы событий: ретраи, дедупликация с задержкой, повторные попытки при ошибках сети. Поэтому обработчики должны быть идемпотентными.

Пример практики: хранить «ключ обработки» (например, message_id) и не выполнять повторно бизнес‑операции.

Outbox / Saga (когда нужна согласованность)

Если бизнес‑транзакции сложные (несколько сервисов), применяют паттерны outbox/saga. В serverless важно избегать «двухфазной» логики в функции; вместо этого — надёжная публикация событий и компенсирующие действия.

Observability: логи, метрики, трассировка

Серверлес скрывает инфраструктуру, поэтому наблюдаемость — критична. Минимальный набор:

  • структурированные логи (JSON),
  • корреляция request_id / trace_id,
  • метрики: количество вызовов, latency, ошибки, throttling,
  • алерты по SLO/SLI.

Отдельно: логирование персональных данных запрещать/минимизировать, маскировать поля и контролировать retention.

Безопасность и соответствие требованиям РФ (ПДн и общие требования)

При наличии персональных данных и иной защищаемой информации вы обязаны соблюдать требования законодательства РФ и локальных нормативных актов, включая обработку ПДн (согласия, политика, правовые основания, меры защиты, требования к локализации/размещению — при применимости), а также требования к обеспечению безопасности информации.

На уровне serverless это означает практические меры:

  • Минимизация данных: не передавать лишние поля в функции и в логи.
  • Шифрование: использовать TLS; шифровать данные в storage и secrets (KMS/аналог).
  • Разграничение доступа: принцип минимальных прав (least privilege) в IAM/ролях.
  • Аудит: логировать доступ к секретам и критическим действиям.
  • Секреты вне кода: KMS/secret manager вместо env‑переменных в явном виде.
  • Технические меры: контроль сетевого доступа, ограничение исходящих соединений (egress), управление версиями зависимостей и обновлениями.

Важно понимать: комплаенс — это не только платформа, но и процесс. Например, если вы записываете входной payload в логи для отладки, но там есть ПДн — это может нарушать требования по обработке ПДн. Поэтому нужно проектировать «безопасный дебаг» с маскированием.

PHP и Python в serverless: практический подход

Для serverless в PHP/Python важно учитывать упаковку зависимостей, старт приложения и модель runtime.

Пример на Python: идемпотентный обработчик

import os
import json
import hashlib

# Пример: функция принимает событие из очереди

def handler(event, context):
    payload = event.get("body") or event
    message_id = payload.get("message_id")
    # ключ идемпотентности
    idem_key = hashlib.sha256(message_id.encode("utf-8")).hexdigest()

    # 1) Проверка идемпотентности (должно быть в БД с уникальным индексом)
    # inserted = db.insert_if_absent(idem_key)
    # if not inserted:
    #     return {"status": "duplicate"}

    # 2) Бизнес‑логика
    # do_business(payload)

    return {"status": "ok"}

Пример на PHP: обработка HTTP-триггера с валидацией

<?php

function handler(array $request): array {
    // request: абстракция для примера
    $method = $request['method'] ?? 'GET';
    if ($method !== 'POST') {
        return ["statusCode" => 405, "body" => json_encode(["error" => "Method not allowed"])];
    }

    $bodyRaw = $request['body'] ?? '';
    $body = json_decode($bodyRaw, true);
    if (!is_array($body)) {
        return ["statusCode" => 400, "body" => json_encode(["error" => "Invalid JSON"])];
    }

    // Важно: не логировать лишние поля (особенно ПДн)
    $userId = $body['user_id'] ?? null;
    $action = $body['action'] ?? null;

    if (empty($userId) || empty($action)) {
        return ["statusCode" => 422, "body" => json_encode(["error" => "Missing fields"])];
    }

    // business logic...

    return ["statusCode" => 200, "body" => json_encode(["ok" => true])];
}

Стоимость: как не получить сюрпризы

В serverless стоимость может расти не только от количества вызовов, но и от факторов:

  • объём вычислений (CPU/memory) и время выполнения;
  • сетевые вызовы (особенно egress);
  • частые холодные старты и неэффективная инициализация зависимостей;
  • ретраи из‑за нестабильности внешних сервисов;
  • неоптимальная работа с файловыми данными (скачивание/перекодирование в каждой функции).

Практика: выносить тяжёлые операции в асинхронные цепочки, кэшировать то, что можно, минимизировать размер деплоя, использовать правильную модель масштабирования и ретраев.

Когда serverless — хороший выбор

  • событийные интеграции и фоновые обработчики (webhook → очередь → функции);
  • периодические задачи (календарные/таймеры);
  • проектирование API с переменной нагрузкой;
  • MVP и быстрое внедрение новых сценариев;
  • системы, где важна быстрая масштабируемость и отсутствие рутины по инфраструктуре.

Когда serverless может быть не лучшим

  • долгие вычисления с высоким временем выполнения (дорого и сложно контролировать);
  • строгие требования к предсказуемой задержке (холодные старты);
  • сложные состояния, требующие «тёплых» сессий;
  • жёсткие требования по сетевой изоляции и сложная корпоративная архитектура без готовности к IaC и управлению доступами.

Архитектурный вывод: что сравнивать на практике

Выбирая между платформами serverless, не ограничивайтесь «какие триггеры есть». Сравнивайте:

  • как достигается идемпотентность и надёжность доставки;
  • насколько удобно обеспечивать аудит и безопасное логирование;
  • какая модель управления секретами и ключами;
  • как контролируется сеть и доступ к внутренним ресурсам;
  • как легко сделать IaC и повторяемые деплои;
  • насколько реально обеспечить требования по ПДн и защищаемой информации именно в вашем контуре (размещение, договоры, меры защиты).

Заключение

Serverless‑архитектура — эффективный инструмент для современного event‑driven подхода, где скорость разработки и масштабирование часто выигрывают у традиционных серверов. Но успех зависит от архитектурной дисциплины: идемпотентность, наблюдаемость, безопасность, контроль секретов и аккуратная работа с данными (включая ПДн).

Если задача требует комплаенса в соответствии с законодательством РФ, особенно важно заранее спроектировать: где и как хранятся/обрабатываются данные, как устроены меры защиты, как организован аудит и что попадает в логи/трассировки.

Команда РыбинскЛАБ поможет спроектировать и реализовать serverless‑архитектуру (PHP/Python), подобрать платформу и обеспечить соответствие требованиям по безопасности и обработке данных, включая практики безопасного деплоя и наблюдаемости.

Услуги РыбинскЛАБ: разработка и внедрение серверлес‑решений, архитектурный консалтинг, интеграции, построение event‑driven контуров и сопровождение production‑систем.

Материал подготовлен и отредактирован для практического применения. Перед внедрением в продакшен проверьте код и команды на своём окружении.

Поделиться материалом

Нужна сложная backend-разработка?

Проектирование архитектуры, PHP/Python backend, интеграции API, боты, автоматизация и оптимизация существующих систем.

Обсудить проект
Поддержать проект