DevOps

Serverless: Lambda, Cloud Functions

iRobot обрабатывает данные с миллионов Roomba роботов через Lambda: каждый робот отправляет события, Lambda обрабатывает их параллельно без управления серверами. Стоимость - $0 когда роботы спят (ночью). Serverless переосмысливает экономику инфраструктуры: платишь только за работу, а не за ожидание.

  • **Coca-Cola** автоматизировал вендинговые машины через Lambda + IoT Core: каждая транзакция = Lambda вызов; 65% экономия на инфраструктуре по сравнению с EC2 серверами
  • **Capital One** построил всю банковскую платформу на Lambda - 1000+ Lambda функций, полностью serverless backend; cold start решён через Provisioned Concurrency для user-facing API
  • **Nordstrom** использует Step Functions для обработки заказов: ValidateOrder → ChargeCard → UpdateInventory → SendConfirmation параллельно - полная видимость каждого заказа в консоли

Cold Start

Cold start - задержка первого вызова Lambda при инициализации нового execution environment. Слои: JVM/Node.js/Python bootstrap (100ms-3s) + код инициализации (загрузка SDK, подключение к БД). Происходит при первом вызове, после периода idle (~5-15 минут простоя), при масштабировании вверх.

Средние cold start времена: Python 3.11 = 100-300ms, Node.js 20 = 100-500ms, Go = 50-200ms, Java 21 = 1-4s (без SnapStart). Решения: Lambda SnapStart для Java (снимок прогретой JVM), Provisioned Concurrency (N всегда прогретых функций, $0.015/час за GB-hour), минимизация deployment package, ARM64 (быстрее на 10-20%).

Что происходит когда Lambda не вызывается 15 минут?

Event-Driven Architecture

Event-driven архитектура с Lambda: компоненты реагируют на события вместо прямых вызовов. Источники: API Gateway (HTTP), S3 (file upload), SQS (queue), SNS (pub/sub), EventBridge (scheduled + cross-service events), DynamoDB Streams, Kinesis. Каждый источник имеет особенности масштабирования и retry behaviour.

SQS + Lambda: Lambda polling-ая очередь с batch size до 10000 сообщений. При ошибке: сообщение возвращается в очередь (retry), после N попыток - в Dead Letter Queue (DLQ). Visibility timeout SQS должен быть больше максимального timeout Lambda. Kinesis: Lambda получает shards параллельно, порядок гарантирован внутри shard.

Что такое Dead Letter Queue (DLQ) в контексте SQS + Lambda?

Step Functions

AWS Step Functions - оркестратор для сложных workflow из Lambda функций. Определяет state machine в JSON/YAML: последовательные шаги, параллельные ветки, retry с backoff, catch для ошибок. Позволяет видеть текущий шаг каждого workflow в консоли - незаменимо для long-running бизнес-процессов.

Standard Workflows: audit trail каждого шага, до 1 года выполнения, $0.025 за 1000 state transitions. Express Workflows: до 5 минут, высокий throughput, дешевле для частых короткоживущих процессов. Интеграции без Lambda: Step Functions может напрямую вызывать DynamoDB, SQS, SNS, ECS задачи без промежуточных Lambda функций (SDK integrations).

В чём преимущество Step Functions перед ручной координацией Lambda через SQS?

Production Ограничения

Ключевые лимиты Lambda которые влияют на архитектурные решения: timeout 15 минут (решение: Step Functions или ECS для long-running задач), payload 6MB sync / 256KB SQS message, concurrent executions 1000 по умолчанию (увеличивается по запросу), ephemeral storage /tmp 512MB-10GB, deployment package 250MB unzipped.

Lambda@Edge и CloudFront Functions - для edge computing: Lambda@Edge (до 128MB, 30s) выполняется в CloudFront регионах, CloudFront Functions (2MB, 1ms!) - ultra-light JavaScript для URL rewrites, A/B тестирования на edge. Разница: CloudFront Functions дешевле (1/6 цены) и быстрее, но без доступа к внешним сервисам.

Serverless всегда дешевле традиционных серверов

Lambda дешевле при непредсказуемой нагрузке с длительными простоями. При постоянной высокой нагрузке ECS Fargate или EC2 Reserved Instances дешевле в 3-10x. Расчёт: Lambda при 100% utilization = $0.0000166667 * 730часов * 3600 = ~$43/мес за 1 vCPU; Fargate = $29/мес за 1 vCPU

Lambda billing per-ms выгодна при idle времени; при постоянной нагрузке idle нет, и overhead per-request billing становится значительным

Lambda таймаут 15 минут превышен. Какое решение правильное?

Ключевые идеи

  • **Cold start** - задержка 100ms-5s при первом вызове; решается Provisioned Concurrency для user-facing, SnapStart для Java; инициализация SDK вне handler обязательна
  • **Event-driven** - Lambda реагирует на S3, SQS, EventBridge, DynamoDB Streams; SQS+Lambda+DLQ = надёжная очередь с retry и анализом failures
  • **Лимиты** - 15 минут таймаут, 1000 concurrent; Step Functions для workflow, ECS для long-running; Lambda дешевле EC2 только при непостоянной нагрузке

Связанные темы

Serverless является частью более широкой event-driven экосистемы:

  • AWS: основные сервисы — Lambda работает в связке с S3, SQS, RDS через VPC и API Gateway - все базовые AWS сервисы
  • CDN и Edge Computing — Lambda@Edge и CloudFront Functions выполняют код на edge nodes Cloudflare/CloudFront ближе к пользователю

Вопросы для размышления

  • Если API получает 1000 RPS постоянно - Lambda или ECS Fargate? Проведи расчёт стоимости.
  • Как организовать передачу 1GB файла между двумя Lambda функциями если payload limit 6MB?
  • При каких условиях Step Functions Standard Workflows оправдывают стоимость $0.025/1000 transitions?

Связанные уроки

  • os-19-containers
  • net-64-api-gateway
Serverless: Lambda, Cloud Functions

0

1

Войти