Serverless

Serverless

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

Image source: https://blog.knoldus.com/from-serverless-to-stateful-serverless/

ในหลายๆครั้ง การพัฒนาแอปพลิเคชันต้องเจอกับปัญหามากมายหลายอย่างเกี่ยวกับการจัดการโครงสร้างพื้นฐาน (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 ได้เต็มประสิทธิภาพมากขึ้น

Image source: https://medium.com/@sdorzak/why-serverless-is-the-new-black-e4ff9e9947e0

หากลองเทียบกับ 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 จะอยู่ในบทความถัดไป เนื่องจากเนื้อมาเยอะมาก จึงจะขอทำเป็นอีกบทความหนึ่งที่จะมาอธิบายเป็นส่วนๆ ไปนะครับบบบ

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *