ในยุคปัจจุบันที่การพัฒนาแอปพลิเคชันมันช่างง่ายแสนง่ายและเรื่องการทำให้มันสามารถปล่อยใช้งานออกมาเป็น Product ที่รันได้ ใช้งานจริง ทั้งหมดนี้สามารถเกิดขึ้นได้อย่างรวดเร็ว ด้วยขุมพลังจากผู้ให้บริการคลาวด์ ซึ่งวันนี้เราก็อยู่กับคลาวด์ยักษ์ใหญ่ระดับโลกอย่าง AWS ที่มีบริการสุดเจ๋งอย่าง AWS Fargate และ AWS Lambda สำหรับรองรับการทำแอปพลิเคชันที่ไม่ต้องจัดการเซิร์ฟเวอร์เอง โดยการทำแอปพลิเคชันในรูปแบบนี้เราจะรู้จักกันในชื่อว่า “Serverless” ซึ่งทั้ง AWS Fargate และ AWS Lambda ที่เป็นบริการที่รองรับ Serverless เหมือนกันนั้น แต่ในเมื่อรองรับ Serverless เหมือนกันแล้วสองบริการนี้แตกต่างกันอย่างไร และบริการไหนที่เหมาะกับการใช้งานแบบไหน? มาหาคำตอบกันได้ในบทความนี้
รู้จักกับ Serverless Technology
Serverless technology หรือ การประมวลผลแบบไร้เซิร์ฟเวอร์ แปลตรงตัวว่า “ไม่มีเซิร์ฟเวอร์” แต่จริง ๆ หมายถึง โมเดลการประมวลผลโดยคลาวด์ที่ผู้พัฒนาไม่ต้องจัดการกับเซิร์ฟเวอร์เอง ผู้ให้บริการ Cloud ในที่นี้คือ AWS จะเป็นคนดูแล จัดการโครงสร้างพื้นฐานทั้งหมดเอง ไม่ว่าจะเป็นเซิร์ฟเวอร์ OS Network และทรัพยากรต่าง ๆ จะถูกจัดสรรโดยให้บริการ โดยผู้ใช้ก็มีหน้าที่ใช้และจ่ายเงิน แต่จะประหยัดเพราะเราจะจ่ายเฉพาะเท่าที่เราใช้จริงเท่านั้น ไม่ต้องเหมา หรือจ่ายล่วงหน้า
เปรียบเสมือนการเช่ารถแทนการซื้อรถ ลองนึกภาพว่าเราจะต้องไปต่างจังหวัด แทนที่จะซื้อรถทั้งคัน เราสามารถเช่ารถจากบริษัทเช่ารถได้ ซึ่งสะดวก รวดเร็ว และประหยัดกว่าการลงทุนซื้อรถเอง เทคโนโลยีแบบไร้เซิร์ฟเวอร์ก็ทำงานในลักษณะเดียวกัน ผู้พัฒนาซอฟต์แวร์ไม่จำเป็นต้องจัดการกับเซิร์ฟเวอร์เอง แต่สามารถเช่าใช้โครงสร้างพื้นฐาน (infrastructure) จากผู้ให้บริการ Cloud เช่น AWS, Azure หรือ Google Cloud Platform ได้ ผู้ใช้จ่ายเฉพาะค่าทรัพยากรที่ใช้จริง เหมือนกับจ่ายค่าน้ำมันตามระยะทางที่ขับขี่
AWS Fargate คืออะไร?
AWS Fargate เป็นบริการ Serverless ที่ทำให้เราสามารถรันคอนเทนเนอร์ได้โดยไม่ต้องจัดการเซิร์ฟเวอร์หรือโหนดคอนเทนเนอร์เอง มันถูกออกแบบมาเพื่อให้เราสามารถไปโฟกัสที่โค้ด ลอจิกของแอปได้เลย โดยไม่ต้องมากังวลเกี่ยวกับโครงสร้างพื้นฐาน
ลักษณะการทำงานของ AWS Fargate
Fargate สามารถทำงานร่วมกับ Amazon Elastic Container Service (Amazon ECS) และ Amazon Elastic Kubernetes Service (Amazon EKS) รองรับคอนเทนเนอร์แบบ OCI image ทั่วไป โดย OCI คือ Open Container Initiative image เป็นมาตรฐานการจัดแพ็คซอฟต์แวร์แบบโอเพ่นซอร์สที่ใช้สำหรับการรันแอปพลิเคชันบนคอนเทนเนอร์ โดยใน Fargate เราเพียงแค่บอกว่าจะใช้ทรัพยากร CPU, Memory เท่าไหร่และใช้ระบบปฏิบัติการไหน เราก็สามารถรันคอนเทนเนอร์ได้แบบง่าย ๆ เพราะว่าใน Fargate เค้ารองรับสถาปัตยกรรม CPU และระบบปฏิบัติการที่หลากหลาย ทำให้เราได้รับประสิทธิภาพการทำงานที่ยืดหยุ่น และทำแอปที่รองรับการใช้งานที่หลากหลายได้
ตัวอย่างการใช้งาน AWS Fargate
AWS Fargate มีประโยชน์สำหรับการใช้งานได้หลากหลายรูปแบบ ดังนี้
- เว็บแอปพลิเคชัน, API และ Microservice: เราสามารถพัฒนาและรันเว็บแอป, API, และสถาปัตยกรรมไมโครเซอร์วิสได้อย่างรวดเร็ว โดยไม่ต้องเสียเวลาไปกับการจัดการเซิร์ฟเวอร์ ช่วยให้เรามีเวลไปโฟกัสที่โค้ดมากยิ่งขึ้น
- ปรับปรุงแอปพลิเคชันเดิม: การใช้ Fargate ร่วมกับ Amazon ECS หรือ Amazon EKS จะช่วยระบบของเราที่อยู่ในคอนเทนเนอร์สามารถรันและสเกลได้ง่าย โดยเราสามารถย้ายและรันคอนเทนเนอร์ Windows บน ECS ไปยัง Fargate โดยไม่ต้องปรับแต่ง หรือ คอนฟิกอะไรใหม่ถ้าคอนเทนเนอร์รันบนเครื่องเราได้ ก็ไปรันบน Fargate ได้สบาย
- รองรับปัญญาประดิษฐ์ (AI) และการเรียนรู้ของเครื่อง (ML): มาในสาย AI ยอดฮิตติดเทรนด์ตอนนี้กันบ้าง เราสามารถสร้างสภาพแวดล้อมสำหรับการพัฒนา AI และ ML ได้อย่างยืดหยุ่นและใช้งานได้หลายแพลตฟอร์ม เนื่องจากที่เรามี CPU หลากหลายสถาปัตยกรรม เราสามารถเลือกขุมพลังเหล่านั้นมาเทรน ทดสอบ และ Deploy Machine Learning Model มาใช้งานได้เลย
- ประมวลผลข้อมูล: เราสามารถรันงานที่ต้องประมวลผลข้อมูลหนัก ๆ ได้ โดยเราสามารถปรับขนาดจำนวน CPU ไปได้สูงถึง 16 vCPU และหน่วยความจำ 120 GB ต่อ task ได้เลย นอกจากนี้ยังสามารถทำงานร่วมกับ AWS Batch เพื่อประมวลผลข้อมูลขนาดใหญ่แบบ Serverless ได้อีกด้วย
AWS Lambda คืออะไร?
AWS Lambda เป็นบริการที่ทำให้เราสามารถรันโค้ดได้โดยไม่ต้องจัดการเซิร์ฟเวอร์หรือโครงสร้างพื้นฐานได้เหมือน Fargate แต่ต่างกันที่ตอน Deploy ขึ้นไป Fargate จะรันเป็นแบบคอนเทนเนอร์ ส่วนของ Lambda จะ Deploy ไปเป็นรายฟังก์ชัน เราสามารถส่งฟังก์ชันหรือโค้ดเพียงไม่กี่บรรทัดของเราไปรันโดยที่ไม่ต้องมาตั้งค่าเซิร์ฟเวอร์เองเลย แถมบน Lambda ยังรองรับภาษาที่หลากหลาย เช่น Python, JavaScript, Java, Go, Ruby, C# เหมาะสำหรับงานที่ทำงานแบบสั้น ๆ เช่น การประมวลผลข้อมูล การตอบสนองต่อ Event รวมไปถึงการเชื่อมต่อกับบริการอื่น ๆ
ลักษณะการทำงานของ AWS Lambda
สำหรับการใช้งาน AWS Lambda นั้นง่ายมาก แค่เราเขียนโค้ดในภาษาที่รองรับ ซึ่งมีเยอะมาก หลังจากนั้นทำการ Deploy ไปยัง AWS Lambda แล้วก็กำหนดสิ่งที่จะบอกให้โค้ดฟังก์ชันนี้รัน โดยสิ่งที่จะทำให้ฟังก์ชันรันคือ Trigger หรือ event ที่ปลุกให้มันทำงาน
ซึ่งสิ่งที่จะไปกระตุ้นให้รันโค้ด ก็จะมีได้หลายแบบ เช่น HTTP request, ไฟล์ที่มีการเปลี่ยนแปลงบนที่เก็บข้อมูลอย่างใน S3 (Amazon Simple Storage Service) หรือ event อื่น ๆ เมื่อมี event เกิดขึ้น AWS Lambda ก็จะไปรันโค้ดของเราให้อัตโนมัติ
ตัวอย่างการใช้งาน AWS Lambda
- ประมวลผลไฟล์: เราสามารถเขียนฟังก์ชันประมวลผลไฟล์ หรือ อัปโหลดไฟล์ไปยังที่เก็บข้อมูลบนคลาวด์อย่าง AWS S3 ได้ เช่น เราทำฟังก์ชันแปลงไฟล์ PDF เป็น Text ไฟล์ธรรมดา หรือจะแปลงรูปภาพเป็นรูปที่มีขนาดเล็กเหมาะสำหรับเอาไปใช้ในเว็บ แม้กระทั่งแปลงวิดีโอเป็นรูปแบบที่เข้ากันได้กับอุปกรณ์ต่าง ๆ
- ประมวลผลข้อมูลสตรีมแบบเรียลไทม์: เราสามารถวิเคราะห์ กรอง แปลง และส่งการแจ้งเตือนจากข้อมูลสตรีมได้ ไม่ว่าจะเป็นการวิเคราะห์ข้อมูลเซ็นเซอร์ IoT ตรวจสอบเมตริกประสิทธิภาพการทำงาน แจ้งเตือนเมื่อเกิดเหตุการณ์สำคัญ ตรวจจับกิจกรรมผิดปกติ หรือส่งการแจ้งเตือนแบบกำหนดเองไปยังผู้ใช้ ช่วยให้สามารถตัดสินใจได้อย่างรวดเร็วและดำเนินการตามข้อมูลที่ทันท่วงที
- การทำ API: Lambda เหมาะอย่างมากสำหรับทำ API ที่ต้องการรองรับผู้ใช้งานจำนวนมาก ๆ ได้ เพราะด้วยความเป็น Serverless ไม่ต้องจัดการเซิร์ฟเวอร์เอง และฟังก์ชันที่ deploy ขึ้นไปถูกย่อยออกมาเป็นรายฟังก์ชันแล้วก็ทำให้การสเกลเป็นเรื่องง่าย
เปรียบเทียบการใช้งาน Fargate vs Lambda
รูปแบบโมเดลของแอป
จากที่เราอ่านมาจะเห็นได้ว่า AWS Fargate เหมาะกับการรันแอปพลิเคชันในรูปแบบของ Contianer ส่วน AWS Lambda เหมาะกับงานที่เป็นฟังก์ชันสั้น ๆ
ประสิทธิภาพ
AWS Fargate จะมีประสิทธิภาพที่สูงกว่าในกรณีที่ต้องประมวลผลแบบต่อเนื่อง แต่ AWS Lambda จะเหมาะกับกรณีที่ต้องการการตอบสนองทันทีและไม่ต้องการการประมวลผลต่อเนื่อง
ความยืดหยุ่น
AWS Fargate มีความยืดหยุ่นในการตั้งค่าและการจัดการทรัพยากรได้ดีกว่า AWS Lambda เพราะว่าสามารถกำหนดได้ว่าจะใช้ CPU และหน่วยความจำเท่าไหร่ แต่ AWS Lambda มีข้อจำกัดเรื่องเวลาที่โค้ดสามารถรันได้
การควบคุม
AWS Fargate สามารถควบคุมการตั้งค่าและการจัดการทรัพยากรได้มากกว่า เนื่องจาก Lambda ถูกออกแบบมาให้ทำงานเป็นฟังก์ชันสั้น ๆ ที่ไม่ต้องตั้งค่าซับซ้อน
ราคาและต้นทุน
หากแอปพลิเคชันของคุณมีการใช้งานไม่บ่อยและไม่ต้องการการประมวลผลต่อเนื่อง AWS Lambda มักจะเป็นตัวเลือกที่คุ้มค่ากว่า เนื่องจากคิดค่าบริการตามจำนวนครั้งที่ใช้งานเท่านั้น ในทางกลับกัน AWS Fargate อาจมีค่าใช้จ่ายสูงกว่า เพราะคุณต้องจ่ายค่าทรัพยากรที่จัดสรรไว้ตลอดเวลา แม้ว่าจะไม่ได้ใช้งานเต็มที่ก็ตาม
ตารางเปรียบเทียบ AWS Fargate กับ AWS Lambda
สรุปแล้ว AWS Fargate และ AWS Lambda ต่างก็เป็นบริการที่เราไม่ต้องจัดการเซิร์ฟเวอร์เอง รองรับการสเกล แต่แค่มีรูปแบบการใช้งานการรันแอปที่แตกต่างกัน ทั้งคู่ก็มีทั้งข้อดีข้อเสียที่แตกต่างกัน ซึ่งเราสามารถเลือกใชให้เหมาะสมกับรูปแบบแอปของเราได้ แต่หากใครกำลังพิจารณาเลือกใช้ AWS Fargate หรือ AWS Lambda และต้องการคำแนะนำเพิ่มเติม สามารถติดต่อเรา Cloud HM ที่พร้อมจะช่วยเหลือคุณในการใช้งานระบบคลาวด์ได้อย่างราบรื่น สนใจติดต่อที่ Cloud HM
—- Cloud HM