Serverless Computing ลืมไปเลยว่าต้องมีเซิฟเวอร์

ในหลายๆครั้ง การพัฒนาแอปพลิเคชันต้องเจอกับปัญหามากมายหลายอย่างเกี่ยวกับการจัดการโครงสร้างพื้นฐาน (Infrastructure) เช่น การดูแลเซิร์ฟเวอร์, การอัปเกรดระบบ, หรือแก้ไขปัญหาที่เกิดขึ้น ซึ่งอาจใช้เวลานานในการที่จะหาคำตอบเหล่านั้น ถ้าเราแค่ต้องการแอปพลิเคชันง่าย ๆ ที่รันได้อย่างราบรื่น Serverless Computing ก็คือทางออกที่จะช่วยลดภาระเหล่านี้ และทำให้เราโฟกัสที่การพัฒนาแอปพลิเคชันได้อย่างเต็มที่
Serverless Computing คืออะไร?
Serverless มาจากคำ 2 คำ นั้นก็คือ
- Server : ที่เป็นคอมพิวเตอร์แม่ข่ายที่ให้บริการข้อมูลหรือทรัพยากรต่าง ๆ
- Less : ที่เป็น suffix (ที่เป็นคำต่อท้าย) มีความหมายว่า “ไม่มี”, “ปราศจาก”และอีก 1 คำ
- Computing : การประมวลผล
เมื่อรวมกันแล้วจะเป็น “การประมวลผลที่ไร้เซิร์ฟเวอร์” ถึงแม้ว่าชื่อจะดูเหมือนเป็นแบบนั้น แต่จริงๆ แล้วก็ยังคงมีเซิร์ฟเวอร์ที่ทำงานอยู่เบื้องหลัง เพียงแต่เราไม่ต้องกังวล หรือต้องไปจัดการอะไรต่างๆ เกี่ยวกับ infrastructure เลย
ดังนั้นแล้ว Serverless Computing หรือ Serverless Architecture เป็นรูปแบบการให้บริการประมวลผลต่างๆ บนคลาวด์ (Cloud Computing) โดยที่เราๆเหล่าผู้ใช้งานนั้น ไม่ต้องลงไปจัดการ หรือดูแลอะไรต่างๆที่เกี่ยวกับ Server และ infrastructure โดยตรง นั้นเพื่อให้ผู้ใช้งานสามารถโฟกัสที่การเขียนโค้ดเพื่อพัฒนาแอปพลิเคชันหรือบริการต่างๆได้อย่างสบายใจ และทางผู้ให้บริการ (cloud provider) จะเป็นผู้ที่กำหนด CPU, Memory, OS, Storage เอง
ข้อเปรียบเทียบระหว่าง Serverless กับ Computing Models
ข้อเปรียบเทียบระหว่าง Serverless กับ Computing Models ว่าเหตุใด Serverless ช่วยให้วิธีการทำงานของการ Software Development ได้เต็มประสิทธิภาพมากขึ้น

หากลองเทียบกับ Cloud Computing ใน model อื่นๆ ตามรูปด้านบน ก็จะเห็นได้ชัดว่ารูปแบบ Serverless นั้น ช่วยให้เราโฟกัสที่การพัฒนาโค้ดได้เต็มที่ โดยไม่ต้องสนใจส่วนอื่นๆ
หากเปรียบเทียบด้านการดูแลโครงสร้าง
- IaaS : จะต้องตั้งค่าเซิร์ฟเวอร์เอง และดูแลการติดตั้งระบบ
- PaaS : จะจัดการบางส่วน แต่ยังคงต้องดูแลการตั้งค่าโครงสร้างของแอปพลิเคชัน
- Serverless : จะเน้นโค้ดและฟังก์ชัน แต่ในส่วนของการจัดการโครงสร้างทั้งหมดจะเป็นของ Cloud Provider
นอกจากด้านการดูแลโครงสร้างแล้ว หากเปรียบเทียบด้านการเชื่อมต่อกับ Data Services
Serverless มักมีบริการเสริมที่เชื่อมต่อกับฐานข้อมูลหรือระบบอื่น ๆ ได้โดยตรงผ่าน API ซึ่งช่วยให้ลดเวลาการตั้งค่าและบริหารจัดการ
- IaaS : จะต้องติดตั้งฐานข้อมูล หรือ บริการเสริมเองบน VM เอง และทำการเชื่อมต่อ
- PaaS : มีบริการ Data Storage แต่ต้องเชื่อมต่อและกำหนด Environment เอง
- Serverless : สามารถเรียกใช้บริการ Data เช่น Azure Cosmos DB, Blob Storage หรือ Event Grid ผ่านการเขียนโค้ดเพียงไม่กี่บรรทัด
ข้อดีของ Serverless Computing
- ค่าใช้จ่าย: การใช้ Serverless นั้นจะช่วยเรื่องการลดต้นทุนได้มาก ไม่ว่าจะเป็นเรื่อง
- การลดค่าใช้จ่ายในส่วนการดูแลบำรุงรักษา Infrastructure
- จ่ายเฉพาะการใช้งานทรัพยากรตามจริง เช่น จำนวน Request ที่วิ่งมาที่แอปพลิเคชั่น และ ระยะเวลา run functions จนเสร็จ
- การปรับขนาดอัตโนมัติ: ในส่วนของการปรับขยาย(Scale Out) หรือ ลด(Scale In) ขนาดการรองรับผู้ใช้งานนั้น ระบบหรือผู้ให้บริการจะปรับให้โดยอัตโนมัติตามปริมาณงาน(workload) ที่เข้ามา
- การพัฒนา: นักพัฒนาสามารถพัฒนาแอปพลิเคชันได้โดยไม่ต้องกังวลเรื่อง Infrastrueture โดยปกติแล้วนักพัฒนาจะต้องคิดเผื่อกรณีที่มีผู้เข้ามาใช้งานจำนวนมาก อาจส่งผลให้แอปพลิเคชันหยุดทำงาน แต่ในส่วนนี้ระบบหรือผู้ให้บริการจะจัดการให้
- การอัปเกรดเซิร์ฟเวอร์: หมดห่วงเรื่องการอัปเกรดเซิร์ฟ เช่น อัปเดตเวอร์ชัน OS, การติดตั้ง/ อัปเดตซอฟต์แวร์ เนื่องจากทางระบบหรือผู้ให้บริการจะจัดการส่วนนี้ให้ทั้งหมด
- Runtime: มี runtime หลายตัวให้เลือกใช้ตามภาษาหรือเฟรมเวิร์กที่ผู้พัฒนาคุ้นเคยและต้องการใช้งาน ไม่ว่าจะเป็น .NET (C#), Node.js, Python, Java, PowerShell
- รองรับ Event-Driven: รองรับการพัฒนาแบบ Event-Driven โดย Serverless เหมาะสำหรับงานที่ตอบสนองต่อ Event ต่าง ๆ ตัวอย่าง เช่น
- การส่งอีเมล: เมื่อมีอีเมลเข้ามา ระบบจะแจ้งเตือนผู้ใช้
- IoT Data Processing: เมื่อ Sensor อ่านค่าได้จะส่งข้อมูลไปยัง Azure Functions เพื่อจัดการข้อมูล (กรณีใช้งานบน Microsoft Azure)
ข้อจำกัดของ Serverless Computing
เห็นมีข้อดีหลายอย่าง แถมยังใช้งานง่าย จริงๆ แล้ว Serverless ก็แอบมีข้อเสียอยู่เหมือนกันนะ
- เวลาเริ่มทำงาน: หรือความหน่วงในการเริ่มการทำงาน (Latency Cold Start) หากฟังก์ชันที่เขียนเอาไว้ใน Serverless ไม่ได้ถูกเรียกใช้งานมาสักระยะ จะทำให้ระบบอาจต้องใช้เวลาในการเริ่มต้น ซึ่งจะทำให้ประมวลผลล่าช้าได้
- ประสิทธิภาพที่จำกัด: สำหรับ Serverless ที่ใช้งานได้อย่างไม่ต้องโฟกัสที่ Infrastructure นั้นมีข้อจำกัดทางด้าน Resources อยู่ ไม่ว่าจะเป็นการจำกัดหน่วยความจำต่อการรันฟังก์ชัน การจำกัดระยะเวลาในการประมวลผล หรืออื่นๆ นั้นก็เพื่อการจัดการที่ง่ายขึ้น เช่น การตั้งขอบเขตเวลาการทำงานของแต่ละฟังก์ชันจะช่วยลดโอกาสเกิดปัญหาการ Overload หรือ ข้อจำกัดทรัพยากรชัดเจน ระบบสามารถปรับขนาดนั้นเอง นั้นจึงทำให้ไม่เหมาะสำหรับงานที่ต้องใช้ประสิทธิภาพสูง ระยะเวลาประมวลผลที่นาน หรืองานแบบ High-performance computing (HPC)
- การตรวจสอบ การหาสาเหตุ: การที่ผู้ใช้งานไม่ได้มีสิทธิการเข้าถึงเซิร์ฟเวอร์ ทำให้บางเคส บางปัญหาที่เกิดขึ้น ไม่สามารถเข้าไปตรวจสอบที่เซิร์ฟเวอร์ได้ตรง ดังนั้นอาจต้องใช้ tool ตัวอื่นมาช่วยเหลือ ในการ Monitoring ตรวจสอบการทำงานของฟังก์ชัน และ Tracing ติดตามการทำงานระหว่างฟังก์ชัน
- ไม่เหมาะสำหรับแอปพลิเคชันบางประเภท: เนื่องแอปพลิเคชันมีหลายรูปแบบ ดังนั้นการใช้ประสิทธิภาพ หรือการทำงานที่มีความซับซ้อนต่าง จึงไม่เหมาะกับแอปพลิเคชันบางประเภท เช่น แอปพลิเคชันที่มีการประมวลผลระยะยาว หรือระบบที่ต้องการความปลอดภัยและการควบคุมระดับสูง
Serverless Computing บน Microsoft Azure
ตัวอย่าง Service บน Azure นั้นมีหลาย service เช่น
- Azure Functions: บริการหลักที่รองรับการรันฟังก์ชันแบบ Event-driven และ Scalable
- Azure Logic Apps: แพลตฟอร์มแบบ Low-Code สำหรับการสร้าง Workflow Automation
- Azure Event Grid: บริการ Event Routing ที่ช่วยกระจายข้อมูลหรือ Event ไปยังบริการต่าง ๆ แบบเรียลไทม์
- Azure App Service: บริการสำหรับรันแอปพลิเคชันใน Container แบบ Serverless
- Azure Container Apps: บริการโฮสต์ Web App และ API แบบ Serverless โดยไม่ต้องจัดการโครงสร้างพื้นฐาน
สรุป
Serverless Computing ถูกออกแบบมาเพื่อลดภาระในการดูแลโครงสร้างพื้นฐาน (Infrastructure), การปรับขนาด (Scalability) และช่วยเรื่องลดค่าใช้จ่ายต่าง ๆ (Cost) โดยจะคิดค่าบริการเมื่อมีการประมวลผลการใช้งานจริง และทางทีมพัฒนาก็สามารถโฟกัสที่การพัฒนาแอปพลิเคชันได้เต็มที่ ไม่ว่าจะเป็นการสร้างฟีเจอร์ใหม่หรือปรับปรุงระบบเดิม โดยที่ไม่ต้องเสียเวลาไปกับการตั้งค่าเซิร์ฟเวอร์ ตัวอย่างการใช้ เช่น Azure Functions สำหรับรองรับปริมาณการเข้าใช้เว็บจำนวนมากในช่วงมี Event พิเศษ Serverless จึงเป็นหนึ่งในทางเลือกที่สะดวกสบายของ Cloud Computing ที่ลดภาระและเพิ่มประสิทธิภาพในการส่งมอบซอฟต์แวร์ได้อย่างดี หากองค์กรไหนกำลังมองหาแนวทางใหม่ในการพัฒนาแอปพลิเคชัน Serverless Computing ก็นับเป็นตัวเลือกที่ไม่ควรมองข้าม
ทั้งนี้ในส่วนของการตัวอย่างการใช้งาน Azure Functions จะอยู่ในบทความถัดไป เนื่องจากเนื้อมาเยอะมาก จึงจะขอทำเป็นอีกบทความหนึ่งที่จะมาอธิบายเป็นส่วนๆ ไปนะครับบบบ