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?