spinny:~/writing $ vim serverless-aws-lambda-vercel-cloudflare.md
1~2تتيح لك الحوسبة بدون خادم (Serverless) تشغيل التعليمات البرمجية دون إدارة الخوادم. تكتب الدوال وتنشرها، وتتولى المنصة التوسع والتوفر والبنية التحتية. في عام 2026، تهيمن ثلاث منصات على مشهد serverless: **AWS Lambda** و **Vercel Serverless Functions** و **Cloudflare Workers**. لكل منها نقاط قوة ومقايضات مختلفة.3~4في هذا المقال، نقارن بينها بأمثلة حقيقية واعتبارات الأداء وتحليلات الأسعار.5~6## كيف يعمل 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~16تنشر دالة. عندما يصل طلب، تقوم المنصة بـ:171. تشغيل بيئة تنفيذ (أو إعادة استخدام واحدة نشطة بالفعل)182. تشغيل دالتك193. إرجاع الاستجابة204. التصغير إلى الصفر عند الخمول (لا تدفع مقابل وقت الخمول)21~22## نظرة عامة على المنصات23~24### AWS Lambda25~26منصة serverless الأصلية (أُطلقت عام 2014). الأكثر نضجاً وغنية بالميزات، مع تكامل عميق في نظام 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~45متكامل بشكل وثيق مع Next.js وسير عمل نشر الواجهة الأمامية. يتم نشر الدوال بجانب واجهتك الأمامية بدون أي تكوين.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~61يعمل على شبكة Cloudflare الطرفية عبر أكثر من 300 مدينة حول العالم. يستخدم محرك V8 (نفس محرك Chrome) بدلاً من Node.js، مما يعني بدء تشغيل بارد سريع للغاية.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## مقارنة الميزات79~80| الميزة | 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-500ms | 100-300ms | < 5ms |86| **موقع النشر** | منطقة واحدة (أو متعددة مع جهد) | مناطق متعددة | 300+ موقع طرفي |87| **أقصى حمولة** | 6MB (متزامن)، 256KB (غير متزامن) | 4.5MB | 100MB |88| **تخزين مدمج** | لا (استخدم DynamoDB، S3) | لا (استخدم قاعدة بيانات خارجية) | KV، D1 (SQLite)، R2 (متوافق مع S3) |89| **نموذج التسعير** | لكل طلب + مدة | مشمول في الخطة | لكل طلب + مدة |90| **المستوى المجاني** | 1 مليون طلب/شهر | 100 ألف/شهر (Hobby) | 100 ألف طلب/يوم |91~92## البدء البارد93~94البدء البارد هو الوقت المستغرق لتهيئة نسخة دالة جديدة. هذا هو أكبر مصدر قلق للأداء مع 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| المنصة | البدء البارد النموذجي | لماذا |111|----------|-------------------|-----|112| **Cloudflare Workers** | < 5ms | عزل V8، لا حاجة لبيئة تشغيل كاملة |113| **Vercel Functions** | 100-300ms | بيئة تشغيل Node.js على الحافة أو إقليمية |114| **AWS Lambda** | 100-500ms | تهيئة حاوية كاملة |115| **AWS Lambda (Java)** | 1-5 ثوانٍ | حمل بدء تشغيل JVM |116~117يفوز Cloudflare Workers في البدء البارد بفارق كبير لأنه يستخدم عزل V8 بدلاً من الحاويات.118~119## مقارنة الأسعار120~121### المستوى المجاني122~123| المنصة | الطلبات المجانية | الحوسبة المجانية |124|----------|--------------|--------------|125| **AWS Lambda** | 1 مليون/شهر | 400,000 GB-ثانية |126| **Vercel** | 100 ألف/شهر | مشمول في خطة Hobby |127| **Cloudflare Workers** | 100 ألف/يوم (~3 مليون/شهر) | 10ms CPU لكل استدعاء |128~129### على نطاق واسع (10 مليون طلب/شهر، متوسط مدة 50ms)130~131| المنصة | التكلفة الشهرية المقدرة |132|----------|----------------------|133| **AWS Lambda** | ~$2.50 (طلبات) + ~$4.15 (حوسبة) = **~$6.65** |134| **Vercel** | **$20/شهر** (خطة Pro، تشمل الدوال) |135| **Cloudflare Workers** | **$5/شهر** (خطة مدفوعة، تشمل 10 مليون طلب) |136~137لمعظم حالات الاستخدام، Cloudflare Workers هو الأرخص. تسعير Vercel بسيط لكنه يشمل المنصة بأكملها (الاستضافة، CDN، التحليلات). AWS Lambda لديه التسعير الأكثر تفصيلاً.138~139## حالات الاستخدام الواقعية140~141### AWS Lambda: الأفضل لـ142~143- **سير عمل الخلفية المعقدة** - step functions، البنى المبنية على الأحداث144- **التكامل مع خدمات AWS** - محفزات S3، تدفقات DynamoDB، طوابير SQS145- **المهام طويلة التشغيل** - حتى 15 دقيقة من وقت التنفيذ146- **الفرق متعددة اللغات** - يدعم أوسع نطاق من بيئات التشغيل147~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: الأفضل لـ159~160- **تطبيقات Next.js** - مسارات API بدون تكوين161- **الفرق الموجهة للواجهة الأمامية** - نشر الواجهة الأمامية والخلفية معاً162- **النماذج الأولية السريعة** - git push للنشر163- **بنى Jamstack** - واجهة أمامية ثابتة + API بدون خادم164~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: الأفضل لـ188~189- **واجهات API منخفضة التأخير** - الكود يعمل في أكثر من 300 موقع حول العالم190- **الحوسبة الطرفية** - تحويل الاستجابات، اختبار A/B، التخصيص191- **واجهات API عالية الحجم** - الأرخص على نطاق واسع مع مستوى مجاني سخي192- **التطبيقات العالمية** - بيانات قريبة من المستخدمين مع KV و 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## متى تختار أياً منها221~222### اختر AWS Lambda إذا:223- كنت مستثمراً بالفعل في نظام AWS البيئي224- كنت بحاجة إلى دوال طويلة التشغيل (حتى 15 دقيقة)225- كنت بحاجة إلى بنى معقدة مبنية على الأحداث226- كنت بحاجة إلى بيئات تشغيل بخلاف JavaScript (Python، Go، Rust، Java)227~228### اختر Vercel Functions إذا:229- كنت تبني باستخدام Next.js أو إطار عمل للواجهة الأمامية230- كنت تريد أبسط تجربة نشر (git push)231- كان فريقك يركز على الواجهة الأمامية232- كنت تريد استضافة + دوال + CDN في منصة واحدة233~234### اختر Cloudflare Workers إذا:235- كنت بحاجة إلى أقل تأخير ممكن عالمياً236- كنت تريد الخيار الأرخص على نطاق واسع237- كنت بحاجة إلى إمكانيات الحوسبة الطرفية238- كان وقت البدء البارد حاسماً لحالة استخدامك239~240## هل يمكنك الجمع بينها؟241~242بالتأكيد. بنية شائعة: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**: التوجيه الطرفي، التخزين المؤقت، الأمان254- **Vercel Functions**: مسارات API للواجهة الأمامية، SSR255- **AWS Lambda**: معالجة الخلفية الثقيلة، المهام المجدولة، خطوط أنابيب الأحداث256~257## الخلاصة258~259لقد نضج serverless بشكل كبير. في عام 2026، يعتمد الاختيار بين AWS Lambda و Vercel Functions و Cloudflare Workers على مجموعتك التقنية وأولوياتك:260~261- **أبسط تجربة مطور**: Vercel262- **الأكثر قوة ومرونة**: AWS Lambda263- **أفضل أداء وأسعار**: Cloudflare Workers264~265الثلاثة جاهزون للإنتاج ومُختبرون في المعارك. ابدأ بالذي يناسب مجموعتك التقنية الحالية، وتوسع مع نمو احتياجاتك.266~
NORMAL · serverless-aws-lambda-vercel-cloudflare.md [readonly]266 lines · :q to close