spinny:~/writing $ vim serverless-aws-lambda-vercel-cloudflare.md
1~2Il serverless computing ti permette di eseguire codice senza gestire server. Scrivi funzioni, le distribuisci e la piattaforma gestisce scalabilita, disponibilita e infrastruttura. Nel 2026, tre piattaforme dominano il panorama serverless: **AWS Lambda**, **Vercel Serverless Functions** e **Cloudflare Workers**. Ognuna ha punti di forza e compromessi differenti.3~4In questo articolo, le confrontiamo con esempi reali, considerazioni sulle prestazioni e analisi dei prezzi.5~6## Come Funziona il Serverless7~8```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```15~16Distribuisci una funzione. Quando arriva una richiesta, la piattaforma:171. Avvia un ambiente di esecuzione (o riutilizza uno gia attivo)182. Esegue la tua funzione193. Restituisce la risposta204. Scala a zero quando inattiva (non paghi per il tempo di inattivita)21~22## Panoramica delle Piattaforme23~24### AWS Lambda25~26La piattaforma serverless originale (lanciata nel 2014). La piu matura e ricca di funzionalita, con integrazione profonda nell'ecosistema AWS.27~28```javascript29// AWS Lambda handler30export const handler = async (event) => {31 const body = JSON.parse(event.body);32~33 const result = await processData(body);34~35 return {36 statusCode: 200,37 headers: { 'Content-Type': 'application/json' },38 body: JSON.stringify(result),39 };40};41```42~43### Vercel Serverless Functions44~45Strettamente integrato con Next.js e il workflow di deployment frontend. Le funzioni vengono distribuite insieme al tuo frontend senza configurazione.46~47```typescript48// app/api/hello/route.ts (Next.js App Router)49import { NextResponse } from 'next/server';50~51export async function GET(request: Request) {52 const { searchParams } = new URL(request.url);53 const name = searchParams.get('name') || 'World';54~55 return NextResponse.json({ message: `Hello, ${name}!` });56}57```58~59### Cloudflare Workers60~61Eseguito sulla rete edge di Cloudflare in oltre 300 citta nel mondo. Utilizza il motore V8 (lo stesso di Chrome) invece di Node.js, il che significa cold start estremamente veloci.62~63```javascript64// Cloudflare Worker65export default {66 async fetch(request, env) {67 const url = new URL(request.url);68 const name = url.searchParams.get('name') || 'World';69~70 return new Response(71 JSON.stringify({ message: `Hello, ${name}!` }),72 { headers: { 'Content-Type': 'application/json' } }73 );74 },75};76```77~78## Confronto delle Funzionalita79~80| Funzionalita | AWS Lambda | Vercel Functions | Cloudflare Workers |81|---------|-----------|-----------------|-------------------|82| **Runtime** | Node.js, Python, Go, Rust, Java, .NET | Node.js, Python, Go, Ruby | V8 Isolates (JS/TS, Rust via WASM) |83| **Tempo massimo di esecuzione** | 15 minuti | 60s (Hobby), 300s (Pro) | 30s (gratuito), 15min (a pagamento) |84| **Memoria** | 128MB - 10GB | 1024MB - 3008MB | 128MB |85| **Cold start** | 100-500ms | 100-300ms | < 5ms |86| **Posizione di deploy** | Singola regione (o multi con impegno) | Regioni multiple | 300+ posizioni edge |87| **Payload massimo** | 6MB (sincrono), 256KB (asincrono) | 4.5MB | 100MB |88| **Storage incluso** | No (usa DynamoDB, S3) | No (usa DB esterno) | KV, D1 (SQLite), R2 (compatibile S3) |89| **Modello di prezzo** | Per richiesta + durata | Incluso nel piano | Per richiesta + durata |90| **Livello gratuito** | 1M richieste/mese | 100K/mese (Hobby) | 100K richieste/giorno |91~92## Cold Start93~94Il cold start e il tempo necessario per inizializzare una nuova istanza della funzione. Questa e la principale preoccupazione prestazionale del serverless.95~96```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 end104~105 subgraph "Warm Invocation"106 F[Request] --> G[Execute Function]107 end108```109~110| Piattaforma | Cold Start Tipico | Perche |111|----------|-------------------|-----|112| **Cloudflare Workers** | < 5ms | Isolate V8, nessun runtime completo necessario |113| **Vercel Functions** | 100-300ms | Runtime Node.js su edge o regionale |114| **AWS Lambda** | 100-500ms | Inizializzazione completa del container |115| **AWS Lambda (Java)** | 1-5 secondi | Overhead di avvio della JVM |116~117Cloudflare Workers vince nei cold start con un margine enorme perche utilizza isolate V8 invece di container.118~119## Confronto Prezzi120~121### Livello Gratuito122~123| Piattaforma | Richieste Gratuite | Calcolo Gratuito |124|----------|--------------|--------------|125| **AWS Lambda** | 1M/mese | 400.000 GB-secondi |126| **Vercel** | 100K/mese | Incluso nel piano Hobby |127| **Cloudflare Workers** | 100K/giorno (~3M/mese) | 10ms CPU per invocazione |128~129### Su Scala (10M richieste/mese, durata media 50ms)130~131| Piattaforma | Costo Mensile Stimato |132|----------|----------------------|133| **AWS Lambda** | ~$2,50 (richieste) + ~$4,15 (calcolo) = **~$6,65** |134| **Vercel** | **$20/mese** (piano Pro, include le funzioni) |135| **Cloudflare Workers** | **$5/mese** (piano a pagamento, include 10M richieste) |136~137Per la maggior parte dei casi d'uso, Cloudflare Workers e il piu economico. Il prezzo di Vercel e semplice ma include l'intera piattaforma (hosting, CDN, analytics). AWS Lambda ha i prezzi piu granulari.138~139## Casi d'Uso Reali140~141### AWS Lambda: Ideale Per142~143- **Workflow backend complessi** - step functions, architetture event-driven144- **Integrazione con servizi AWS** - trigger S3, stream DynamoDB, code SQS145- **Task a lunga durata** - fino a 15 minuti di tempo di esecuzione146- **Team multi-linguaggio** - supporta la piu ampia gamma di runtime147~148```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```157~158### Vercel Functions: Ideale Per159~160- **Applicazioni Next.js** - API routes senza configurazione161- **Team orientati al frontend** - distribuisci frontend e backend insieme162- **Prototipazione rapida** - git push per il deploy163- **Architetture Jamstack** - frontend statico + API serverless164~165```typescript166// app/api/subscribe/route.ts167import { NextResponse } from 'next/server';168~169export async function POST(request: Request) {170 const { email } = await request.json();171~172 // Validate173 if (!email || !email.includes('@')) {174 return NextResponse.json(175 { error: 'Invalid email' },176 { status: 400 }177 );178 }179~180 // Save to database181 await db.subscribers.create({ email });182~183 return NextResponse.json({ success: true });184}185```186~187### Cloudflare Workers: Ideale Per188~189- **API a bassa latenza** - il codice viene eseguito in oltre 300 posizioni nel mondo190- **Edge computing** - trasformazione delle risposte, A/B testing, personalizzazione191- **API ad alto volume** - il piu economico su scala con un generoso livello gratuito192- **Applicazioni globali** - dati vicini agli utenti con KV e D1193~194```javascript195// Edge-side A/B test196export default {197 async fetch(request, env) {198 const url = new URL(request.url);199~200 // Assign user to variant201 const cookie = request.headers.get('Cookie') || '';202 let variant = cookie.includes('ab=b') ? 'b' : 'a';203~204 if (!cookie.includes('ab=')) {205 variant = Math.random() < 0.5 ? 'a' : 'b';206 }207~208 // Fetch the appropriate version209 const response = await fetch(`${url.origin}/variants/${variant}`);210 const newResponse = new Response(response.body, response);211~212 // Set cookie for consistent experience213 newResponse.headers.set('Set-Cookie', `ab=${variant}; Path=/; Max-Age=86400`);214~215 return newResponse;216 },217};218```219~220## Quando Scegliere Quale221~222### Scegli AWS Lambda se:223- Sei gia investito nell'ecosistema AWS224- Hai bisogno di funzioni a lunga durata (fino a 15 minuti)225- Hai bisogno di architetture event-driven complesse226- Hai bisogno di runtime oltre JavaScript (Python, Go, Rust, Java)227~228### Scegli Vercel Functions se:229- Stai sviluppando con Next.js o un framework frontend230- Vuoi l'esperienza di deploy piu semplice (git push)231- Il tuo team e focalizzato sul frontend232- Vuoi hosting + funzioni + CDN in un'unica piattaforma233~234### Scegli Cloudflare Workers se:235- Hai bisogno della latenza piu bassa possibile a livello globale236- Vuoi l'opzione piu economica su scala237- Hai bisogno di capacita di edge computing238- Il tempo di cold start e critico per il tuo caso d'uso239~240## Si Possono Combinare?241~242Assolutamente. Un'architettura comune:243~244```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```252~253- **Cloudflare Workers**: routing edge, caching, sicurezza254- **Vercel Functions**: API routes frontend, SSR255- **AWS Lambda**: elaborazione backend pesante, task pianificati, pipeline di eventi256~257## Conclusione258~259Il serverless e maturato significativamente. Nel 2026, la scelta tra AWS Lambda, Vercel Functions e Cloudflare Workers dipende dal tuo stack e dalle tue priorita:260~261- **Esperienza sviluppatore piu semplice**: Vercel262- **Piu potente e flessibile**: AWS Lambda263- **Migliori prestazioni e prezzi**: Cloudflare Workers264~265Tutte e tre sono pronte per la produzione e testate sul campo. Inizia con quella che si adatta al tuo stack attuale e amplia man mano che le tue esigenze crescono.266~
NORMAL · serverless-aws-lambda-vercel-cloudflare.md [readonly]266 lines · :q to close