สถาปัตยกรรม Serverless คืออะไร?

ผู้เขียน: บรรณาธิการเทคโนโลยีเว็บ Webizmเผยแพร่: 23 ส.ค. 2569อัปเดต: 11 ก.ย. 256912 นาที

สถาปัตยกรรม Serverless คือโมเดลการประมวลผลบนคลาวด์ที่ผู้ให้บริการจะจัดสรรทรัพยากรแบบไดนามิก ช่วยให้นักพัฒนาสามารถสร้างแอปพลิเคชันได้โดยไม่ต้องจัดการโครงสร้างพื้นฐาน

Featured image for สถาปัตยกรรม Serverless คืออะไร?
Featured image for สถาปัตยกรรม Serverless คืออะไร?

สถาปัตยกรรม Serverless คือโมเดลการประมวลผลบนคลาวด์ที่ผู้ให้บริการคลาวด์จะจัดการการจัดสรร การเตรียมใช้งาน และการปรับขนาดทรัพยากรประมวลผลแบบไดนามิก ช่วยให้ทีมวิศวกรสามารถปรับใช้โค้ดจริงสำหรับใช้งาน (production code) ได้โดยไม่ต้องจัดเตรียมหรือจัดการเซิร์ฟเวอร์จริงหรือเซิร์ฟเวอร์เสมือน

การส่งมอบซอฟต์แวร์ระดับองค์กรยุคใหม่ต้องการการวนซ้ำการพัฒนาที่รวดเร็ว ความน่าเชื่อถือในการดำเนินงานระดับสูง และการกำกับดูแลทางการเงินที่ละเอียดถี่ถ้วน การจัดการโครงสร้างพื้นฐานแบบดั้งเดิม ซึ่งมีลักษณะเด่นคือการวางแผนความจุด้วยตนเอง การแพตช์ระบบปฏิบัติการ และค่าใช้จ่ายแฝงของเซิร์ฟเวอร์ที่ไม่ได้ใช้งานอย่างต่อเนื่อง ก่อให้เกิดอุปสรรคในการดำเนินงานเพิ่มขึ้นเรื่อยๆ สำหรับองค์กรวิศวกรรมที่กำลังเติบโต สถาปัตยกรรม Serverless ตอบโจทย์ความท้าทายเหล่านี้โดยการแปลงชั้นโครงสร้างพื้นฐานให้อยู่ในรูปแบบบริการคลาวด์ที่ขับเคลื่อนด้วยเหตุการณ์ (event-driven) และคิดค่าบริการตามการใช้งานจริง (utility-metered) คู่มือฉบับนี้จะนำเสนอการประเมินการประมวลผลแบบ Serverless อย่างครอบคลุมสำหรับผู้นำด้านเทคนิค สถาปนิกซอฟต์แวร์ และผู้มีอำนาจตัดสินใจทางธุรกิจ โดยตรวจสอบกลไกพื้นฐาน ผลกระทบทางเศรษฐกิจ ข้อดีข้อเสียทางสถาปัตยกรรม และกลยุทธ์การนำไปใช้งานในสภาพแวดล้อมระดับองค์กร

บทสรุปสำหรับผู้บริหาร: นิยามของการประมวลผลแบบ Serverless

คำว่าสถาปัตยกรรม Serverlessอธิบายถึงกระบวนทัศน์การพัฒนาและการประมวลผลแบบคลาวด์เนทีฟ (cloud-native) ซึ่งความรับผิดชอบในการจัดการโครงสร้างพื้นฐานเบื้องหลังทั้งหมดจะถูกยกให้แก่ผู้ให้บริการคลาวด์ (CSP) ภายนอก ในโมเดลนี้ นักพัฒนาจะเขียนและปรับใช้ตรรกะของแอปพลิเคชัน ในขณะที่ผู้ให้บริการคลาวด์จะจัดการการจัดเตรียมเครื่อง การบำรุงรักษาระบบปฏิบัติการ การแพตช์ความปลอดภัย การปรับขนาดอัตโนมัติ การทนทานต่อความเสียหาย และการกระจายโหลดงานแบบไดนามิก

ในมุมมองด้านวิศวกรรม Serverless จะเปลี่ยนหน่วยของการปรับใช้ (deployment unit) จากเซิร์ฟเวอร์จริง เครื่องเสมือน (VMs) หรือคอนเทนเนอร์แบบคงอยู่ถาวร ไปเป็นฟังก์ชันการประมวลผลแบบไร้สถานะ (stateless) แยกเฉพาะส่วน และบริการแบ็กเอนด์ที่มีการจัดการ วงจรชีวิตของการประมวลผลจะผูกติดกับความต้องการใช้งานที่เข้ามาอย่างแท้จริง: อินสแตนซ์ของการประมวลผลจะถูกสร้างขึ้นทันทีเมื่อได้รับทริกเกอร์เหตุการณ์ ดำเนินการตามงานที่กำหนดไว้ และยุติการทำงานทันทีเมื่อเสร็จสิ้น

ในแง่การเงิน Serverless จะเปลี่ยนค่าใช้จ่ายด้านการประมวลผลจากเงินทุนคงที่หรือค่าใช้จ่ายในการดำเนินงานแบบสำรองล่วงหน้า ไปสู่โมเดลต้นทุนผันแปรอย่างสมบูรณ์ องค์กรไม่จำเป็นต้องจ่ายเงินสำหรับรอบการทำงานของ CPU ที่ว่างเปล่าหรือหน่วยความจำที่สำรองไว้ การใช้ทรัพยากรจะถูกคำนวณในระดับความละเอียดระดับมิลลิวินาที โดยจะคิดค่าบริการจากทีมวิศวกรตามหน่วยความจำที่จัดสรรและระยะเวลาที่แน่นอนซึ่งโค้ดของผู้ใช้กำลังประมวลผลอยู่จริงเท่านั้น

อธิบายความเข้าใจผิดเกี่ยวกับ "การไม่มีเซิร์ฟเวอร์" (No Server)

คำเรียก "Serverless" นั้นเป็นการตั้งชื่อที่ไม่ตรงกับความเป็นจริงในอุตสาหกรรม (misnomer) ซึ่งมักสร้างความสับสนให้กับผู้บริหารที่ไม่ได้เชี่ยวชาญด้านเทคนิค เซิร์ฟเวอร์จริง สวิตช์เครือข่าย ระบบระบายความร้อน และไฮเปอร์ไวเซอร์ (hypervisor) ยังคงจำเป็นอย่างยิ่งในการประมวลผลโค้ดของแอปพลิเคชัน อย่างไรก็ตาม สถาปัตยกรรมนี้ถือว่าเป็น serverless โดยเฉพาะในมุมมองของนักพัฒนาแอปพลิเคชันและองค์กรผู้ใช้งานเท่านั้น

+-------------------------------------------------------------------------+
|                      APPLICATION CODE & BUSINESS LOGIC                  |
+-------------------------------------------------------------------------+
|                  MANAGED RUNTIME & EVENT ROUTING (PROVIDER)             |
+-------------------------------------------------------------------------+
|             EPHEMERAL COMPUTE & CONTAINER ORCHESTRATION (PROVIDER)      |
+-------------------------------------------------------------------------+
|              PHYSICAL SERVERS, STORAGE & NETWORKING (PROVIDER)          |
+-------------------------------------------------------------------------+

ในกระบวนทัศน์โครงสร้างพื้นฐานแบบดั้งเดิม รวมถึงการกำหนดค่าแบบ Infrastructure-as-a-Service (IaaS) เช่น Amazon EC2 หรือ Google Compute Engine ผู้ดูแลระบบยังคงต้องรับผิดชอบตั้งแต่ต้นจนจบสำหรับ:

  • การติดตั้งระบบปฏิบัติการ การอัปเดตเคอร์เนล และการจัดการแพตช์ความปลอดภัย

  • การสร้างกลุ่มการปรับขนาดอัตโนมัติ (auto-scaling groups) เมตริกการปรับขนาด และตัวตั้งเวลาหน่วง (cooldown timers)

  • การกำหนดค่าบริดจ์เครือข่ายภายใน รีเวิร์สพร็อกซี (เช่น NGINX, HAProxy) และการสิ้นสุดการเข้ารหัส SSL/TLS (SSL/TLS termination)

  • การจัดเตรียมอินสแตนซ์สำรองข้าม Availability Zone หลายแห่ง เพื่อรับประกันความพร้อมใช้งานสูง (High Availability - HA) ขั้นพื้นฐาน

ในโมเดล Serverless ผู้ให้บริการคลาวด์จะเข้ามารับผิดชอบการดำเนินงานสำหรับงานหนักที่ไม่สร้างความแตกต่าง (undifferentiated heavy lifting) เหล่านี้ทั้งหมด โดยนักพัฒนาจะโต้ตอบผ่าน API การจัดการ, CLI สำหรับการปรับใช้ หรือคอนโซลบนเว็บเท่านั้น เพื่ออัปโหลดซอร์สโค้ดของแอปพลิเคชันหรือแพ็กเกจ Image ของ Open Container Initiative (OCI) แพลตฟอร์มคลาวด์จะจัดการการประสานงานคลัสเตอร์เบื้องหลังให้อย่างสมบูรณ์ และประมวลผลโค้ดภายใน Micro-virtual Machine ที่แยกส่วนตามความต้องการใช้งาน

คุณลักษณะหลักของโมเดลการประมวลผลแบบ Serverless

ในการที่จะนับว่าเป็นสถาปัตยกรรม Serverless อย่างแท้จริง สถาปัตยกรรมนั้นจะต้องแสดงคุณลักษณะการดำเนินงานที่ไม่อาจประนีประนอมได้ 4 ประการ ครอบคลุมทั้งชั้นการประมวลผล การจัดเก็บข้อมูล และเครือข่าย:

คุณลักษณะทางสถาปัตยกรรมคำจำกัดความเชิงปฏิบัติการผลกระทบต่อระดับองค์กร
การจัดการเซิร์ฟเวอร์เป็นศูนย์ (Zero Server Management)ทีม DevOps ภายในไม่ต้องจัดเตรียมระบบ กำหนดค่า OS หรือแพตช์สภาพแวดล้อมรันไทม์ด้วยตนเองลดภาระงานการบำรุงรักษาโครงสร้างพื้นฐานอย่างต่อเนื่องและลดพื้นที่ผิวในการจัดการช่องโหว่ด้านความปลอดภัยได้อย่างมหาศาล
การคิดค่าบริการตามการประมวลผลจริง (Pay-Per-Execution Metering)การเรียกเก็บเงินจะผูกกับเวลาในการประมวลผลจริงและหน่วยความจำที่จัดสรรอย่างเคร่งครัด โดยไม่มีค่าใช้จ่ายพื้นฐานเมื่อระบบไม่ได้ทำงานขจัดความสูญเปล่าทางการเงินที่เกิดจากการจัดสรรทรัพยากรเผื่อไว้เกินจำเป็นสำหรับช่วงที่มีทราฟฟิกพุ่งสูง สอดคล้องต้นทุนเข้ากับธุรกรรมทางธุรกิจโดยตรง
การปรับขนาดอัตโนมัติและไดนามิก (Autonomous, Dynamic Scaling)ทรัพยากรประมวลผลจะปรับขนาดในแนวนอนตั้งแต่ศูนย์จนถึงการประมวลผลพร้อมกันหลายพันรายการเพื่อตอบสนองต่อปริมาณงานจากเหตุการณ์ที่เกิดขึ้นขจัดปัญหาคอขวดด้านการวางแผนความจุ พร้อมรับประกันประสิทธิภาพที่ยืดหยุ่นและมั่นคงแม้ในช่วงที่ปริมาณโหลดพุ่งสูงขึ้นอย่างกะทันหันและคาดเดาไม่ได้
ความพร้อมใช้งานสูงในตัว (Built-in High Availability)ความสามารถในการทนต่อความเสียหาย (Fault tolerance) และการทำ Redundancy ข้ามหลาย Availability Zone (AZ) ได้รับการจัดการแบบเนทีฟโดยแพลตฟอร์มคลาวด์มอบความยืดหยุ่นและการฟื้นตัวในระดับองค์กร โดยไม่จำเป็นต้องกำหนดค่า Failover แบบกระจายตัวที่ซับซ้อน หรือตั้งค่าการกำหนดเส้นทางข้ามหลายภูมิภาค

การจัดการเซิร์ฟเวอร์เป็นศูนย์ (Zero Server Management)

คำจำกัดความเชิงปฏิบัติการ

ทีม DevOps ภายในไม่ต้องจัดเตรียมระบบ กำหนดค่า OS หรือแพตช์สภาพแวดล้อมรันไทม์ด้วยตนเอง

ผลกระทบต่อระดับองค์กร

ลดภาระงานการบำรุงรักษาโครงสร้างพื้นฐานอย่างต่อเนื่องและลดพื้นที่ผิวในการจัดการช่องโหว่ด้านความปลอดภัยได้อย่างมหาศาล

การคิดค่าบริการตามการประมวลผลจริง (Pay-Per-Execution Metering)

คำจำกัดความเชิงปฏิบัติการ

การเรียกเก็บเงินจะผูกกับเวลาในการประมวลผลจริงและหน่วยความจำที่จัดสรรอย่างเคร่งครัด โดยไม่มีค่าใช้จ่ายพื้นฐานเมื่อระบบไม่ได้ทำงาน

ผลกระทบต่อระดับองค์กร

ขจัดความสูญเปล่าทางการเงินที่เกิดจากการจัดสรรทรัพยากรเผื่อไว้เกินจำเป็นสำหรับช่วงที่มีทราฟฟิกพุ่งสูง สอดคล้องต้นทุนเข้ากับธุรกรรมทางธุรกิจโดยตรง

การปรับขนาดอัตโนมัติและไดนามิก (Autonomous, Dynamic Scaling)

คำจำกัดความเชิงปฏิบัติการ

ทรัพยากรประมวลผลจะปรับขนาดในแนวนอนตั้งแต่ศูนย์จนถึงการประมวลผลพร้อมกันหลายพันรายการเพื่อตอบสนองต่อปริมาณงานจากเหตุการณ์ที่เกิดขึ้น

ผลกระทบต่อระดับองค์กร

ขจัดปัญหาคอขวดด้านการวางแผนความจุ พร้อมรับประกันประสิทธิภาพที่ยืดหยุ่นและมั่นคงแม้ในช่วงที่ปริมาณโหลดพุ่งสูงขึ้นอย่างกะทันหันและคาดเดาไม่ได้

ความพร้อมใช้งานสูงในตัว (Built-in High Availability)

คำจำกัดความเชิงปฏิบัติการ

ความสามารถในการทนต่อความเสียหาย (Fault tolerance) และการทำ Redundancy ข้ามหลาย Availability Zone (AZ) ได้รับการจัดการแบบเนทีฟโดยแพลตฟอร์มคลาวด์

ผลกระทบต่อระดับองค์กร

มอบความยืดหยุ่นและการฟื้นตัวในระดับองค์กร โดยไม่จำเป็นต้องกำหนดค่า Failover แบบกระจายตัวที่ซับซ้อน หรือตั้งค่าการกำหนดเส้นทางข้ามหลายภูมิภาค

กลไกการทำงานเบื้องลึกของสถาปัตยกรรม Serverless

การประมวลผลเวิร์กโหลดโดยไม่มีอินสแตนซ์ถาวรรองรับอยู่เบื้องหลัง จำเป็นต้องมี orchestration plane ขั้นสูงซึ่งดำเนินการโดยผู้ให้บริการคลาวด์ การทำความเข้าใจกลไกภายในเหล่านี้ช่วยให้สถาปนิกระบบสามารถออกแบบระบบกระจายศูนย์ที่มีความยืดหยุ่น ความหน่วงต่ำ และคุ้มค่าต่อต้นทุนได้

Function-as-a-Service (FaaS) เทียบกับ Backend-as-a-Service (BaaS)

แอปพลิเคชัน Serverless ระดับ Production ต้องอาศัยการทำงานร่วมกันของสององค์ประกอบทางสถาปัตยกรรม ได้แก่ ลอจิกการประมวลผล (FaaS) และบริการรอบข้างที่มีการจัดการ (BaaS)

                      +-----------------------------+
                      |   HTTP Request / API Call   |
                      +--------------+--------------+
                                     |
                                     v
                      +-----------------------------+
                      |    API Gateway Router       |
                      +--------------+--------------+
                                     |
                                     v
                      +-----------------------------+
                      |  FaaS (AWS Lambda / Azure)  | <--- Stateless Business Logic
                      +-------+--------------+------+
                              |              |
              +---------------+              +---------------+
              v                                              v
+-----------------------------+                +-----------------------------+
|    BaaS: Managed Database   |                |  BaaS: Object Storage / Auth|
|  (Amazon DynamoDB / Aurora) |                |   (Amazon S3 / AWS Cognito) |
+-----------------------------+                +-----------------------------+

Function-as-a-Service (FaaS)

FaaS คือเลเยอร์การประมวลผลแบบชั่วคราว (ephemeral) ของ Serverless โดยตรรกะทางธุรกิจแต่ละส่วนจะถูกแบ่งออกเป็นบล็อกโค้ดขนาดเล็กในรูปแบบโมดูลาร์ที่เรียกว่า "ฟังก์ชัน" (functions) ฟังก์ชันเหล่านี้จะถูกปรับใช้แยกจากกันอย่างเป็นอิสระ และทำงานภายในสภาพแวดล้อมรันไทม์ที่แยกเป็นสัดส่วนเมื่อถูกกระตุ้นโดยเหตุการณ์เฉพาะ รันไทม์ FaaS ที่เป็นมาตรฐานอุตสาหกรรม ได้แก่:

  • AWS Lambda: รองรับ Node.js, Python, Java, Go, Ruby, .NET แบบเนทีฟ รวมถึงเลเยอร์รันไทม์แบบกำหนดเองผ่านคอนเทนเนอร์ฐาน Amazon Linux

  • Google Cloud Functions / Cloud Run: การประมวลผลแบบมีการจัดการที่สามารถลดขนาดลงเหลือศูนย์ พร้อมผสานการทำงานแบบเนทีฟกับระบบนิเวศ Pub/Sub และ Eventarc ภายในของ Google Cloud

  • Azure Functions: ผสานการทำงานอย่างลึกซึ้งกับ Microsoft Azure Event Grid, Service Bus และเฟรมเวิร์กการจัดการอัตลักษณ์ระดับองค์กร

โดยเนื้อแท้แล้ว อินสแตนซ์ของ FaaS จะมีลักษณะแบบไร้สถานะ (stateless)ข้อมูลใดๆ ที่สร้างขึ้นระหว่างการทำงานของฟังก์ชันซึ่งจำเป็นต้องคงอยู่ต่อไปหลังจากวงจรชีวิตของฟังก์ชันสิ้นสุดลง จะต้องถูกบันทึกลงในระบบจัดเก็บข้อมูลภายนอกก่อนที่การประมวลผลจะยุติลง

Backend-as-a-Service (BaaS)

BaaS ครอบคลุมบริการคลาวด์ภายนอกที่มีการจัดการอย่างสมบูรณ์ ซึ่งเข้ามาแทนที่ระบบแบ็กเอนด์แบบเดิมที่ต้องทำงานต่อเนื่องตลอดเวลา แทนที่จะต้องโฮสต์ กำหนดค่า และปรับขนาดเซิร์ฟเวอร์ฐานข้อมูลเชิงสัมพันธ์หรือเดมอนการยืนยันตัวตนโดยเฉพาะ ทีมพัฒนาสามารถเรียกใช้ความสามารถเหล่านี้ได้โดยตรงผ่าน Application Programming Interface (API) และ Software Development Kit (SDK) มาตรฐาน

องค์ประกอบหลักของ BaaS ประกอบด้วย:

  • ฐานข้อมูล NoSQL และฐานข้อมูลเชิงสัมพันธ์แบบมีการจัดการ: Amazon DynamoDB, Google Cloud Firestore, Azure Cosmos DB และเอนจินฐานข้อมูลเชิงสัมพันธ์แบบ Serverless เช่น Amazon Aurora Serverless

  • ผู้ให้บริการยืนยันตัวตนและการจัดการอัตลักษณ์ (Authentication & Identity Providers): AWS Cognito, Firebase Authentication, Auth0

  • ระบบจัดเก็บข้อมูลแบบมีการจัดการ: Amazon Simple Storage Service (S3), Google Cloud Storage, Azure Blob Storage

ทริกเกอร์ที่ขับเคลื่อนด้วยเหตุการณ์และการจัดสรรทรัพยากรแบบไดนามิก

ระบบ Serverless ทำงานบนรูปแบบสถาปัตยกรรมแบบขับเคลื่อนด้วยเหตุการณ์ (EDA: Event-Driven Architecture)แทนที่จะต้องคอย Polling อย่างต่อเนื่อง หรือเปิด Blocking Socket ค้างไว้เพื่อรอรับทราฟฟิกขาเข้า ฟังก์ชัน Serverless จะอยู่ในสถานะหยุดนิ่ง (dormant) จนกว่าแหล่งกำเนิดเหตุการณ์ที่ระบุไว้จะส่งเพย์โหลดออกมา

แหล่งที่มาของทริกเกอร์ระดับองค์กรที่พบได้บ่อย ได้แก่:

  1. การเรียกใช้งานแบบซิงโครนัสผ่าน HTTP/REST และ GraphQL: API gateway (เช่น AWS API Gateway, Azure API Management) จะรับคำขอจากไคลเอนต์, ตรวจสอบความถูกต้องของ TLS handshake, ประเมินโทเคนการอนุญาตสิทธิ์ (authorization tokens), แปลงเพย์โหลด HTTP ให้อยู่ในรูปของเหตุการณ์ JSON (JSON event) และเรียกใช้ FaaS handler ที่เกี่ยวข้อง

  2. การเปลี่ยนแปลงของ Object Storage แบบอะซิงโครนัส: การอัปโหลด ปรับเปลี่ยน หรือลบไฟล์ในออบเจกต์สตอเรจบัคเก็ต (เช่น การอัปโหลดไฟล์ PDF ไปยัง S3 bucket) จะส่งอีเวนต์ข้อมูลเมทาดาตา (metadata event) ที่ไปทริกเกอร์ฟังก์ชันประมวลผลปลายทางในทันที

  3. การดักจับการเปลี่ยนแปลงข้อมูลของฐานข้อมูล (CDC): สตรีมการแทรก (insert), อัปเดต (update) หรือลบ (delete) ที่ส่งออกมาจากฐานข้อมูลเชิงธุรกรรม (transactional databases เช่น DynamoDB Streams) จะทริกเกอร์ตัวประมวลผลสตรีมแบบอะซิงโครนัสสำหรับการตรวจสอบ (auditing), การทำดัชนีเพื่อการค้นหา (search indexing) หรือการล้างแคชที่ไม่ถูกต้อง (cache invalidation)

  4. เหตุการณ์ตามกำหนดการของ Cron: ระบบกำหนดการแบบคลาวด์เนทีฟ (เช่น Amazon EventBridge Scheduler) จะเรียกใช้ฟังก์ชันตามช่วงเวลา cron ที่ระบุ เพื่อจัดการงานบำรุงรักษาตามรอบปกติ การสร้างรายงาน หรือการซิงโครไนซ์ข้อมูล

บทบาทของคอนเทนเนอร์การประมวลผลแบบชั่วคราว (Ephemeral Compute Containers)

ในการรันโค้ดของผู้ใช้ที่ไม่น่าไว้วางใจและทำงานแบบมัลติเทแนนต์ (multi-tenant) ภายใต้ขอบเขตความปลอดภัยที่เข้มงวดและมีเวลาแฝงในการเริ่มทำงาน (startup latency) ต่ำ ผู้ให้บริการคลาวด์ระดับไฮเปอร์สเกลจึงนำเทคโนโลยีเวอร์ชวลไลเซชันที่สร้างขึ้นโดยเฉพาะมาใช้งาน แทนที่จะเป็นการเปิดตัว Docker container มาตรฐานหรือเวอร์ชวลแมชชีนระดับฮาร์ดแวร์ขนาดใหญ่ แพลตฟอร์ม FaaS ยุคใหม่จึงพึ่งพาเทคโนโลยี microVM.

ตัวอย่างเช่น AWS Lambda ใช้งานFirecrackerซึ่งเป็นเครื่องมือเวอร์ชวลไลเซชันแบบโอเพนซอร์สที่เขียนด้วยภาษา Rust โดยใช้ประโยชน์จาก Kernel-based Virtual Machine (KVM) ของ Linux Firecracker ช่วยให้สามารถสร้างและทำลาย microVM ที่มีความปลอดภัยและแยกส่วนได้อย่างสมบูรณ์ภายในเวลาไม่ถึง 5 มิลลิวินาที โดยใช้หน่วยความจำน้อยมาก (ประมาณ 5 MiB ต่อหนึ่ง microVM)

เมื่อทริกเกอร์เหตุการณ์ส่งมาถึง placement engine ของผู้ให้บริการคลาวด์:

  1. ตัวประสานระบบ (orchestrator) จะตรวจสอบสภาพแวดล้อมการทำงาน (execution environment) ที่พร้อมใช้งาน (warm) ซึ่งมี code artifact ที่ติดตั้งไว้แล้ว

  2. หากไม่มีสภาพแวดล้อมที่พร้อมใช้งาน ระบบจะจัดสรร microVM เฉพาะขึ้นมา กำหนดอินเทอร์เฟซเครือข่ายภายใน Virtual Private Cloud (VPC) เป้าหมาย กำหนดค่าเริ่มต้นให้กับรันไทม์เอนจิน (เช่น ตัวแปลคำสั่ง Node.js หรือ Python) และโหลดดีเพนเดนซีภายนอก

  3. เพย์โหลดของเหตุการณ์ (event payload) จะถูกส่งเข้าสู่ function handler

  4. เมื่อการประมวลผลเสร็จสิ้น microVM จะถูกคงสถานะไว้ชั่วคราวในโหมดสแตนด์บายแบบ "warm" เป็นเวลาหลายนาที เพื่อรองรับการเรียกใช้งานในครั้งถัดไปในทันที ก่อนที่จะถูกยุติการทำงานและคืนทรัพยากร

ข้อได้เปรียบทางธุรกิจ: เหตุใดองค์กรจึงนำ Serverless มาใช้

การนำโมเดลการประมวลผลแบบ serverless มาใช้ก่อให้เกิดข้อได้เปรียบเชิงกลยุทธ์ที่มากกว่าแค่ความสะดวกสบายของฝ่ายวิศวกรรม โดยส่งผลโดยตรงต่อความคล่องตัวขององค์กร ค่าใช้จ่ายในการดำเนินงาน (operational expenditure) และความยืดหยุ่นทนทานโดยรวมของระบบ

ลดระยะเวลาในการนำผลิตภัณฑ์ออกสู่ตลาดสำหรับทีมพัฒนา

ในสภาพแวดล้อมการพัฒนาซอฟต์แวร์แบบดั้งเดิม การจัดเตรียมโครงสร้างพื้นฐานสำหรับไมโครเซอร์วิสใหม่ต้องอาศัยการประสานงานระหว่างทีมอย่างกว้างขวาง นักพัฒนาต้องเปิดทิกเก็ตไปยังทีมวิศวกรรมโครงสร้างพื้นฐานหรือทีมแพลตฟอร์มเพื่อกำหนดค่าเวอร์ชวลแมชชีน ตั้งค่า Kubernetes namespace กำหนด subnet สร้าง load balancer listener และกำหนดค่าไปป์ไลน์การติดตั้งระบบ (deployment pipeline) ความล่าช้าจากการประสานงานนี้มักทำให้เกิดความล่าช้าเป็นเวลาหลายวันหรือหลายสัปดาห์ ก่อนที่โค้ดสำหรับโปรดักชันจะได้รับการทดสอบกับทราฟฟิกของผู้ใช้จริง

สถาปัตยกรรม Serverless แยกการพัฒนาฟีเจอร์ออกจากการกำหนดค่าโครงสร้างพื้นฐานอย่างสิ้นเชิง วิศวกรผลิตภัณฑ์เขียนลอจิกเฉพาะโดเมน กำหนดสิทธิ์ที่จำเป็นผ่านเฟรมเวิร์ก Infrastructure-as-Code (IaC) แบบประกาศค่า (declarative) เช่น AWS Serverless Application Model (SAM), Terraform หรือ Serverless Framework และติดตั้งใช้งานบนสภาพแวดล้อมระดับโปรดักชันได้โดยตรงภายในไม่กี่นาที ไปป์ไลน์การผสานรวมอย่างต่อเนื่องและการส่งมอบอย่างต่อเนื่อง (CI/CD) มีความเรียบง่ายยิ่งขึ้น ช่วยให้ทีมวิศวกรรมที่มีความคล่องตัวสามารถปล่อยการอัปเดตได้อย่างต่อเนื่องและตรวจสอบสมมติฐานทางธุรกิจโดยใช้ระยะเวลารอน้อยที่สุด

โมเดลการเงินแบบจ่ายตามการใช้งานจริง (Pay-As-You-Go)

การติดตั้งระบบบนคลาวด์แบบดั้งเดิมกำหนดให้องค์กรต้องจัดเตรียมความสามารถในการประมวลผล (capacity) สำหรับรองรับช่วงความต้องการสูงสุดที่คาดการณ์ไว้ เว็บแอปพลิเคชันที่พบทราฟฟิกสูงสุดระหว่างเวลา 09:00 ถึง 17:00 น. จำเป็นต้องรักษาอินสแตนซ์การประมวลผลที่จัดเตรียมไว้ตลอดช่วงนอกเวลาเร่งด่วนและวันหยุดสุดสัปดาห์ ส่งผลให้เกิดการใช้ทรัพยากรที่ไม่คุ้มค่าอย่างมีนัยสำคัญ

TRADITIONAL PROVISIONING (IaaS / Fixed VMs)
Resource Capacity ------------------------------------------ [Provisioned Peak Overhead]
Actual Load       ~~/\~~~~/\~~~~/\~~~~~~~~~~~~~~~~~~~~~~~~~~ [Wasted Idle Compute Cost]

SERVERLESS METERED EXECUTION (FaaS)
Cost & Compute    ~~/\~~~~/\~~~~/\~~~~~~~~~~~~~~~~~~~~~~~~~~ [Zero Baseline Cost When Idle]

การประมวลผลแบบ Serverless ใช้โมเดลการคิดราคาตามปริมาณการใช้งานจริงอย่างแท้จริง เมื่อทราฟฟิกของผู้ใช้ลดลงเป็นศูนย์ ค่าใช้จ่ายด้านการประมวลผลที่เรียกเก็บจะลดลงเหลือศูนย์อย่างแท้จริง เมื่อทราฟฟิกพุ่งสูงขึ้น ค่าบริการจะปรับขนาดตามสัดส่วนของธุรกรรมที่ดำเนินการอย่างเคร่งครัด ยิ่งไปกว่านั้น ราคาการประมวลผลยังวัดผลในระดับหน่วยย่อยอย่างละเอียด (โดยทั่วไปคือช่วงละ 1 มิลลิวินาที)

พิจารณาตัวอย่างบริการตรวจสอบความถูกต้องของธุรกรรมทางการเงินที่ทำงานบน AWS Lambda:

  • หน่วยความจำที่จัดสรร: 512 MB

  • ระยะเวลาการประมวลผลเฉลี่ย: 45 มิลลิวินาที

  • จำนวนการเรียกใช้งานรายเดือน: 10,000,000 คำขอ

ภายใต้โมเดลการคิดค่าใช้จ่ายตามการใช้งานของ serverless องค์กรจะเสียค่าใช้จ่ายในการประมวลผลตามเวลาการทำงานรวม 450,000 วินาทีอย่างเคร่งครัด โดยหลีกเลี่ยงค่าใช้จ่ายรายเดือนหลายร้อยดอลลาร์ในการดูแลรักษาคลัสเตอร์เวอร์ชวลแมชชีนแบบสำรองที่จัดสรรไว้ล่วงหน้าข้ามหลาย Availability Zone ได้อย่างสมบูรณ์

การปรับขนาดอัตโนมัติและความพร้อมใช้งานสูง

การปรับขนาดคลัสเตอร์เซิร์ฟเวอร์แบบดั้งเดิมจำเป็นต้องกำหนดค่าเมตริกที่ซับซ้อน เช่น เกณฑ์การใช้งาน CPU เฉลี่ย, เปอร์เซ็นต์ความอิ่มตัวของหน่วยความจำ หรือจำนวนการเชื่อมต่อที่ใช้งานอยู่ เพื่อทริกเกอร์นโยบายการปรับขนาดอัตโนมัติ (auto-scaling) กลไกการปรับขนาดเหล่านี้มักประสบปัญหาความล่าช้าในการตอบสนอง (inertia) โดยการเริ่มทำงานของเครื่องเสมือน (virtual machine) หรือโหนดคอนเทนเนอร์ใหม่อาจใช้เวลาตั้งแต่ 2 ถึง 8 นาที ซึ่งในช่วงเวลาดังกล่าว ปริมาณการใช้งานที่พุ่งสูงขึ้นอย่างกะทันหันอาจทำให้โหนดที่ทำงานอยู่รับภาระเกินกำลัง และส่งผลให้ประสบการณ์การใช้งานของผู้ใช้ลดลงหรือเกิดปัญหาระบบล่มต่อเนื่องเป็นทอดๆ (cascading outages)

แพลตฟอร์มเซิร์ฟเวอร์เลสสามารถปรับขนาดในแนวนอนและเป็นไปอย่างอิสระโดยอัตโนมัติในระดับคำขอ (request) แต่ละรายการ:

  • หากมีคำขอเข้ามา 1 รายการ ผู้ให้บริการคลาวด์จะรันอินสแตนซ์ microVM จำนวน 1 ตัว

  • หากมีคำขอพร้อมกัน (concurrent requests) เข้ามา 5,000 รายการในเวลาเดียวกัน แพลตฟอร์มจะจัดเตรียมสภาพแวดล้อมการทำงานที่แยกจากกันได้สูงสุดถึง 5,000 ชุดภายในเวลาไม่กี่มิลลิวินาที โดยขึ้นอยู่กับขีดจำกัดความปลอดภัยของจำนวนการทำงานพร้อมกันในระดับภูมิภาคเท่านั้น

  • ความพร้อมใช้งานสูง (High availability) ถูกผสานรวมเข้ากับสถาปัตยกรรมของแพลตฟอร์มตั้งแต่เริ่มต้นโดยค่าเริ่มต้น ผู้ให้บริการระดับไฮเปอร์สเกลจะกระจายเวิร์กโหลดเซิร์ฟเวอร์เลสไปยัง Availability Zones ทางกายภาพที่แยกจากกันอย่างน้อยสามแห่งภายในภูมิภาค ช่วยให้มั่นใจได้ถึงความยืดหยุ่นในการกู้คืนจากภัยพิบัติระดับองค์กร โดยไม่ต้องอาศัยการแทรกแซงเฉพาะทางจากวิศวกรความน่าเชื่อถือของไซต์ (SRE)

ความเสี่ยงและข้อจำกัดที่สำคัญ (มุมมองเพื่อการตระหนักรู้และระมัดระวัง)

แม้จะมีประสิทธิภาพในการดำเนินงาน แต่สถาปัตยกรรมเซิร์ฟเวอร์เลสก็ก่อให้เกิดข้อจำกัดทางเทคนิคและความซับซ้อนในการปฏิบัติการที่ชัดเจน ซึ่งทำให้ไม่เหมาะสมสำหรับเวิร์กโหลดระดับองค์กรบางประเภท ผู้นำด้านสถาปัตยกรรมระบบต้องประเมินข้อจำกัดเหล่านี้อย่างละเอียดรอบคอบก่อนเริ่มต้นการย้ายแพลตฟอร์ม

ภัยคุกคามจากการผูกขาดโดยผู้ให้บริการ (Vendor Lock-In)

สถาปัตยกรรมเซิร์ฟเวอร์เลสจะช่วยเพิ่มความเร็วในการพัฒนาได้อย่างสูงสุดเมื่อทีมวิศวกรรมผสานรวมบริการที่เป็นกรรมสิทธิ์ของผู้ให้บริการคลาวด์อย่างลึกซึ้ง อย่างไรก็ตาม การเชื่อมโยงอย่างแนบแน่นนี้ก่อให้เกิดต้นทุนในการสลับเปลี่ยนผู้ให้บริการ (switching costs) ที่สูงมาก

ซึ่งแตกต่างจากแอปพลิเคชันแบบคอนเทนเนอร์มาตรฐานที่สร้างขึ้นบน Docker และจัดการด้วย Kubernetes ซึ่งสามารถย้ายข้ามระหว่าง AWS, Microsoft Azure, Google Cloud Platform หรือศูนย์ข้อมูลในองค์กร (on-premises) ได้อย่างทัดเทียมกัน แอปพลิเคชันเซิร์ฟเวอร์เลสจะผูกติดอย่างลึกซึ้งกับระบบนิเวศเฉพาะของผู้ให้บริการแต่ละราย:

  • แบบแผนเหตุการณ์ (Event Schemas): เพย์โหลดของเหตุการณ์ (event payloads) ที่สร้างโดย AWS S3, Azure Event Grid หรือ Google Cloud Pub/Sub จะเป็นไปตามมาตรฐานรูปแบบที่เป็นกรรมสิทธิ์เฉพาะ

  • API การประมวลผล (Execution APIs): อินเทอร์เฟซตัวจัดการฟังก์ชัน (function handler), การกำหนดบทบาทความปลอดภัย และออบเจกต์บริบท (context objects) ล้วนมีความเฉพาะเจาะจงตามแต่ละแพลตฟอร์ม

  • การผสานรวม BaaS ส่วนเสริม (Peripheral BaaS Integration): การย้ายแอปพลิเคชันที่ต้องพึ่งพา Amazon DynamoDB Streams, Step Functions และ API Gateway ไปยัง Google Cloud จำเป็นต้องเขียนเลเยอร์การผสานรวมโครงสร้างพื้นฐานและระดับการเข้าถึงข้อมูล (data access tiers) ใหม่เป็นส่วนใหญ่

คอขวดด้านประสิทธิภาพ: การรับมือกับ "Cold Starts"

Cold start เกิดขึ้นเมื่อเหตุการณ์ที่ส่งเข้ามาทริกเกอร์ฟังก์ชันเซิร์ฟเวอร์เลสที่ยังไม่มีสภาพแวดล้อมการทำงานที่พร้อมใช้งานและวอร์มเตรียมไว้ล่วงหน้า (pre-warmed) แพลตฟอร์มคลาวด์จะต้องจัดเตรียมคอนเทนเนอร์ microVM ใหม่, กำหนดค่าเริ่มต้นให้กับรันไทม์เอนจิน, โหลดไบนารีของแอปพลิเคชันและไลบรารีภายนอก, ประมวลผลโค้ดการกำหนดค่าเริ่มต้นส่วนกลาง แล้วจึงสั่งรันตัวจัดการ (handler)

+-----------------------------------------------------------------------------------+
|                                 COLD START TIMELINE                               |
+--------------------------+---------------------------+----------------------------+
| 1. MicroVM Allocation    | 2. Runtime Initialization | 3. User Code Execution     |
| (Platform Overhead: 5ms) | (Engine & Libs: 100-800ms)| (Domain Handler: 10-50ms)  |
+--------------------------+---------------------------+----------------------------+
|<----------------- LATENCY SPIKE (100 - 1000ms+) --------------------------------->|

เวลาแฝงของ cold start แตกต่างกันอย่างมากตามตัวเลือกรันไทม์และขนาดของการปรับใช้ (deployment size):

  • รันไทม์แบบอินเทอร์พรีตที่มีขนาดเบา (Lightweight Interpreted Runtimes): โดยทั่วไป Node.js และ Python จะมี cold start อยู่ระหว่าง 100ms ถึง 300ms

  • รันไทม์แบบคอมไพล์และมีขนาดใหญ่ (Compiled & Heavy Runtimes): รันไทม์ Java Virtual Machine (JVM) และ .NET มักพบเวลาแฝงของ cold start ตั้งแต่ 1,000ms ถึงมากกว่า 3,000ms เนื่องจากการโหลดคลาส (classloading) ที่มีภาระหนัก และภาระงานเพิ่มเติมในการเริ่มต้นเฟรมเวิร์ก (เช่น Spring Boot)

  • การแนบ VPC ENI (VPC ENI Attachment): แม้ว่าไฮเปอร์ไวเซอร์บนคลาวด์ยุคใหม่จะช่วยลดเวลาในการแนบ VPC ลงได้อย่างมาก แต่การรันฟังก์ชันภายใน VPC ขององค์กรที่ซับซ้อนพร้อมกฎไฟร์วอลล์ที่เข้มงวด ยังคงก่อให้เกิดภาระงานเพิ่มเติมเล็กน้อยในกระบวนการกำหนดค่าเริ่มต้น

สำหรับแอปพลิเคชันแบบเรียลไทม์ที่มีเวลาแฝงต่ำ เช่น การซื้อขายด้วยอัลกอริทึมความถี่สูง (high-frequency algorithmic trading), กระบวนการชำระเงินทางการเงินที่ต้องเสร็จสิ้นในระดับเสี้ยววินาที หรือระบบหลังบ้านของเกมแบบโต้ตอบ การพุ่งสูงขึ้นของเวลาแฝงจาก cold start ที่คาดเดาไม่ได้อาจทำให้ละเมิดข้อตกลงระดับการให้บริการ (SLAs) ที่เข้มงวดได้

การปรับขนาดต้นทุนที่คาดเดาไม่ได้และความท้าทายด้าน FinOps

แม้ว่าเซิร์ฟเวอร์เลสจะมอบความคุ้มค่าด้านต้นทุนอย่างยิ่งยวดสำหรับเวิร์กโหลดที่เกิดขึ้นเป็นช่วงๆ กระจัดกระจาย หรือมีปริมาณพุ่งสูงเป็นระลอก (bursty) แต่ข้อได้เปรียบทางเศรษฐศาสตร์นี้จะลดลงสำหรับโหลดการทำงานที่ต่อเนื่องและมีอัตราการประมวลผลสูง (high-throughput) อย่างสม่ำเสมอ

เนื่องจากราคาจะแปรผันตรงกับจำนวนการประมวลผลและเมตริกระยะเวลาการใช้งานหน่วยความจำ เวิร์กโหลดปริมาณมากที่ทำงานตลอด 24 ชั่วโมงทุกวันโดยไม่มีช่วงเวลาที่ระบบว่าง (idle) อย่างมีนัยสำคัญ อาจมีค่าใช้จ่ายบน FaaS ที่สูงกว่ามากเมื่อเทียบกับอินสแตนซ์คอนเทนเนอร์แบบเฉพาะเจาะจง (เช่น AWS ECS, EKS) หรือเครื่องเสมือนแบบเหมาจ่าย (reserved virtual machines)

นอกจากนี้ ลูปการประมวลผลแบบเรียกซ้ำ (recursive execution loops) หรือการโจมตีแบบ DDoS แบบกระจายที่เกิดขึ้นโดยไม่ได้ตั้งใจ อาจนำไปสู่ความผิดปกติของยอดเรียกเก็บเงินได้:

  • ฟังก์ชันที่มีข้อผิดพลาดซึ่งเขียนไฟล์ลงใน S3 bucket แล้วไปทริกเกอร์อีกฟังก์ชันหนึ่งให้เขียนลงใน bucket เดียวกัน สามารถก่อให้เกิดลูปการเรียกซ้ำที่ไม่สามารถควบคุมได้ ซึ่งอาจทำงานไปหลายล้านครั้งภายในไม่กี่นาที

  • หากไม่มีการแจ้งเตือนยอดเรียกเก็บเงินที่เข้มงวด โควตาการใช้จ่าย และการจำกัดจำนวนการทำงานพร้อมกันในระดับฟังก์ชัน (function-level concurrency throttles) องค์กรอาจต้องเผชิญกับค่าใช้จ่ายคลาวด์ที่พุ่งสูงขึ้นอย่างรุนแรงและไม่คาดคิด

ความซับซ้อนในการดีบัก การมอนิเตอร์ และความปลอดภัย

การแยกย่อยแอปพลิเคชันแบบ Monolith ให้กลายเป็นฟังก์ชัน Serverless แบบกระจายศูนย์หลายร้อยฟังก์ชันนั้น เพิ่มพื้นที่ผิวของระบบ (System surface area) และก่อให้เกิดความท้าทายด้านความสามารถในการสังเกตระบบ (Observability):

  • ข้อจำกัดในการดีบักบนเครื่อง Local: การจำลองโทโพโลยีที่สมบูรณ์ของตัวทริกเกอร์เหตุการณ์แบบ Cloud-native, นโยบายสิทธิ์ IAM และฐานข้อมูล BaaS บนเวิร์กสเตชันของนักพัฒนาในเครื่อง Local นั้นยากเป็นพิเศษ ส่งผลให้จำเป็นต้องพึ่งพาแซนด์บ็อกซ์การพัฒนาบนคลาวด์ระยะไกล

  • การติดตามแบบกระจายศูนย์ (Distributed Tracing): การวินิจฉัยคำขอที่ล้มเหลวซึ่งเดินทางผ่าน API Gateway, ฟังก์ชัน FaaS ต่อเนื่องกันสามตัว, คิวข้อความสองแห่ง (เช่น Amazon SQS) และฐานข้อมูล NoSQL แบบ Managed จำเป็นต้องใช้เครื่องมือ Distributed Tracing ที่แข็งแกร่ง เช่น AWS X-Ray, OpenTelemetry, Datadog หรือ Honeycomb

  • การเพิ่มขึ้นอย่างมหาศาลของสิทธิ์ IAM (IAM Permission Explosion): แนวทางปฏิบัติที่ดีที่สุดด้านความปลอดภัยแบบละเอียด (Fine-grained security) กำหนดให้แต่ละฟังก์ชันต้องปฏิบัติตามหลักการให้สิทธิ์เท่าที่จำเป็น (Principle of Least Privilege) ซึ่งในระบบระดับองค์กรขนาดใหญ่ การจัดการบทบาท IAM (IAM Roles), นโยบายตามทรัพยากร (Resource-based policies) และการควบคุมการเข้าถึงข้ามบัญชีนับพันรายการ ก่อให้เกิดความซับซ้อนในการบริหารจัดการอย่างมาก

ข้อดีและข้อควรพิจารณา

การประเมินสถาปัตยกรรม Serverless

ข้อได้เปรียบเชิงกลยุทธ์ทางสถาปัตยกรรมเมื่อเปรียบเทียบกับข้อจำกัดด้านการปฏิบัติการ

ข้อดี

3 ข้อดี

ไม่ต้องบริหารจัดการโครงสร้างพื้นฐาน

ขจัดภาระการดูแลรักษาระบบปฏิบัติการ การแพตช์ความปลอดภัย และงานปรับขนาดระบบด้วยตนเองโดยสิ้นเชิง

การคิดค่าบริการตามการใช้งานจริงอย่างละเอียด

การเรียกเก็บเงินจะผูกอยู่กับการประมวลผลจริงในระดับมิลลิวินาทีอย่างเคร่งครัด โดยไม่มีค่าใช้จ่ายพื้นฐานเมื่อระบบไม่ได้ทำงาน

ความสามารถในการปรับขนาดอัตโนมัติได้ในทันที

ทรัพยากรประมวลผลจะจัดสรรแบบไดนามิกตั้งแต่ศูนย์ไปจนถึงหลายพันอินสแตนซ์ที่ทำงานพร้อมกันได้ภายในเวลาไม่กี่มิลลิวินาที

!

ข้อควรพิจารณา

3 ข้อควรพิจารณา

!

ความผันผวนของความหน่วงจากการเกิด Cold Start

Runtime สภาพแวดล้อมการทำงานที่ยังไม่ได้เตรียมพร้อม (Unwarmed) ทำให้เกิดความหน่วงพุ่งสูงตั้งแต่ 100ms ไปจนถึงหลายวินาที

!

การผูกติดกับเทคโนโลยีเฉพาะของผู้ให้บริการในระดับสูง

การผสานการทำงานเชิงลึกกับการกำหนดเส้นทางเหตุการณ์และบริการ BaaS เฉพาะของผู้ให้บริการ ทำให้การย้ายระบบข้ามมัลติคลาวด์ทำได้จำกัด

!

ความไม่คุ้มค่าของต้นทุนเมื่อมีปริมาณงานสูงต่อเนื่อง

เวิร์กโหลดต่อเนื่องตลอด 24 ชั่วโมง 7 วันที่ยาวนานมักจะมีราคาแพงกว่าการจองโครงสร้างพื้นฐานแบบ Containerized

การเปรียบเทียบสถาปัตยกรรม: การค้นหารูปแบบที่เหมาะสมที่สุด

การเลือกโมเดลโครงสร้างพื้นฐานที่เหมาะสมจำเป็นต้องประเมินข้อกำหนดทางเทคนิคควบคู่ไปกับความสามารถของทีมและพารามิเตอร์ด้านต้นทุน

Serverless เทียบกับสถาปัตยกรรมแบบ Monolith ดั้งเดิม

สถาปัตยกรรมแบบ Monolith จะรวมแอปพลิเคชันทั้งหมด—ทั้งส่วนแสดงผลผู้ใช้, ตรรกะทางธุรกิจ และเลเยอร์การเข้าถึงข้อมูล—ไว้ในไฟล์ไบนารีเดียวที่นำไปปรับใช้และรันบนเซิร์ฟเวอร์แบบถาวรได้

มิติการเปรียบเทียบสถาปัตยกรรมแบบ Monolithicสถาปัตยกรรมแบบ Serverless
หน่วยของการปรับใช้ (Deployment Unit)ไฟล์ไบนารี / WAR / Executable ขนาดใหญ่เพียงไฟล์เดียวฟังก์ชันอิสระที่ทำงานเพื่อวัตถุประสงค์เดียว
ระดับความละเอียดในการปรับขนาด (Scaling Granularity)ปรับขนาดทั้งแอปพลิเคชัน Monolith พร้อมกันปรับขนาดแต่ละฟังก์ชันทางธุรกิจได้อย่างอิสระ
การแยกส่วนข้อผิดพลาด (Fault Isolation)ต่ำ ความจำรั่วไหล (Memory Leak) หรือการแครชเพียงจุดเดียวสามารถทำให้ทั้งระบบล่มได้สูง ข้อยกเว้นที่ไม่ได้รับการจัดการ (Unhandled Exception) ในฟังก์ชันหนึ่งจะไม่ส่งผลกระทบต่อบริการอื่นๆ
ความหลากหลายของเทคโนโลยีสภาพแวดล้อมรันไทม์ของภาษาและเฟรมเวิร์กเป็นแบบเดียวกันทั้งหมด (Homogeneous)รองรับหลายภาษา (Polyglot) ฟังก์ชันที่แตกต่างกันสามารถรัน Node.js, Python, Go หรือ Java ได้
ภาระงานในการดูแลระบบ (Operational Overhead)สูง มีการจัดการโครงสร้างพื้นฐานอย่างต่อเนื่องต่ำ ผู้ให้บริการคลาวด์เป็นผู้จัดการและซ่อนความซับซ้อนไว้ทั้งหมด

หน่วยของการปรับใช้ (Deployment Unit)

สถาปัตยกรรมแบบ Monolithic

ไฟล์ไบนารี / WAR / Executable ขนาดใหญ่เพียงไฟล์เดียว

สถาปัตยกรรมแบบ Serverless

ฟังก์ชันอิสระที่ทำงานเพื่อวัตถุประสงค์เดียว

ระดับความละเอียดในการปรับขนาด (Scaling Granularity)

สถาปัตยกรรมแบบ Monolithic

ปรับขนาดทั้งแอปพลิเคชัน Monolith พร้อมกัน

สถาปัตยกรรมแบบ Serverless

ปรับขนาดแต่ละฟังก์ชันทางธุรกิจได้อย่างอิสระ

การแยกส่วนข้อผิดพลาด (Fault Isolation)

สถาปัตยกรรมแบบ Monolithic

ต่ำ ความจำรั่วไหล (Memory Leak) หรือการแครชเพียงจุดเดียวสามารถทำให้ทั้งระบบล่มได้

สถาปัตยกรรมแบบ Serverless

สูง ข้อยกเว้นที่ไม่ได้รับการจัดการ (Unhandled Exception) ในฟังก์ชันหนึ่งจะไม่ส่งผลกระทบต่อบริการอื่นๆ

ความหลากหลายของเทคโนโลยี

สถาปัตยกรรมแบบ Monolithic

สภาพแวดล้อมรันไทม์ของภาษาและเฟรมเวิร์กเป็นแบบเดียวกันทั้งหมด (Homogeneous)

สถาปัตยกรรมแบบ Serverless

รองรับหลายภาษา (Polyglot) ฟังก์ชันที่แตกต่างกันสามารถรัน Node.js, Python, Go หรือ Java ได้

ภาระงานในการดูแลระบบ (Operational Overhead)

สถาปัตยกรรมแบบ Monolithic

สูง มีการจัดการโครงสร้างพื้นฐานอย่างต่อเนื่อง

สถาปัตยกรรมแบบ Serverless

ต่ำ ผู้ให้บริการคลาวด์เป็นผู้จัดการและซ่อนความซับซ้อนไว้ทั้งหมด

สถาปัตยกรรมแบบ Monolith ยังคงเป็นทางเลือกที่เหมาะสมสำหรับ MVP ในระยะเริ่มต้นที่มีโมเดลโดเมนเชื่อมโยงกันอย่างแนบแน่น หรือทีมพัฒนาขนาดเล็กที่ภาระงานด้านระบบกระจายศูนย์ (Distributed Systems) อาจทำให้ความเร็วในการพัฒนาลดลง อย่างไรก็ตาม เมื่อองค์กรขยายขนาดขึ้น สถาปัตยกรรมแบบ Serverless ที่แยกส่วนออกจากกัน (Decoupled Architectures) จะช่วยป้องกันข้อขัดแย้งของโค้ดและทำให้สามารถปรับขนาดบริการแต่ละส่วนได้อย่างเป็นอิสระ

Serverless เทียบกับ Containerization (Kubernetes & Docker)

Containerization คือการแพ็กรวมโค้ดแอปพลิเคชันเข้ากับไฟล์ซิสเต็มของระบบปฏิบัติการแบบสมบูรณ์ ไลบรารีของระบบ และส่วนประกอบที่ต้องใช้ในการรัน (Runtime Dependencies) ให้อยู่ในรูปของ OCI Container Image มาตรฐาน ซึ่งบริหารจัดการผ่านแพลตฟอร์มอย่าง Kubernetes (EKS, GKE, AKS)

  • การควบคุมและการพกพา (Control & Portability): Kubernetes ให้การควบคุมที่สมบูรณ์ครอบคลุมทั้งเน็ตเวิร์กสแต็ก พารามิเตอร์เคอร์เนล เซอร์วิสเมช (เช่น Istio) และฮาร์ดแวร์เร่งความเร็ว (GPU) เวิร์กโหลดที่อยู่ในคอนเทนเนอร์สามารถทำงานได้เหมือนกันทุกประการบน AWS ดาต้าเซ็นเตอร์แบบ Bare-metal ภายในองค์กร หรือเครื่องของนักพัฒนาในเครื่องโลคอล ในขณะที่ Serverless ยอมแลกการควบคุมระดับล่างนี้เพื่อให้ปราศจากภาระในการดูแลระบบ

  • การใช้ประโยชน์จากทรัพยากร (Resource Utilization): คอนเทนเนอร์ต้องการการจัดการขีดความสามารถของคลัสเตอร์ หากคลัสเตอร์ Worker Node ของ Kubernetes ถูกจัดสรรไว้ที่ 64 CPU องค์กรจะต้องจ่ายค่าใช้จ่ายสำหรับ 64 CPU นั้น ไม่ว่าคอนเทนเนอร์ของแอปพลิเคชันจะใช้งานจริง 5% หรือ 95% ของความจุหรือไม่ก็ตาม ส่วน Serverless จะจัดสรรขีดความสามารถในการประมวลผลตามความต้องการใช้งานจริงอย่างเคร่งครัด

  • ระยะเวลาในการประมวลผล (Execution Lifespan): คอนเทนเนอร์ถูกออกแบบมาสำหรับโพรเซสที่ทำงานต่อเนื่องยาวนาน (เช่น WebSockets, Background Worker ที่ทำงานตลอดเวลา) ส่วนแพลตฟอร์ม FaaS จะบังคับใช้การจำกัดเวลาประมวลผลอย่างเคร่งครัด (AWS Lambda กำหนดขีดจำกัดสูงสุดไว้ที่ 15 นาทีต่อการเรียกใช้งานหนึ่งครั้ง)

Serverless เทียบกับ Platform-as-a-Service (PaaS)

โซลูชัน Platform-as-a-Service เช่น Heroku, AWS Elastic Beanstalk และ Google App Engine ทำหน้าที่ซ่อนความซับซ้อนของฮาร์ดแวร์และระบบปฏิบัติการเบื้องหลัง โดยยังคงรักษาโมเดลการประมวลผลแอปพลิเคชันที่เน้นเซิร์ฟเวอร์แบบดั้งเดิมเอาไว้

  • กลไกการปรับขนาด (Scaling Mechanics): แพลตฟอร์ม PaaS มักจะปรับขนาดอินสแตนซ์ของแอปพลิเคชัน (Dyno หรือ Web Worker) ตามเมตริกแบบกว้างๆ เช่น เวลาตอบสนอง หรือการใช้งาน CPU โดยทั่วไปแล้วแพลตฟอร์มเหล่านี้จะไม่ปรับขนาดลงจนเหลือศูนย์จริงโดยค่าเริ่มต้น หากไม่ยอมรับผลกระทบเรื่อง Cold-start ซึ่งทำให้ยังคงมีค่าใช้จ่ายพื้นฐานเกิดขึ้นอย่างต่อเนื่อง

  • โมเดลการเรียกใช้งาน (Invocation Model): แอปพลิเคชันบน PaaS เป็นเว็บเซิร์ฟเวอร์ที่ทำงานต่อเนื่องยาวนาน (เช่น Express.js, Django, Ruby on Rails) ซึ่งคอยรอรับคำขอผ่านพอร์ตเครือข่ายตลอดเวลา ส่วนแอปพลิเคชันแบบ Serverless จะประมวลผลชั่วคราวผ่านทริกเกอร์เหตุการณ์และยุติการทำงานลงทันทีที่ทำงานเฉพาะหน้านั้นเสร็จสิ้น

INFRASTRUCTURE ABSTRACTION SPECTRUM
[Bare Metal / IaaS] ----> [Containers / K8s] ----> [PaaS] ----> [Serverless FaaS/BaaS]
<--- Maximum Infrastructure Control                             Maximum Developer Velocity --->
<--- High Operational Maintenance Overhead                      Zero Operational Maintenance Overhead --->

กรณีการใช้งานระดับองค์กรที่มีมูลค่าสูงสำหรับ Serverless

การปรับใช้สถาปัตยกรรม Serverless จะให้ผลตอบแทนจากการลงทุนสูงสุดเมื่อนำไปใช้กับเวิร์กโหลดที่ขับเคลื่อนด้วยเหตุการณ์ ทำงานแบบอะซิงโครนัส หรือมีความผันผวนสูงมาก

การประมวลผลข้อมูลและไฟล์แบบอะซิงโครนัส

แอปพลิเคชันระดับองค์กรมักต้องการการประมวลผลสื่อ การแปลงเอกสาร และงานสกัดข้อมูลแบบแบทช์ที่ทำงานแบบอะซิงโครนัสอยู่เป็นประจำ

สถานการณ์จำลองการนำไปใช้งานจริง

แพลตฟอร์มอีคอมเมิร์ซอนุญาตให้ผู้ขายระดับองค์กรอัปโหลดแคตตาล็อกสินค้าผ่านไฟล์ CSV ขนาดใหญ่และรูปภาพสินค้าที่มีความละเอียดสูง:

  1. ผู้ใช้อัปโหลดรูปภาพขนาด 50 MB ไปยัง Amazon S3 Bucket โดยตรงผ่าน Pre-signed URL ที่ปลอดภัย

  2. เหตุการณ์ S3ObjectCreatedจะเรียกใช้ฟังก์ชันประมวลผลรูปภาพแบบ Serverless โดยอัตโนมัติ

  3. ฟังก์ชันจะปรับขนาดรูปภาพต้นฉบับให้เป็นภาพขนาดย่อ (Thumbnail) 5 ความละเอียดที่แตกต่างกัน สร้างไฟล์ในฟอร์แมต WebP ใส่ลายน้ำ และเขียนไฟล์ผลลัพธ์กลับไปยัง Bucket ของแอสเซตที่เป็นสาธารณะ

  4. ในเวลาเดียวกัน ฟังก์ชันที่สองจะดึงข้อมูลเมทาดาตาของรูปภาพและอัปเดตฐานข้อมูลแคตตาล็อกสินค้า

  5. โครงสร้างพื้นฐานการประมวลผลทั้งหมดจะปรับขนาดได้ในทันที จากศูนย์ในช่วงเวลาที่ไม่มีการใช้งาน ไปจนถึงการประมวลผลพร้อมกันหลายร้อยรายการเมื่อผู้ขายอัปโหลดชุดแอสเซตขนาดใหญ่ ทำให้งานประมวลผลขนาดใหญ่เสร็จสิ้นได้โดยไม่ต้องจัดเตรียมเซิร์ฟเวอร์ฟาร์มเฉพาะสำหรับการเข้ารหัสสื่อ

การประมวลผลสตรีมแบบเรียลไทม์และแบ็กเอนด์สำหรับ IoT

การนำระบบ Internet of Things (IoT) ไปใช้งาน ระบบจัดการยานพาหนะที่เชื่อมต่ออินเทอร์เน็ต และแพลตฟอร์มการวิเคราะห์ Clickstream สร้างข้อมูลเหตุการณ์แบบอนุกรมเวลา (Time-series) ปริมาณมหาศาล ซึ่งมีความผันผวนอย่างมากตามปัจจัยด้านสภาพแวดล้อมภายนอก

  • การรับข้อมูล Telemetry เข้าสู่ระบบ (Telemetry Ingestion): เซ็นเซอร์ IoT นับล้านตัวจะส่งเพย์โหลดข้อมูล telemetry ผ่าน MQTT หรือ HTTPS ไปยังสตรีมรับข้อมูล (เช่น AWS Kinesis Data Streams หรือ Azure Event Hubs)

  • การประมวลผลสตรีมข้อมูล (Stream Processing): ฟังก์ชันประมวลผลสตรีมแบบ Serverless จะดึงข้อมูลจาก Stream Shard ในรูปแบบ Micro-batch โดยอัตโนมัติ เพื่อประเมินชุดข้อมูลเทียบกับกฎตรวจจับความผิดปกติ รันตรรกะทางธุรกิจ (เช่น แจ้งเตือนผู้ควบคุมหากอุณหภูมิเครื่องจักรเกินเกณฑ์ความปลอดภัย) และส่งต่อข้อมูลที่ผ่านการจัดระเบียบแล้วไปยังระบบจัดเก็บข้อมูลเชิงวิเคราะห์แบบ Cold Storage (เช่น Snowflake, Amazon Redshift หรือ BigQuery)

  • การรองรับความยืดหยุ่น (Elastic Handling): ระหว่างช่วงการเปลี่ยนกะการทำงานในโรงงานอุตสาหกรรมหรือเมื่อเกิดความผิดปกติของระบบที่ทำให้อัตราอีเวนต์จากเซ็นเซอร์พุ่งสูงขึ้นถึง 1,000% เลเยอร์การประมวลผลสตรีมแบบ Serverless จะเพิ่มจำนวนการทำงานพร้อมกัน (Concurrency) โดยอัตโนมัติ เพื่อประมวลผลแรงดันข้อมูลย้อนกลับ (Backpressure) โดยไม่ต้องปรับขนาดคลัสเตอร์ด้วยตนเอง

API แบ็กเอนด์สำหรับเว็บและแอปพลิเคชันมือถือ

แอปพลิเคชันหน้าเดียวสมัยใหม่ (React, Vue, Angular) และไคลเอนต์เนทีฟบนมือถือ (iOS, Android) ต้องพึ่งพา REST และ GraphQL API ที่มีน้ำหนักเบาและมีความหน่วงแฝงต่ำเพื่อทำธุรกรรมทางธุรกิจหลัก

+----------------+      HTTPS       +---------------------+      JSON Event     +-------------------+
|  Client App    | -------------->  | Fully Managed       | ------------------> | Serverless FaaS   |
| (Mobile / SPA) |                  | API Gateway         |                     | (Business Logic)  |
+----------------+                  +----------+----------+                     +---------+---------+
                                               |                                          |
                                    [Authorizer & WAF]                         [Managed NoSQL Database]

การใช้สถาปัตยกรรม Serverless สำหรับ API แบ็กเอนด์มอบข้อได้เปรียบที่สำคัญดังนี้:

  • การแยกส่วนอย่างเป็นอิสระ (Modular Isolation): แต่ละเอนด์พอยต์ของ API (เช่นGET /products, POST /checkout, DELETE /cart/item) สามารถแมปโดยตรงไปยังฟังก์ชัน FaaS แต่ละตัวผ่าน API Gateway ได้ ซึ่งหากเกิดข้อผิดพลาด หน่วยความจำรั่วไหล หรือปริมาณทราฟฟิกพุ่งสูงขึ้นที่เอนด์พอยต์การชำระเงิน (Checkout) ก็จะทำงานแยกจากกันโดยสิ้นเชิง จึงช่วยปกป้องความพร้อมใช้งานของเอนด์พอยต์สำหรับการเรียกดูข้อมูลและการยืนยันตัวตน

  • การควบคุมความปลอดภัยแบบละเอียด (Granular Security Controls): ไฟร์วอลล์สำหรับเว็บแอปพลิเคชัน (WAF), กฎการจำกัดอัตราการส่งข้อมูล (Rate Limiting) และการตรวจสอบโทเค็น OAuth2/JWT จะถูกบังคับใช้ที่เลเยอร์ API Gateway ก่อนที่ทราฟฟิกจะเข้าถึงสภาพแวดล้อมรันไทม์การประมวลผล เพื่อปกป้องตรรกะเบื้องหลังไม่ให้เกิดค่าใช้จ่ายในการประมวลผลที่ไม่ได้รับอนุญาต

การนำไปใช้งานเชิงกลยุทธ์: Serverless เหมาะกับภาระงานของคุณหรือไม่?

การย้ายภาระงานระดับองค์กรไปยังโมเดล Serverless จำเป็นต้องมีการประเมินคุณสมบัติอย่างเป็นระบบ เนื่องจากไม่ใช่ทุกซอฟต์แวร์แอปพลิเคชันจะได้รับประโยชน์จากสถาปัตยกรรมแบบขับเคลื่อนด้วยอีเวนต์และมีอายุการทำงานสั้นชั่วคราว

การประเมินความสามารถในการคาดการณ์ภาระงานและระยะเวลาการประมวลผล

เพื่อพิจารณาว่าภาระงานมีความเหมาะสมทางเทคนิคและความคุ้มค่าทางเศรษฐกิจสำหรับ Serverless หรือไม่ ผู้นำด้านวิศวกรรมต้องประเมินเกณฑ์ทางเทคนิคสามประการ:

                              +-------------------------------+
                              |    Workload Suitability Check |
                              +---------------+---------------+
                                              |
                     +------------------------+------------------------+
                     |                                                 |
                     v                                                 v
    [Execution Profile: Ephemeral / Bursty]           [Execution Profile: Long-Running / Predictable]
                     |                                                 |
         +-----------+-----------+                         +-----------+-----------+
         |                       |                         |                       |
         v                       v                         v                       v
[Request Latency: >100ms OK]  [Execution: <15 mins]     [Strict Ultra-Low Latency] [Continuous 24/7 Processing]
         |                       |                         |                       |
         +-----------+-----------+                         +-----------+-----------+
                     |                                                 |
                     v                                                 v
         RECOMMENDATION: SERVERLESS                           RECOMMENDATION: CONTAINERS / K8S
  1. ขีดจำกัดระยะเวลาการประมวลผล (Execution Duration Limits): แพลตฟอร์ม FaaS มาตรฐานจะกำหนดขีดจำกัดเวลาสูงสุดในการประมวลผลอย่างเข้มงวด (โดยทั่วไปคือ 900 วินาที / 15 นาที) ภาระงานที่ต้องประมวลผลต่อเนื่องโดยไม่หยุดชะงัก—เช่น การเทรนโมเดล Deep Learning, การเรนเดอร์วิดีโอ หรือการเชื่อมต่อเซิร์ฟเวอร์แบบ Persistent Socket—จะไม่สามารถทำงานบน FaaS แบบเนทีฟได้ และจำเป็นต้องใช้อินสแตนซ์ประมวลผลแบบคอนเทนเนอร์หรือแบบเฉพาะเจาะจง (Dedicated)

  2. รูปแบบทราฟฟิกของภาระงาน (Workload Traffic Patterns):

  • เหมาะสำหรับ Serverless: แอปพลิเคชันที่มีรูปแบบทราฟฟิกเป็นระยะๆ พุ่งสูงเป็นช่วงๆ หรือคาดเดาไม่ได้ (เช่น พอร์ทัล HR ภายในองค์กร, เว็บไซต์โปรโมชันอีคอมเมิร์ซตามฤดูกาล, ตัวจัดการ Webhook อัตโนมัติ)

  • เหมาะสำหรับคอนเทนเนอร์/VM มากกว่า: ระบบที่ประมวลผลปริมาณคำขออย่างสม่ำเสมอ คงที่ และมีอัตรา Throughput สูงตลอด 24 ชั่วโมงต่อวัน 7 วันต่อสัปดาห์ (เช่น ระบบบัญชีแยกประเภทหลักของธนาคารระดับองค์กร, ตลาดกลางแลกเปลี่ยนเทคโนโลยีโฆษณาแบบเรียลไทม์ต่อเนื่อง)

  1. ความไวต่อความหน่วงแฝง (Latency Sensitivity): แอปพลิเคชันที่มีข้อกำหนดความหน่วงแฝงระดับต่ำกว่า 10ms อย่างเข้มงวดและแน่นอน จะไม่สามารถทนต่อ Cold Start ที่เกิดขึ้นเป็นครั้งคราวได้ และต้องทำงานบนโครงสร้างพื้นฐานที่พร้อมใช้งานตลอดเวลา (Warm, Persistent Infrastructure)

การเปลี่ยนผ่านจากระบบเดิม (Legacy) ไปสู่ Serverless

การย้ายระบบระดับองค์กรจากสถาปัตยกรรมแบบโมโนลิธ (Monolithic) ไปเป็น Serverless ไม่ควรใช้วิธีเขียนใหม่ทั้งหมดในคราวเดียวแบบ "Big Bang" ซึ่งมีความเสี่ยงสูง แต่องค์กรควรนำรูปแบบที่ผ่านการพิสูจน์แล้วอย่างStrangler Fig Pattern มาปรับใช้.

  1. ขั้นตอนที่ 1: การกำหนดเส้นทางรอบนอก (Perimeter Routing): ติดตั้ง Cloud API Gateway หรือ Reverse Proxy ไว้ด้านหน้าแอปพลิเคชันโมโนลิธเดิม แล้วกำหนดเส้นทางทราฟฟิกการผลิตทั้งหมด 100% ผ่านเกตเวย์นี้ โดยในช่วงแรกให้ส่งคำขอทั้งหมดกลับไปยังโมโนลิธเดิม

  2. ขั้นตอนที่ 2: ระบุขอบเขตโดเมนส่วนขอบ (Identify Edge Domains): ระบุฟังก์ชันทางธุรกิจขนาดเล็กที่เป็นอิสระในตัวเองและมีการเชื่อมโยงกับฐานข้อมูลต่ำ (เช่น การส่งการแจ้งเตือน, การสร้างใบแจ้งหนี้ PDF หรือการอัปเดตโปรไฟล์ผู้ใช้)

  3. ขั้นตอนที่ 3: สร้างและปรับใช้ไมโครเซอร์วิสแบบ Serverless: พัฒนาฟังก์ชันการทำงานที่แยกเฉพาะเหล่านี้ในรูปแบบฟังก์ชัน Serverless ที่รองรับด้วยฐานข้อมูล BaaS แบบจัดการสำเร็จรูป (Managed)

  4. ขั้นตอนที่ 4: สลับทราฟฟิกทีละส่วน (Shift Traffic Incrementally): อัปเดตกฎการกำหนดเส้นทางของ API Gateway เพื่อส่งคำขอสำหรับเอนด์พอยต์เฉพาะเหล่านี้ไปยังฟังก์ชัน Serverless ใหม่ โดยดักจับทราฟฟิกก่อนที่จะไปถึงระบบโมโนลิธเดิม

  5. ขั้นตอนที่ 5: การแยกส่วนการทำงานแบบวนซ้ำ (Iterative Decoupling): ทำขั้นตอนนี้ซ้ำตามขอบเขตของแต่ละโดเมนไปเรื่อย ๆ จนกระทั่งระบบโมโนลิธแบบเดิม (Legacy Monolith) ถูกปลดประจำการอย่างสมบูรณ์

วิวัฒนาการทางสถาปัตยกรรม: ทศวรรษหน้าของ Cloud-Native Computing

กระบวนทัศน์ของ Serverless กำลังพัฒนาอย่างต่อเนื่องเกินกว่าการเป็นเพียงฟังก์ชันแบ็กเอนด์ที่ขับเคลื่อนด้วยเหตุการณ์ (Event-Driven) ทั่วไป โดยได้รับการขับเคลื่อนจากความก้าวหน้าในเทคโนโลยีเวอร์ชวลไลเซชัน (Virtualization), Edge Computing และสภาพแวดล้อมการประมวลผลสำหรับ AI โดยเฉพาะ

Edge Serverless และ V8 Isolates

สถาปัตยกรรม Serverless แบบดั้งเดิมจะทำงานอยู่ภายใน Region ของระบบคลาวด์แบบรวมศูนย์ (เช่นus-east-1, eu-west-1) อย่างไรก็ตาม แอปพลิเคชันแบบกระจายศูนย์สมัยใหม่ต้องการค่าความหน่วงการรับส่งข้อมูลแบบไปกลับ (Round-Trip Latency) ที่ต่ำกว่า 50 มิลลิวินาทีทั่วโลกมากขึ้นเรื่อย ๆ

แพลตฟอร์มอย่างCloudflare Workers, Fastly ComputeและVercel Edge Functionsได้บุกเบิกยุคใหม่ของการประมวลผลแบบ Serverless ที่สร้างขึ้นบนGoogle Chrome V8 IsolatesและWebAssembly (Wasm)แทนที่จะเป็น microVM

  • ไร้ปัญหา Cold Start (Zero Cold Starts): V8 isolates ช่วยให้บริบทการประมวลผล (Execution Context) ที่เป็นอิสระต่อกันนับแสนรายการสามารถทำงานได้ภายในโพรเซสของระบบเพียงโพรเซสเดียว ส่งผลให้เวลา Cold Start ลดลงเหลือต่ำกว่า5 มิลลิวินาที.

  • การประมวลผลแบบกระจายศูนย์ขั้นสูง (Hyper-Distributed Execution): โค้ดจะถูกประมวลผลในดาต้าเซ็นเตอร์ระดับ Edge หลายร้อยแห่งทั่วโลกที่อยู่ใกล้กับผู้ใช้ปลายทาง ช่วยจัดการ Edge Routing, การเรนเดอร์ SSR แบบไดนามิก และการตรวจสอบสิทธิ์แบบกระจายตามพื้นที่ทางภูมิศาสตร์ (Geo-Distributed Authentication) ได้ในทันที

Serverless AI และการเร่งความเร็วด้วย GPU (GPU Acceleration)

การเติบโตอย่างรวดเร็วของโมเดลภาษาขนาดใหญ่ (LLMs) และเวิร์กโหลด Generative AI ทำให้เกิดความต้องการโครงสร้างพื้นฐาน GPU ที่มีความยืดหยุ่นและเรียกใช้ได้ตามต้องการสูงขึ้นอย่างมาก การติดตั้งใช้งานโมเดลแมชชีนเลิร์นนิงแบบดั้งเดิมจำเป็นต้องจัดสรรอินสแตนซ์ GPU ราคาแพงที่ต้องเปิดทิ้งไว้ตลอดเวลา (เช่น คลัสเตอร์ NVIDIA A100/H100) ซึ่งก่อให้เกิดค่าใช้จ่ายมหาศาลแม้ในขณะที่ไม่ได้ใช้งาน (Idle Costs)

แพลตฟอร์มคลาวด์ยุคใหม่กำลังขยายโมเดล Serverless ไปสู่ฮาร์ดแวร์ที่ช่วยเร่งความเร็วในการประมวลผล:

  • Serverless Inference Endpoints: บริการอย่าง AWS Bedrock, Cloudflare Workers AI และ Replicate ช่วยให้นักพัฒนาสามารถประมวลผลโมเดลอนุมาน (model inference) ที่ซับซ้อนได้ผ่านการเรียก API แบบง่ายๆ หรือตัวจัดการแบบไร้เซิร์ฟเวอร์ชั่วคราว (transient serverless handlers) โดยไม่จำเป็นต้องบริหารจัดการคลัสเตอร์ GPU เบื้องหลัง

  • การปรับขนาด GPU สู่ศูนย์แบบไดนามิก (Dynamic Scale-to-Zero GPUs): เลเยอร์การประมวลผล GPU แบบชั่วคราว (Ephemeral GPU execution layers) จะโหลดค่าน้ำหนักของโมเดล (model weights) เข้าสู่ VRAM ของ GPU ตามความต้องการ ประมวลผลชุดข้อมูลอนุมานเป็นชุดๆ (inference batches) และคืนทรัพยากรฮาร์ดแวร์ประมวลผลราคาแพงทันที ทำให้ความสามารถด้าน AI ขั้นสูงมีความคุ้มค่าในเชิงเศรษฐศาสตร์สำหรับผลิตภัณฑ์ระดับองค์กรทุกขนาด

คำถามที่พบบ่อย

S1: ความแตกต่างหลักระหว่าง Serverless Computing กับการโฮสต์บนคลาวด์แบบดั้งเดิมคืออะไร?
C1: การโฮสต์บนคลาวด์แบบดั้งเดิมกำหนดให้องค์กรต้องจัดเตรียม (provision), กำหนดค่า, อัปเดตแพตช์ และบริหารจัดการเวอร์ชวลแมชชีนหรือคลัสเตอร์คอนเทนเนอร์แบบคงอยู่ถาวร (persistent) ไม่ว่าปริมาณทราฟฟิกจริงจะเป็นอย่างไรก็ตาม ในทางกลับกัน Serverless Computing จะซ่อนการจัดการโครงสร้างพื้นฐานทั้งหมดไว้ โดยจะปรับขนาดอินสแตนซ์การประมวลผลโดยอัตโนมัติและสอดคล้องกับเหตุการณ์แบบเรียลไทม์อย่างยืดหยุ่น พร้อมทั้งคิดค่าบริการตามเวลาการประมวลผลจริงในระดับมิลลิวินาทีเท่านั้น

S2: สถาปัตยกรรมไร้เซิร์ฟเวอร์ (Serverless) ขจัดการใช้งานเซิร์ฟเวอร์จริงทางกายภาพไปโดยสิ้นเชิงหรือไม่?
C2: ไม่เลย เซิร์ฟเวอร์ทางกายภาพยังคงทำหน้าที่ประมวลผลโค้ดแอปพลิเคชันอยู่ภายในศูนย์ข้อมูลของผู้ให้บริการคลาวด์ คำว่า "Serverless" หมายความว่าผู้ใช้งานได้รับการปลดเปลื้องภาระจากการจัดเตรียม, การดูแลจัดการ, การรักษาความปลอดภัย หรือการปรับขนาดเลเยอร์เซิร์ฟเวอร์ทางกายภาพหรือเวอร์ชวลเซิร์ฟเวอร์เบื้องหลังเหล่านั้นโดยสิ้นเชิง

S3: สถาปัตยกรรมไร้เซิร์ฟเวอร์ส่งผลกระทบต่อต้นทุนการดำเนินงานของซอฟต์แวร์โดยรวมอย่างไร?
C3: Serverless ช่วยลดค่าใช้จ่ายในการดำเนินงาน (OpEx) สำหรับเวิร์กโหลดที่เป็นช่วงๆ หรือมีความผันผวนได้อย่างมีนัยสำคัญ โดยการขจัดต้นทุนการประมวลผลที่ไม่ได้ใช้งาน (idle compute costs) และลดภาระงานการดูแลระบบของ DevOps อย่างต่อเนื่อง อย่างไรก็ตาม สำหรับเวิร์กโหลดที่มีปริมาณงานสูง ทำงานต่อเนื่องตลอด 24 ชั่วโมงทุกวัน ราคาแบบจ่ายตามคำขอของ Serverless อาจมีราคาสูงกว่าการใช้เวอร์ชวลแมชชีนแบบจองล่วงหน้า (reserved instances) หรือคลัสเตอร์คอนเทนเนอร์ที่ได้รับการปรับแต่งมาอย่างเหมาะสม

S4: Cold Start ใน Serverless Computing คืออะไร และสามารถบรรเทาปัญหานี้ได้อย่างไร?
C4: Cold Start คือความหน่วงเวลาที่เกิดขึ้นเมื่อผู้ให้บริการคลาวด์จัดเตรียมคอนเทนเนอร์ microVM ใหม่, เริ่มต้นระบบรันไทม์เอนจิน และโหลดส่วนประกอบที่แอปพลิเคชันต้องใช้ (dependencies) สำหรับการเรียกใช้ฟังก์ชันที่ยังไม่ได้วอร์มระบบไว้ ปัญหานี้สามารถบรรเทาได้โดยการเลือกรันไทม์ที่มีขนาดเบา เช่น Node.js หรือ Python, การลดแพ็กเกจส่วนเสริม (dependencies) ให้น้อยที่สุด, การใช้ฟีเจอร์อุ่นระบบล่วงหน้าของผู้ให้บริการ เช่น AWS Provisioned Concurrency หรือการย้ายฟังก์ชันที่ไวต่อความหน่วงไปยังรันไทม์ที่เอดจ์ (Edge)

S5: งานเบื้องหลังที่ใช้เวลานาน (long-running background tasks) และงานประมวลผลแบบกลุ่ม (batch jobs) สามารถทำงานบนแพลตฟอร์มไร้เซิร์ฟเวอร์ได้หรือไม่?
C5: แพลตฟอร์ม FaaS ไร้เซิร์ฟเวอร์มาตรฐานมีการบังคับใช้การจำกัดเวลาการทำงาน (timeout) อย่างเข้มงวด เช่น ขีดจำกัดสูงสุด 15 นาทีของ AWS Lambda ดังนั้น งานที่ต้องใช้ระยะเวลาในการประมวลผลนานกว่านั้นจะต้องถูกแยกย่อยออกเป็นเวิร์กโฟลว์ย่อยๆ ตามขั้นตอน โดยใช้บริการจัดลำดับการทำงาน (orchestration) เช่น AWS Step Functions หรือย้ายไปทำงานบนบริการคอนเทนเนอร์แบบมีการจัดการ เช่น AWS Fargate

S6: Serverless Computing มีความปลอดภัยเพียงพอสำหรับแอปพลิเคชันระดับองค์กรในกลุ่มการเงินและการดูแลสุขภาพหรือไม่?
C6: ปลอดภัย เนื่องจากผู้ให้บริการ Serverless รายใหญ่ปฏิบัติตามกรอบการกำกับดูแลที่เข้มงวด ได้แก่ SOC 2, ISO 27001, HIPAA และ PCI-DSS ทั้งนี้ จุดเน้นด้านความปลอดภัยจะเปลี่ยนจากการเสริมความแข็งแกร่งของระบบปฏิบัติการ (OS hardening) ไปเป็นการกำหนดนโยบายการจัดการการเข้าถึงและอัตลักษณ์ (IAM) อย่างละเอียด, การกำหนดค่า API Gateway ให้ปลอดภัย และการสแกนช่องโหว่ของแพ็กเกจซอฟต์แวร์ที่เกี่ยวข้องอย่างเข้มงวด

S7: ภาษาโปรแกรมใดที่เหมาะสมที่สุดสำหรับการพัฒนาฟังก์ชันไร้เซิร์ฟเวอร์?
C7: ภาษาที่มีขนาดเบา, เป็นภาษาแบบอินเทอร์พรีตเตอร์ หรือภาษาแบบคอมไพล์ที่บูตเครื่องได้อย่างรวดเร็ว เช่น JavaScript/TypeScript (Node.js), Python และ Go มักจะเหมาะสมที่สุดสำหรับ Serverless เนื่องจากมีระยะเวลา Cold Start ที่สั้นมาก แม้ว่า Java และ .NET จะได้รับการสนับสนุนอย่างสมบูรณ์แบบ แต่ภาษากลุ่มนี้มักต้องการการปรับแต่งการคอมไพล์ให้เหมาะสม เช่น การใช้ GraalVM native images เพื่อลดความหน่วงในการเริ่มต้นระบบ

S8: สถาปัตยกรรมแบบ Serverless แตกต่างจากสถาปัตยกรรมแบบไมโครเซอร์วิส (Microservices) อย่างไร?
C8: ไมโครเซอร์วิสหมายถึงรูปแบบการออกแบบทางสถาปัตยกรรม (architectural design pattern) ที่แยกแอปพลิเคชันออกเป็นบริการย่อยๆ ที่เชื่อมต่อกันอย่างหลวมๆ (loosely coupled) ตามขอบเขตธุรกิจ (business domains) ในขณะที่ Serverless คือรูปแบบการประมวลผลและโครงสร้างพื้นฐาน โดยสามารถปรับใช้ไมโครเซอร์วิสได้ทั้งบนฟังก์ชันไร้เซิร์ฟเวอร์, แพลตฟอร์มจัดการคอนเทนเนอร์อย่าง Kubernetes หรือเวอร์ชวลแมชชีนแบบดั้งเดิม

คำถามที่พบบ่อย

ความแตกต่างหลักระหว่าง Serverless Computing กับการโฮสต์บนคลาวด์แบบดั้งเดิมคืออะไร?

การโฮสต์บนคลาวด์แบบดั้งเดิมกำหนดให้องค์กรต้องจัดเตรียม (provision), กำหนดค่า, อัปเดตแพตช์ และบริหารจัดการเวอร์ชวลแมชชีนหรือคลัสเตอร์คอนเทนเนอร์แบบคงอยู่ถาวร (persistent) ไม่ว่าปริมาณทราฟฟิกจริงจะเป็นอย่างไรก็ตาม ในทางกลับกัน Serverless Computing จะซ่อนการจัดการโครงสร้างพื้นฐานทั้งหมดไว้ โดยจะปรับขนาดอินสแตนซ์การประมวลผลโดยอัตโนมัติและสอดคล้องกับเหตุการณ์แบบเรียลไทม์อย่างยืดหยุ่น พร้อมทั้งคิดค่าบริการตามเวลาการประมวลผลจริงในระดับมิลลิวินาทีเท่านั้น

สถาปัตยกรรมไร้เซิร์ฟเวอร์ (Serverless) ขจัดการใช้งานเซิร์ฟเวอร์จริงทางกายภาพไปโดยสิ้นเชิงหรือไม่?

ไม่เลย เซิร์ฟเวอร์ทางกายภาพยังคงทำหน้าที่ประมวลผลโค้ดแอปพลิเคชันอยู่ภายในศูนย์ข้อมูลของผู้ให้บริการคลาวด์ คำว่า "Serverless" หมายความว่าผู้ใช้งานได้รับการปลดเปลื้องภาระจากการจัดเตรียม, การดูแลจัดการ, การรักษาความปลอดภัย หรือการปรับขนาดเลเยอร์เซิร์ฟเวอร์ทางกายภาพหรือเวอร์ชวลเซิร์ฟเวอร์เบื้องหลังเหล่านั้นโดยสิ้นเชิง

สถาปัตยกรรมไร้เซิร์ฟเวอร์ส่งผลกระทบต่อต้นทุนการดำเนินงานของซอฟต์แวร์โดยรวมอย่างไร?

Serverless ช่วยลดค่าใช้จ่ายในการดำเนินงาน (OpEx) สำหรับเวิร์กโหลดที่เป็นช่วงๆ หรือมีความผันผวนได้อย่างมีนัยสำคัญ โดยการขจัดต้นทุนการประมวลผลที่ไม่ได้ใช้งาน (idle compute costs) และลดภาระงานการดูแลระบบของ DevOps อย่างต่อเนื่อง อย่างไรก็ตาม สำหรับเวิร์กโหลดที่มีปริมาณงานสูง ทำงานต่อเนื่องตลอด 24 ชั่วโมงทุกวัน ราคาแบบจ่ายตามคำขอของ Serverless อาจมีราคาสูงกว่าการใช้เวอร์ชวลแมชชีนแบบจองล่วงหน้า (reserved instances) หรือคลัสเตอร์คอนเทนเนอร์ที่ได้รับการปรับแต่งมาอย่างเหมาะสม

Cold Start ใน Serverless Computing คืออะไร และสามารถบรรเทาปัญหานี้ได้อย่างไร?

Cold Start คือความหน่วงเวลาที่เกิดขึ้นเมื่อผู้ให้บริการคลาวด์จัดเตรียมคอนเทนเนอร์ microVM ใหม่, เริ่มต้นระบบรันไทม์เอนจิน และโหลดส่วนประกอบที่แอปพลิเคชันต้องใช้ (dependencies) สำหรับการเรียกใช้ฟังก์ชันที่ยังไม่ได้วอร์มระบบไว้ ปัญหานี้สามารถบรรเทาได้โดยการเลือกรันไทม์ที่มีขนาดเบา เช่น Node.js หรือ Python, การลดแพ็กเกจส่วนเสริม (dependencies) ให้น้อยที่สุด, การใช้ฟีเจอร์อุ่นระบบล่วงหน้าของผู้ให้บริการ เช่น AWS Provisioned Concurrency หรือการย้ายฟังก์ชันที่ไวต่อความหน่วงไปยังรันไทม์ที่เอดจ์ (Edge)

งานเบื้องหลังที่ใช้เวลานาน (long-running background tasks) และงานประมวลผลแบบกลุ่ม (batch jobs) สามารถทำงานบนแพลตฟอร์มไร้เซิร์ฟเวอร์ได้หรือไม่?

แพลตฟอร์ม FaaS ไร้เซิร์ฟเวอร์มาตรฐานมีการบังคับใช้การจำกัดเวลาการทำงาน (timeout) อย่างเข้มงวด เช่น ขีดจำกัดสูงสุด 15 นาทีของ AWS Lambda ดังนั้น งานที่ต้องใช้ระยะเวลาในการประมวลผลนานกว่านั้นจะต้องถูกแยกย่อยออกเป็นเวิร์กโฟลว์ย่อยๆ ตามขั้นตอน โดยใช้บริการจัดลำดับการทำงาน (orchestration) เช่น AWS Step Functions หรือย้ายไปทำงานบนบริการคอนเทนเนอร์แบบมีการจัดการ เช่น AWS Fargate

Serverless Computing มีความปลอดภัยเพียงพอสำหรับแอปพลิเคชันระดับองค์กรในกลุ่มการเงินและการดูแลสุขภาพหรือไม่?

ปลอดภัย เนื่องจากผู้ให้บริการ Serverless รายใหญ่ปฏิบัติตามกรอบการกำกับดูแลที่เข้มงวด ได้แก่ SOC 2, ISO 27001, HIPAA และ PCI-DSS ทั้งนี้ จุดเน้นด้านความปลอดภัยจะเปลี่ยนจากการเสริมความแข็งแกร่งของระบบปฏิบัติการ (OS hardening) ไปเป็นการกำหนดนโยบายการจัดการการเข้าถึงและอัตลักษณ์ (IAM) อย่างละเอียด, การกำหนดค่า API Gateway ให้ปลอดภัย และการสแกนช่องโหว่ของแพ็กเกจซอฟต์แวร์ที่เกี่ยวข้องอย่างเข้มงวด

ภาษาโปรแกรมใดที่เหมาะสมที่สุดสำหรับการพัฒนาฟังก์ชันไร้เซิร์ฟเวอร์?

ภาษาที่มีขนาดเบา, เป็นภาษาแบบอินเทอร์พรีตเตอร์ หรือภาษาแบบคอมไพล์ที่บูตเครื่องได้อย่างรวดเร็ว เช่น JavaScript/TypeScript (Node.js), Python และ Go มักจะเหมาะสมที่สุดสำหรับ Serverless เนื่องจากมีระยะเวลา Cold Start ที่สั้นมาก แม้ว่า Java และ .NET จะได้รับการสนับสนุนอย่างสมบูรณ์แบบ แต่ภาษากลุ่มนี้มักต้องการการปรับแต่งการคอมไพล์ให้เหมาะสม เช่น การใช้ GraalVM native images เพื่อลดความหน่วงในการเริ่มต้นระบบ

สถาปัตยกรรมแบบ Serverless แตกต่างจากสถาปัตยกรรมแบบไมโครเซอร์วิส (Microservices) อย่างไร?

ไมโครเซอร์วิสหมายถึงรูปแบบการออกแบบทางสถาปัตยกรรม (architectural design pattern) ที่แยกแอปพลิเคชันออกเป็นบริการย่อยๆ ที่เชื่อมต่อกันอย่างหลวมๆ (loosely coupled) ตามขอบเขตธุรกิจ (business domains) ในขณะที่ Serverless คือรูปแบบการประมวลผลและโครงสร้างพื้นฐาน โดยสามารถปรับใช้ไมโครเซอร์วิสได้ทั้งบนฟังก์ชันไร้เซิร์ฟเวอร์, แพลตฟอร์มจัดการคอนเทนเนอร์อย่าง Kubernetes หรือเวอร์ชวลแมชชีนแบบดั้งเดิม

ขั้นตอนสุดท้าย

มาวางแผนโปรเจกต์ดิจิทัลของคุณวันนี้

เปลี่ยนความต้องการด้านเว็บไซต์ ซอฟต์แวร์ E-Commerce แอปมือถือ การเชื่อมต่อ SEO หรือ GEO ให้เป็นขอบเขตงานที่ชัดเจน

สถาปัตยกรรม Serverless คืออะไร? | Webizm