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