Serverless (เซิร์ฟเวอร์เลส)
คืออะไร
ลองนึกถึงไฟที่ทำงานด้วยเซ็นเซอร์ตรวจจับความเคลื่อนไหว: มันจะดับอยู่จนกว่าจะมีคนเดินผ่าน แล้วค่อยติดขึ้นมาเฉพาะตอนนั้น จากนั้นก็ดับตัวเองไป — คุณไม่ต้องเปิดสวิตช์เอง และไม่ต้องเสียค่าไฟตลอดทั้งคืน ก็ทำงานคล้ายกันแบบนี้ คุณเขียนฟังก์ชันแยกเป็นชิ้นๆ และผู้ให้บริการคลาวด์จะรันมันก็ต่อเมื่อมีสิ่งใดสิ่งหนึ่งมากระตุ้น — เช่น คำขอ (HTTP request หรือคำขอเว็บ ซึ่งเป็นสิ่งที่เบราว์เซอร์ของคุณส่งไป), การอัปโหลดไฟล์, หรือตัวจับเวลาที่ตั้งไว้ล่วงหน้า เบื้องหลังยังคงมีเซิร์ฟเวอร์อยู่จริง แต่คุณไม่เคยเห็นหรือต้องดูแลมันเลย คุณจ่ายเงินเฉพาะช่วงเวลาที่โค้ดของคุณทำงานจริงเท่านั้น บางครั้งคิดละเอียดถึงระดับมิลลิวินาที
จุดแข็ง
- ไม่ต้องจัดเตรียม อัปเดตแพตช์ หรือคอยดูแลให้เซิร์ฟเวอร์ทำงานอยู่ตลอด
- ขยายขนาดได้เองโดยอัตโนมัติ ตั้งแต่ศูนย์ไปจนถึงหลายพันการทำงานพร้อมกัน
- จ่ายตามการใช้งานจริง โค้ดที่ไม่ได้ทำงานไม่มีค่าใช้จ่ายเลย
- เชื่อมต่อกับเหตุการณ์ (events) ต่างๆ ของคลาวด์ได้อย่างราบรื่น (คิว, ที่เก็บข้อมูล, ฐานข้อมูล)
- เหมาะกับทราฟฟิกที่มาเป็นช่วงๆ หรือคาดเดาไม่ได้
ข้อแลกเปลี่ยน
- Cold starts (การเริ่มทำงานแบบเย็น): ฟังก์ชันที่ไม่ได้ถูกเรียกใช้มาสักพักอาจต้องใช้เวลาเพิ่มขึ้นในการ "ตื่น" ขึ้นมาทำงาน
- มีขีดจำกัดเวลาในการทำงาน (มักอยู่ที่ไม่กี่นาที) ทำให้ไม่เหมาะกับงานที่ใช้เวลานาน
- ค่าใช้จ่ายอาจสร้างความประหลาดใจได้เมื่อมีปริมาณการใช้งานสูงและสม่ำเสมอ เมื่อเทียบกับเซิร์ฟเวอร์ธรรมดา
- การทดสอบและดีบักบนเครื่องของตัวเองทำได้ยุ่งยากกว่าแอปทั่วไป
- การผูกติดกับผู้ให้บริการ (vendor lock-in) — โมเดลเหตุการณ์และ ของแต่ละผู้ให้บริการแตกต่างกัน
ควรใช้เมื่อไหร่
เลือกใช้ serverless สำหรับ API (Application Programming Interface หรือ ส่วนต่อประสานโปรแกรมประยุกต์ — จุดเชื่อมต่อที่ซอฟต์แวร์อื่นเรียกใช้เพื่อคุยกับแอปของคุณ), , งานที่ตั้งเวลาไว้ล่วงหน้า และงานที่ขับเคลื่อนด้วยเหตุการณ์ (event-driven) ในกรณีที่ทราฟฟิกไม่สม่ำเสมอและคุณไม่อยากคอยดูแลโครงสร้างพื้นฐานเอง มันโดดเด่นมากในการเป็นโค้ดเชื่อมต่อ (glue code) ระหว่างบริการคลาวด์ต่างๆ
เข้ากับ vibe coding แค่ไหน
Serverless เข้ากันได้ดีกับการพัฒนาที่ขับเคลื่อนด้วย AI เพราะหน่วยของงานคือฟังก์ชันเดี่ยวๆ ที่จบในตัวเอง — ง่ายสำหรับ (ตัวแทน AI) ที่จะสร้าง ทดสอบ และดีพลอย เฟรมเวิร์กอย่าง AWS SAM, Serverless และ Vercel ให้ AI กำหนดฟังก์ชัน ตัวกระตุ้น (trigger) และสิทธิ์การเข้าถึงทั้งหมดไว้ในไฟล์ config เดียว เคล็ดลับ: ให้บอก agent ตั้งค่า timeout และขนาดหน่วยความจำที่เหมาะสมอย่างชัดเจน และให้ (แพ็กเกจที่พึ่งพา) น้อยที่สุดเท่าที่จะทำได้ — แพ็กเกจน้อยลงหมายถึงบันเดิลเล็กลงและ cold start ที่เร็วขึ้น
# serverless.yml — AWS Lambda function
service: my-api
provider:
name: aws
runtime: nodejs20.x
timeout: 10
functions:
hello:
handler: handler.hello
events:
- httpApi:
path: /hello
method: get
# Deploy the stack
npx serverless deploy