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

Обновлено: 25 марта 2026 г. в 00:30

Serverless: архитектура и паттерны использования

medium

Как проектировать serverless-системы: event-driven flow, cold starts, state management, идемпотентность и cost/latency trade-offs.

Serverless полезен не обещанием «без серверов», а тем, что заново делит ответственность между кодом приложения и платформой выполнения.

Для реальных проектных решений глава помогает увидеть, как event-driven flow, явное управление состоянием, идемпотентность, очереди и оркестрация должны соотноситься с latency budget, burst-нагрузкой и ограничениями самой платформы.

Для интервью и архитектурных разборов она полезна тем, что помогает обсуждать serverless через cold starts, vendor APIs, observability и пределы автоматизации, а не как универсально более простой путь.

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

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

Стройте event-driven сценарии с явным state management и контролем idempotent processing.

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

Сопоставляйте функции, оркестрацию и очереди с latency budget и burst-нагрузкой.

Interview articulation

Поясняйте, как выбираете serverless boundary и где оставляете stateful компоненты.

Trade-off framing

Проговаривайте ограничения cold start, vendor APIs и observability в распределенных event-пайплайнах.

Контекст

Cloud Native Overview

Serverless - это operating-модель внутри cloud-native, а не отдельная архитектурная парадигма.

Открыть главу

Serverless patterns ускоряют delivery и снижают операционный порог входа, но переносят сложность в event contracts, observability и cost governance. Надежный дизайн строится вокруг асинхронности, идемпотентности и управляемых retry-политик.

Когда serverless уместен

  • Нерегулярная или burst-нагрузка, где выгодна модель pay-per-use.
  • Асинхронные workflows и event-driven интеграция (queue, broker, webhook, stream).
  • Быстрый запуск продукта без отдельной команды эксплуатации платформы на старте.
  • Автоматизация around storage, messaging и schedule-triggered jobs.
  • Сценарии с независимым масштабированием маленьких bounded-capability функций.

Практические примеры применения

Обработка загруженных изображений

Trigger: S3/Object Storage event

Flow: upload -> resize -> moderation -> thumbnail publish

Идеально для burst-пиков: параллелизм высокий, вычисления короткие, состояние внешнее.

Webhook ingestion для платежей

Trigger: HTTP webhook + queue

Flow: ingest -> verify signature -> enqueue -> idempotent handler -> ledger update

Serverless упрощает горизонтальное масштабирование входящего потока и retry через DLQ.

Ночные reconciliation задачи

Trigger: Cron / scheduler

Flow: schedule -> batch fan-out -> compare states -> report

Позволяет запускать тяжелую логику только по расписанию, не держа постоянный runtime.

Event-driven нотификации

Trigger: Broker/topic events

Flow: domain event -> rules evaluation -> channel adapter (email/push/sms)

Удобно разделять каналы доставки на независимые функции с отдельным scaling profile.

Популярные serverless платформы

Managed (облако провайдера)

  • AWS Lambda - Самая зрелая экосистема around triggers и интеграция с AWS managed сервисами.
  • Google Cloud Run / Cloud Functions - Сильная контейнерная модель и хороший баланс между functions и service runtime.
  • Azure Functions - Плотная интеграция с Azure Event Grid, Service Bus и enterprise security-контуром.
  • Cloudflare Workers - Edge-first runtime для ultra-low-latency сценариев и API at the edge.
  • Vercel Functions - Популярный выбор для frontend-heavy продуктов и быстрых BFF/edge API кейсов.

Self-hosted / in-house

  • Knative - Kubernetes-native serverless с Serving/Eventing и scale-to-zero.
  • OpenFaaS - Простой фреймворк для запуска функций в Kubernetes или on-prem кластерах.
  • Apache OpenWhisk - Open-source FaaS платформа с action-триггерами и rule-based orchestration.
  • Fission - Kubernetes-based FaaS с focus на fast cold-start и developer workflow.
  • Nuclio - Высокопроизводительный runtime, часто используется в data/ML pipeline сценариях.

Ключевые паттерны

Async first

Отделяйте прием запросов от тяжелой обработки через queue/topic, чтобы гасить пики и контролировать backpressure.

Idempotent handlers

Каждый handler должен безопасно обрабатывать повторные события: at-least-once delivery в serverless средах скорее правило, чем исключение.

Function-per-capability

Декомпозируйте по capability, а не в single giant function: это упрощает rollout, testability и ownership команд.

State externalization

Критичное состояние храните во внешних managed хранилищах с версионированием схем и явными контрактами.

Retry budget + DLQ

Ограничивайте retry policy бюджетом и проектируйте DLQ/parking lot с четкими операционными runbooks.

Архитектура

Well-Architected Framework: AWS, Azure, GCP

Cost/reliability/security pillars помогают оценивать serverless-решения системно.

Открыть главу

High-level архитектура serverless платформы

Serverless Platform: High-Level Architecture

managed cloud platform vs in-house Knative-like platform

Ingress & Triggers

API Gateway
HTTP ingress / auth
Event Bus
pub/sub triggers
Scheduler
cron/time triggers

Execution Plane

Function Runtime
functions / handlers
Workflow Engine
saga / step flows
Queue + DLQ
buffer / retries

Platform Services

State Storage
DB / object storage
Observability
logs / metrics / traces
IAM & Secrets
identity / keys / policy

Managed serverless платформа

Провайдер управляет control plane, autoscaling и failover, а команда фокусируется на коде функций, event contracts и product-логике.

Быстрый старт и минимальный ops-overhead.
Ограниченный контроль над runtime-инternals и сетевым контуром.
Нужен строгий FinOps-контроль при росте стабильной нагрузки.

In-house reference

Knative Docs

Официальная документация по Serving/Eventing и deployment-паттернам для собственного serverless контура.

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

Пример in-house: Knative (или аналог) на Kubernetes

Step 1

Ingress + trigger routing

Входящие HTTP/events проходят через ingress и направляются в Knative Serving/Eventing по правилам маршрутизации.

Step 2

Revision-based execution

Каждый deploy создает новую revision; трафик переключается постепенно (blue/green or canary).

Step 3

Autoscaling до нуля

KPA/KEDA масштабируют workload от zero до пикового значения, управляя latency/cost trade-off.

Step 4

Event backbone

Broker (Kafka/NATS/PubSub-совместимый слой) обеспечивает fan-out, retries и изоляцию потребителей.

Step 5

Policy + observability

RBAC, secret management, OPA-политики и OTel/Prometheus нужны как baseline для production readiness.

In-house serverless оправдан, когда требования к изоляции, compliance и контролю runtime перевешивают стоимость собственной platform-команды.

FinOps

Cost Optimization & FinOps

Экономика serverless должна оцениваться по фактическому production-профилю, а не по гипотезам старта.

Открыть главу

Риски и как их закрывать

Cold starts

Планируйте latency budget, используйте provisioned concurrency/warmer-подходы и минимизируйте init path.

Hidden coupling через события

Вводите event contracts, schema versioning и end-to-end observability по pipeline.

Timeout и retry storms

Используйте explicit timeouts, DLQ/retry policy и ограничение retry budget на уровне consumer.

Рост стоимости при постоянной высокой нагрузке

Сравнивайте unit economics serverless vs containers/VM на реальном production-профиле, а не по synthetic бенчмаркам.

Практический чеклист

  • Определены latency/SLO границы отдельно для sync API и async processing.
  • Все handlers идемпотентны и поддерживают replay без дублирования побочных эффектов.
  • Есть DLQ/parking lot и runbook для обработки плохих/зависших сообщений.
  • Трассировка покрывает весь путь API -> broker/queue -> function -> storage.
  • Модель затрат пересчитывается регулярно на фактическом профиле нагрузки.

Частый anti-pattern: перенос синхронного монолита в single function без декомпозиции и без queue-based backpressure.

References

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

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