spinny:~/writing $ vim serverless-aws-lambda-vercel-cloudflare.md
1~2Serverless computing ช่วยให้คุณรันโค้ดได้โดยไม่ต้องจัดการเซิร์ฟเวอร์ คุณเขียนฟังก์ชัน ทำการ deploy และแพลตฟอร์มจะจัดการเรื่อง scaling, availability และโครงสร้างพื้นฐาน ในปี 2026 มีสามแพลตฟอร์มที่ครองตลาด serverless: **AWS Lambda**, **Vercel Serverless Functions** และ **Cloudflare Workers** แต่ละตัวมีจุดแข็งและข้อแลกเปลี่ยนที่แตกต่างกัน3~4ในบทความนี้ เราเปรียบเทียบพวกมันด้วยตัวอย่างจริง ข้อพิจารณาด้านประสิทธิภาพ และการวิเคราะห์ราคา5~6## Serverless ทำงานอย่างไร7~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คุณ deploy ฟังก์ชัน เมื่อคำขอเข้ามา แพลตฟอร์มจะ:171. เริ่มต้นสภาพแวดล้อมการทำงาน (หรือใช้ซ้ำจากที่อุ่นไว้แล้ว)182. รันฟังก์ชันของคุณ193. ส่งคืนการตอบกลับ204. ลดขนาดเป็นศูนย์เมื่อว่าง (คุณไม่ต้องจ่ายเงินสำหรับเวลาว่าง)21~22## ภาพรวมแพลตฟอร์ม23~24### AWS Lambda25~26แพลตฟอร์ม serverless ดั้งเดิม (เปิดตัวปี 2014) มีความสมบูรณ์และอุดมไปด้วยคุณสมบัติมากที่สุด พร้อมการผนวกรวมอย่างลึกซึ้งกับระบบนิเวศ AWS27~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 และเวิร์กโฟลว์การ deploy ฝั่ง frontend ฟังก์ชันถูก deploy พร้อมกับ frontend ของคุณโดยไม่ต้องตั้งค่าใดๆ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ทำงานบนเครือข่าย edge ของ Cloudflare ใน 300 กว่าเมืองทั่วโลก ใช้ V8 engine (เหมือนกับ Chrome) แทน Node.js ซึ่งหมายความว่า cold start เร็วมาก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| **Runtime** | 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| **Cold start** | 100-500ms | 100-300ms | < 5ms |86| **ตำแหน่ง deploy** | ภูมิภาคเดียว (หรือหลายภูมิภาคด้วยความพยายาม) | หลายภูมิภาค | 300+ ตำแหน่ง edge |87| **Payload สูงสุด** | 6MB (synchronous), 256KB (asynchronous) | 4.5MB | 100MB |88| **พื้นที่จัดเก็บในตัว** | ไม่มี (ใช้ DynamoDB, S3) | ไม่มี (ใช้ DB ภายนอก) | KV, D1 (SQLite), R2 (รองรับ S3) |89| **รูปแบบราคา** | ต่อคำขอ + ระยะเวลา | รวมในแผน | ต่อคำขอ + ระยะเวลา |90| **แผนฟรี** | 1M คำขอ/เดือน | 100K/เดือน (Hobby) | 100K คำขอ/วัน |91~92## Cold Start93~94Cold start คือเวลาที่ใช้ในการเริ่มต้น instance ของฟังก์ชันใหม่ นี่คือปัญหาประสิทธิภาพที่ใหญ่ที่สุดของ serverless95~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| แพลตฟอร์ม | Cold Start ทั่วไป | เหตุผล |111|----------|-------------------|-----|112| **Cloudflare Workers** | < 5ms | V8 isolate ไม่ต้องการ runtime เต็ม |113| **Vercel Functions** | 100-300ms | Runtime Node.js บน edge หรือ regional |114| **AWS Lambda** | 100-500ms | เริ่มต้น container เต็มรูปแบบ |115| **AWS Lambda (Java)** | 1-5 วินาที | ภาระการเริ่มต้น JVM |116~117Cloudflare Workers ชนะด้าน cold start ด้วยระยะห่างมาก เพราะใช้ V8 isolate แทน container118~119## การเปรียบเทียบราคา120~121### แผนฟรี122~123| แพลตฟอร์ม | คำขอฟรี | การประมวลผลฟรี |124|----------|--------------|--------------|125| **AWS Lambda** | 1M/เดือน | 400,000 GB-วินาที |126| **Vercel** | 100K/เดือน | รวมในแผน Hobby |127| **Cloudflare Workers** | 100K/วัน (~3M/เดือน) | 10ms CPU ต่อการเรียก |128~129### ระดับใหญ่ (10M คำขอ/เดือน, ระยะเวลาเฉลี่ย 50ms)130~131| แพลตฟอร์ม | ค่าใช้จ่ายรายเดือนโดยประมาณ |132|----------|----------------------|133| **AWS Lambda** | ~$2.50 (คำขอ) + ~$4.15 (การประมวลผล) = **~$6.65** |134| **Vercel** | **$20/เดือน** (แผน Pro รวมฟังก์ชัน) |135| **Cloudflare Workers** | **$5/เดือน** (แผนจ่ายเงิน รวม 10M คำขอ) |136~137สำหรับกรณีการใช้งานส่วนใหญ่ Cloudflare Workers ถูกที่สุด ราคาของ Vercel เรียบง่ายแต่รวมทั้งแพลตฟอร์ม (hosting, CDN, analytics) AWS Lambda มีราคาที่ละเอียดที่สุด138~139## กรณีการใช้งานจริง140~141### AWS Lambda: ดีที่สุดสำหรับ142~143- **เวิร์กโฟลว์ backend ที่ซับซ้อน** - step functions สถาปัตยกรรมที่ขับเคลื่อนด้วยเหตุการณ์144- **การผนวกรวมกับบริการ AWS** - S3 trigger, DynamoDB stream, SQS queue145- **งานที่ทำงานนาน** - สูงสุด 15 นาทีของเวลาทำงาน146- **ทีมหลายภาษา** - รองรับ runtime ที่หลากหลายที่สุด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 route ไม่ต้องตั้งค่า161- **ทีมที่เน้น frontend** - deploy frontend และ backend ด้วยกัน162- **การสร้างต้นแบบอย่างรวดเร็ว** - git push เพื่อ deploy163- **สถาปัตยกรรม Jamstack** - frontend แบบ static + serverless API164~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- **Edge computing** - แปลงการตอบกลับ, A/B testing, การปรับแต่งส่วนบุคคล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- คุณต้องการ runtime นอกเหนือจาก JavaScript (Python, Go, Rust, Java)227~228### เลือก Vercel Functions ถ้า:229- คุณกำลังสร้างด้วย Next.js หรือ frontend framework230- คุณต้องการประสบการณ์ deploy ที่ง่ายที่สุด (git push)231- ทีมของคุณเน้น frontend232- คุณต้องการ hosting + ฟังก์ชัน + CDN ในแพลตฟอร์มเดียว233~234### เลือก Cloudflare Workers ถ้า:235- คุณต้องการความหน่วงต่ำที่สุดทั่วโลก236- คุณต้องการตัวเลือกที่ถูกที่สุดในระดับใหญ่237- คุณต้องการความสามารถ edge computing238- เวลา cold start สำคัญกับกรณีการใช้งานของคุณ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**: การกำหนดเส้นทาง edge, caching, ความปลอดภัย254- **Vercel Functions**: API route สำหรับ frontend, SSR255- **AWS Lambda**: การประมวลผล backend หนัก, งานที่กำหนดเวลา, pipeline เหตุการณ์256~257## สรุป258~259Serverless เติบโตอย่างมีนัยสำคัญ ในปี 2026 การเลือกระหว่าง AWS Lambda, Vercel Functions และ Cloudflare Workers ขึ้นอยู่กับ stack และลำดับความสำคัญของคุณ:260~261- **ประสบการณ์นักพัฒนาที่ง่ายที่สุด**: Vercel262- **ทรงพลังและยืดหยุ่นที่สุด**: AWS Lambda263- **ประสิทธิภาพและราคาดีที่สุด**: Cloudflare Workers264~265ทั้งสามพร้อมสำหรับ production และผ่านการทดสอบจริง เริ่มต้นกับตัวที่เหมาะกับ stack ปัจจุบันของคุณ และขยายเมื่อความต้องการของคุณเพิ่มขึ้น266~
NORMAL · serverless-aws-lambda-vercel-cloudflare.md [readonly]266 lines · :q to close