spinny:~/writing $ less serverless-aws-lambda-vercel-cloudflare.md
12Serverless вычисления позволяют запускать код без управления серверами. Вы пишете функции, разворачиваете их, а платформа обеспечивает масштабирование, доступность и инфраструктуру. В 2026 году три платформы доминируют в мире serverless: **AWS Lambda**, **Vercel Serverless Functions** и **Cloudflare Workers**. У каждой свои сильные стороны и компромиссы.34В этой статье мы сравниваем их с реальными примерами, соображениями по производительности и анализом цен.56## Как работает Serverless78```mermaid9graph LR10 User -- "HTTP Request" --> Gateway[API Gateway / Edge]11 Gateway -- "Invoke" --> Function[Serverless Function]12 Function -- "Response" --> User13 Function -- "Read/Write" --> DB[(Database)]14```1516Вы разворачиваете функцию. Когда поступает запрос, платформа:171. Запускает среду выполнения (или повторно использует уже прогретую)182. Выполняет вашу функцию193. Возвращает ответ204. Масштабируется до нуля в режиме простоя (вы не платите за время простоя)2122## Обзор платформ2324### AWS Lambda2526Оригинальная serverless платформа (запущена в 2014). Самая зрелая и функциональная, с глубокой интеграцией в экосистему AWS.2728```javascript29// AWS Lambda handler30export const handler = async (event) => {31 const body = JSON.parse(event.body);3233 const result = await processData(body);3435 return {36 statusCode: 200,37 headers: { 'Content-Type': 'application/json' },38 body: JSON.stringify(result),39 };40};41```4243### Vercel Serverless Functions4445Тесно интегрирован с Next.js и рабочим процессом развертывания фронтенда. Функции разворачиваются вместе с вашим фронтендом без конфигурации.4647```typescript48// app/api/hello/route.ts (Next.js App Router)49import { NextResponse } from 'next/server';5051export async function GET(request: Request) {52 const { searchParams } = new URL(request.url);53 const name = searchParams.get('name') || 'World';5455 return NextResponse.json({ message: `Hello, ${name}!` });56}57```5859### Cloudflare Workers6061Работает на пограничной сети Cloudflare в более чем 300 городах по всему миру. Использует движок V8 (такой же, как в Chrome) вместо Node.js, что означает чрезвычайно быстрые холодные старты.6263```javascript64// Cloudflare Worker65export default {66 async fetch(request, env) {67 const url = new URL(request.url);68 const name = url.searchParams.get('name') || 'World';6970 return new Response(71 JSON.stringify({ message: `Hello, ${name}!` }),72 { headers: { 'Content-Type': 'application/json' } }73 );74 },75};76```7778## Сравнение возможностей7980| Функция | AWS Lambda | Vercel Functions | Cloudflare Workers |81|---------|-----------|-----------------|-------------------|82| **Среда выполнения** | Node.js, Python, Go, Rust, Java, .NET | Node.js, Python, Go, Ruby | V8 Isolates (JS/TS, Rust via WASM) |83| **Макс. время выполнения** | 15 минут | 60с (Hobby), 300с (Pro) | 30с (бесплатно), 15мин (платно) |84| **Память** | 128MB - 10GB | 1024MB - 3008MB | 128MB |85| **Холодный старт** | 100-500мс | 100-300мс | < 5мс |86| **Место развертывания** | Один регион (или мульти с усилиями) | Несколько регионов | 300+ пограничных точек |87| **Макс. полезная нагрузка** | 6MB (синхронно), 256KB (асинхронно) | 4.5MB | 100MB |88| **Встроенное хранилище** | Нет (используйте DynamoDB, S3) | Нет (используйте внешнюю БД) | KV, D1 (SQLite), R2 (совместимо с S3) |89| **Модель ценообразования** | За запрос + длительность | Включено в план | За запрос + длительность |90| **Бесплатный уровень** | 1M запросов/месяц | 100K/месяц (Hobby) | 100K запросов/день |9192## Холодные старты9394Холодный старт - это время, необходимое для инициализации нового экземпляра функции. Это главная проблема производительности в serverless.9596```mermaid97graph LR98 subgraph "Cold Start"99 A[Request] --> B[Provision Environment]100 B --> C[Load Code]101 C --> D[Initialize Runtime]102 D --> E[Execute Function]103 end104105 subgraph "Warm Invocation"106 F[Request] --> G[Execute Function]107 end108```109110| Платформа | Типичный холодный старт | Почему |111|----------|-------------------|-----|112| **Cloudflare Workers** | < 5мс | Изоляты V8, полная среда выполнения не нужна |113| **Vercel Functions** | 100-300мс | Среда Node.js на границе или в регионе |114| **AWS Lambda** | 100-500мс | Полная инициализация контейнера |115| **AWS Lambda (Java)** | 1-5 секунд | Накладные расходы на запуск JVM |116117Cloudflare Workers побеждает в холодных стартах с огромным отрывом, потому что использует изоляты V8 вместо контейнеров.118119## Сравнение цен120121### Бесплатный уровень122123| Платформа | Бесплатные запросы | Бесплатные вычисления |124|----------|--------------|--------------|125| **AWS Lambda** | 1M/месяц | 400 000 ГБ-секунд |126| **Vercel** | 100K/месяц | Включено в план Hobby |127| **Cloudflare Workers** | 100K/день (~3M/месяц) | 10мс CPU за вызов |128129### В масштабе (10M запросов/месяц, средняя длительность 50мс)130131| Платформа | Ориентировочная месячная стоимость |132|----------|----------------------|133| **AWS Lambda** | ~$2,50 (запросы) + ~$4,15 (вычисления) = **~$6,65** |134| **Vercel** | **$20/месяц** (план Pro, включает функции) |135| **Cloudflare Workers** | **$5/месяц** (платный план, включает 10M запросов) |136137Для большинства сценариев использования Cloudflare Workers самый дешевый. Ценообразование Vercel простое, но включает всю платформу (хостинг, CDN, аналитику). У AWS Lambda самое детализированное ценообразование.138139## Реальные сценарии использования140141### AWS Lambda: лучше всего для142143- **Сложных бэкенд-процессов** - step functions, событийно-управляемые архитектуры144- **Интеграции с сервисами AWS** - триггеры S3, потоки DynamoDB, очереди SQS145- **Длительных задач** - до 15 минут времени выполнения146- **Мультиязычных команд** - поддерживает наибольший набор сред выполнения147148```mermaid149graph TD150 S3[S3 Upload] --> Lambda1[Process Image]151 Lambda1 --> SQS[SQS Queue]152 SQS --> Lambda2[Generate Thumbnails]153 Lambda2 --> DDB[DynamoDB]154 DDB --> Lambda3[Send Notification]155 Lambda3 --> SNS[SNS / Email]156```157158### Vercel Functions: лучше всего для159160- **Приложений Next.js** - API-маршруты без конфигурации161- **Фронтенд-ориентированных команд** - развертывание фронтенда и бэкенда вместе162- **Быстрого прототипирования** - git push для развертывания163- **Архитектур Jamstack** - статический фронтенд + serverless API164165```typescript166// app/api/subscribe/route.ts167import { NextResponse } from 'next/server';168169export async function POST(request: Request) {170 const { email } = await request.json();171172 // Validate173 if (!email || !email.includes('@')) {174 return NextResponse.json(175 { error: 'Invalid email' },176 { status: 400 }177 );178 }179180 // Save to database181 await db.subscribers.create({ email });182183 return NextResponse.json({ success: true });184}185```186187### Cloudflare Workers: лучше всего для188189- **API с низкой задержкой** - код работает в 300+ точках по всему миру190- **Пограничных вычислений** - преобразование ответов, A/B тестирование, персонализация191- **Высоконагруженных API** - самый дешевый в масштабе с щедрым бесплатным уровнем192- **Глобальных приложений** - данные рядом с пользователями с KV и D1193194```javascript195// Edge-side A/B test196export default {197 async fetch(request, env) {198 const url = new URL(request.url);199200 // Assign user to variant201 const cookie = request.headers.get('Cookie') || '';202 let variant = cookie.includes('ab=b') ? 'b' : 'a';203204 if (!cookie.includes('ab=')) {205 variant = Math.random() < 0.5 ? 'a' : 'b';206 }207208 // Fetch the appropriate version209 const response = await fetch(`${url.origin}/variants/${variant}`);210 const newResponse = new Response(response.body, response);211212 // Set cookie for consistent experience213 newResponse.headers.set('Set-Cookie', `ab=${variant}; Path=/; Max-Age=86400`);214215 return newResponse;216 },217};218```219220## Когда что выбирать221222### Выбирайте AWS Lambda, если:223- Вы уже инвестировали в экосистему AWS224- Вам нужны длительные функции (до 15 минут)225- Вам нужны сложные событийно-управляемые архитектуры226- Вам нужны среды выполнения помимо JavaScript (Python, Go, Rust, Java)227228### Выбирайте Vercel Functions, если:229- Вы разрабатываете на Next.js или фронтенд-фреймворке230- Вы хотите простейший опыт развертывания (git push)231- Ваша команда ориентирована на фронтенд232- Вы хотите хостинг + функции + CDN на одной платформе233234### Выбирайте Cloudflare Workers, если:235- Вам нужна минимально возможная задержка по всему миру236- Вы хотите самый дешевый вариант в масштабе237- Вам нужны возможности пограничных вычислений238- Время холодного старта критично для вашего сценария239240## Можно ли их комбинировать?241242Безусловно. Типичная архитектура:243244```mermaid245graph TD246 User --> CF[Cloudflare Workers\nEdge caching, routing, A/B tests]247 CF --> Vercel[Vercel\nNext.js frontend + API routes]248 Vercel --> Lambda[AWS Lambda\nHeavy processing, background jobs]249 Lambda --> S3[S3 Storage]250 Lambda --> DB[(Database)]251```252253- **Cloudflare Workers**: пограничная маршрутизация, кэширование, безопасность254- **Vercel Functions**: фронтенд API-маршруты, SSR255- **AWS Lambda**: тяжелая бэкенд-обработка, плановые задачи, конвейеры событий256257## Заключение258259Serverless значительно повзрослел. В 2026 году выбор между AWS Lambda, Vercel Functions и Cloudflare Workers зависит от вашего стека и приоритетов:260261- **Простейший опыт разработчика**: Vercel262- **Самый мощный и гибкий**: AWS Lambda263- **Лучшая производительность и цены**: Cloudflare Workers264265Все три готовы к продакшену и проверены в бою. Начните с того, что подходит вашему текущему стеку, и расширяйтесь по мере роста потребностей.266
:Serverless на практике: AWS Lambda vs Vercel Functions vs Cloudflare Workerslines 1-266 (END) — press q to close