AWS Fargate และ Lambda สองบริการนี้ต่างกันอย่างไร?

 

ในยุคปัจจุบันที่การพัฒนาแอปพลิเคชันมันช่างง่ายแสนง่ายและเรื่องการทำให้มันสามารถปล่อยใช้งานออกมาเป็น Product ที่รันได้ ใช้งานจริง ทั้งหมดนี้สามารถเกิดขึ้นได้อย่างรวดเร็ว ด้วยขุมพลังจากผู้ให้บริการคลาวด์ ซึ่งวันนี้เราก็อยู่กับคลาวด์ยักษ์ใหญ่ระดับโลกอย่าง AWS ที่มีบริการสุดเจ๋งอย่าง AWS Fargate และ AWS Lambda  สำหรับรองรับการทำแอปพลิเคชันที่ไม่ต้องจัดการเซิร์ฟเวอร์เอง โดยการทำแอปพลิเคชันในรูปแบบนี้เราจะรู้จักกันในชื่อว่า “Serverless” ซึ่งทั้ง AWS Fargate และ AWS Lambda ที่เป็นบริการที่รองรับ Serverless เหมือนกันนั้น แต่ในเมื่อรองรับ Serverless เหมือนกันแล้วสองบริการนี้แตกต่างกันอย่างไร และบริการไหนที่เหมาะกับการใช้งานแบบไหน? มาหาคำตอบกันได้ในบทความนี้

 

รู้จักกับ Serverless Technology

Serverless technology หรือ การประมวลผลแบบไร้เซิร์ฟเวอร์  แปลตรงตัวว่า “ไม่มีเซิร์ฟเวอร์” แต่จริง ๆ หมายถึง โมเดลการประมวลผลโดยคลาวด์ที่ผู้พัฒนาไม่ต้องจัดการกับเซิร์ฟเวอร์เอง ผู้ให้บริการ Cloud ในที่นี้คือ AWS จะเป็นคนดูแล จัดการโครงสร้างพื้นฐานทั้งหมดเอง ไม่ว่าจะเป็นเซิร์ฟเวอร์ OS Network และทรัพยากรต่าง ๆ จะถูกจัดสรรโดยให้บริการ โดยผู้ใช้ก็มีหน้าที่ใช้และจ่ายเงิน แต่จะประหยัดเพราะเราจะจ่ายเฉพาะเท่าที่เราใช้จริงเท่านั้น ไม่ต้องเหมา หรือจ่ายล่วงหน้า 

AWS Fargate and Lambda 2

เปรียบเสมือนการเช่ารถแทนการซื้อรถ ลองนึกภาพว่าเราจะต้องไปต่างจังหวัด แทนที่จะซื้อรถทั้งคัน เราสามารถเช่ารถจากบริษัทเช่ารถได้ ซึ่งสะดวก รวดเร็ว และประหยัดกว่าการลงทุนซื้อรถเอง เทคโนโลยีแบบไร้เซิร์ฟเวอร์ก็ทำงานในลักษณะเดียวกัน ผู้พัฒนาซอฟต์แวร์ไม่จำเป็นต้องจัดการกับเซิร์ฟเวอร์เอง แต่สามารถเช่าใช้โครงสร้างพื้นฐาน (infrastructure) จากผู้ให้บริการ Cloud เช่น AWS, Azure หรือ Google Cloud Platform ได้ ผู้ใช้จ่ายเฉพาะค่าทรัพยากรที่ใช้จริง เหมือนกับจ่ายค่าน้ำมันตามระยะทางที่ขับขี่

 

AWS Fargate คืออะไร?

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

ลักษณะการทำงานของ AWS Fargate

AWS Fargate and Lambda 3

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 ที่ปลุกให้มันทำงาน 

AWS Fargate and Lambda 5
AWS Fargate and Lambda 6

ซึ่งสิ่งที่จะไปกระตุ้นให้รันโค้ด ก็จะมีได้หลายแบบ เช่น 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