spinny:~/writing $ vim serverless-aws-lambda-vercel-cloudflare.md
1~2Le serverless computing vous permet d'executer du code sans gerer de serveurs. Vous ecrivez des fonctions, les deployez, et la plateforme gere la mise a l'echelle, la disponibilite et l'infrastructure. En 2026, trois plateformes dominent le paysage serverless : **AWS Lambda**, **Vercel Serverless Functions** et **Cloudflare Workers**. Chacune a des forces et des compromis differents.3~4Dans cet article, nous les comparons avec des exemples concrets, des considerations de performance et des analyses de prix.5~6## Comment fonctionne le 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~16Vous deployez une fonction. Quand une requete arrive, la plateforme :171. Demarre un environnement d'execution (ou reutilise un deja actif)182. Execute votre fonction193. Retourne la reponse204. Reduit a zero quand inactive (vous ne payez pas pour le temps d'inactivite)21~22## Vue d'ensemble des plateformes23~24### AWS Lambda25~26La plateforme serverless originale (lancee en 2014). La plus mature et riche en fonctionnalites, avec une integration profonde dans l'ecosysteme 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~45Etroitement integre avec Next.js et le workflow de deploiement frontend. Les fonctions sont deployees avec votre frontend sans aucune configuration.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~61S'execute sur le reseau edge de Cloudflare dans plus de 300 villes a travers le monde. Utilise le moteur V8 (le meme que Chrome) au lieu de Node.js, ce qui signifie des cold starts extremement rapides.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## Comparaison des fonctionnalites79~80| Fonctionnalite | 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| **Temps d'execution max** | 15 minutes | 60s (Hobby), 300s (Pro) | 30s (gratuit), 15min (payant) |84| **Memoire** | 128MB - 10GB | 1024MB - 3008MB | 128MB |85| **Cold start** | 100-500ms | 100-300ms | < 5ms |86| **Emplacement de deploiement** | Region unique (ou multi avec effort) | Regions multiples | 300+ emplacements edge |87| **Payload max** | 6MB (synchrone), 256KB (asynchrone) | 4.5MB | 100MB |88| **Stockage inclus** | Non (utilisez DynamoDB, S3) | Non (utilisez une DB externe) | KV, D1 (SQLite), R2 (compatible S3) |89| **Modele de tarification** | Par requete + duree | Inclus dans le plan | Par requete + duree |90| **Niveau gratuit** | 1M requetes/mois | 100K/mois (Hobby) | 100K requetes/jour |91~92## Cold Starts93~94Le cold start est le temps necessaire pour initialiser une nouvelle instance de fonction. C'est le probleme de performance le plus important avec le 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| Plateforme | Cold Start Typique | Pourquoi |111|----------|-------------------|-----|112| **Cloudflare Workers** | < 5ms | Isolates V8, pas besoin de runtime complet |113| **Vercel Functions** | 100-300ms | Runtime Node.js sur edge ou regional |114| **AWS Lambda** | 100-500ms | Initialisation complete du conteneur |115| **AWS Lambda (Java)** | 1-5 secondes | Surcharge du demarrage JVM |116~117Cloudflare Workers remporte les cold starts avec une marge enorme car ils utilisent des isolates V8 au lieu de conteneurs.118~119## Comparaison des prix120~121### Niveau gratuit122~123| Plateforme | Requetes gratuites | Calcul gratuit |124|----------|--------------|--------------|125| **AWS Lambda** | 1M/mois | 400 000 GB-secondes |126| **Vercel** | 100K/mois | Inclus dans le plan Hobby |127| **Cloudflare Workers** | 100K/jour (~3M/mois) | 10ms CPU par invocation |128~129### A grande echelle (10M requetes/mois, duree moyenne de 50ms)130~131| Plateforme | Cout mensuel estime |132|----------|----------------------|133| **AWS Lambda** | ~$2,50 (requetes) + ~$4,15 (calcul) = **~$6,65** |134| **Vercel** | **$20/mois** (plan Pro, inclut les fonctions) |135| **Cloudflare Workers** | **$5/mois** (plan payant, inclut 10M requetes) |136~137Pour la plupart des cas d'utilisation, Cloudflare Workers est le moins cher. La tarification de Vercel est simple mais inclut l'ensemble de la plateforme (hebergement, CDN, analytics). AWS Lambda a la tarification la plus granulaire.138~139## Cas d'utilisation concrets140~141### AWS Lambda : Ideal pour142~143- **Workflows backend complexes** - step functions, architectures event-driven144- **Integration avec les services AWS** - triggers S3, streams DynamoDB, files SQS145- **Taches de longue duree** - jusqu'a 15 minutes de temps d'execution146- **Equipes multi-langages** - supporte la plus large gamme de runtimes147~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 : Ideal pour159~160- **Applications Next.js** - routes API sans configuration161- **Equipes orientees frontend** - deployer frontend et backend ensemble162- **Prototypage rapide** - git push pour deployer163- **Architectures Jamstack** - frontend statique + 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 : Ideal pour188~189- **APIs a faible latence** - le code s'execute dans plus de 300 emplacements dans le monde190- **Edge computing** - transformer les reponses, tests A/B, personnalisation191- **APIs a haut volume** - le moins cher a grande echelle avec un genereux niveau gratuit192- **Applications mondiales** - donnees proches des utilisateurs avec KV et 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## Quand choisir laquelle221~222### Choisissez AWS Lambda si :223- Vous etes deja investi dans l'ecosysteme AWS224- Vous avez besoin de fonctions de longue duree (jusqu'a 15 minutes)225- Vous avez besoin d'architectures event-driven complexes226- Vous avez besoin de runtimes au-dela de JavaScript (Python, Go, Rust, Java)227~228### Choisissez Vercel Functions si :229- Vous developpez avec Next.js ou un framework frontend230- Vous voulez l'experience de deploiement la plus simple (git push)231- Votre equipe est orientee frontend232- Vous voulez hebergement + fonctions + CDN en une seule plateforme233~234### Choisissez Cloudflare Workers si :235- Vous avez besoin de la latence la plus faible possible dans le monde entier236- Vous voulez l'option la moins chere a grande echelle237- Vous avez besoin de capacites d'edge computing238- Le temps de cold start est critique pour votre cas d'utilisation239~240## Peut-on les combiner ?241~242Absolument. Une architecture courante :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** : routage edge, mise en cache, securite254- **Vercel Functions** : routes API frontend, SSR255- **AWS Lambda** : traitement backend lourd, taches planifiees, pipelines d'evenements256~257## Conclusion258~259Le serverless a considerablement muri. En 2026, le choix entre AWS Lambda, Vercel Functions et Cloudflare Workers depend de votre stack et de vos priorites :260~261- **Experience developpeur la plus simple** : Vercel262- **Le plus puissant et flexible** : AWS Lambda263- **Meilleures performances et tarifs** : Cloudflare Workers264~265Les trois sont prets pour la production et eprouves au combat. Commencez avec celui qui correspond a votre stack actuel et elargissez au fur et a mesure que vos besoins grandissent.266~
NORMAL · serverless-aws-lambda-vercel-cloudflare.md [readonly]266 lines · :q to close