WeOmni

Serverless vs. Containers: เจาะลึกสองแนวทางระบบคลาวด์สมัยใหม่

คลาวด์คอมพิวติ้ง (Cloud computing) ได้รับการพัฒนาอย่างต่อเนื่องในหลากรูปแบบ โดยแบ่งออกเป็น 2 แนวทางหลักๆ คือ ไร้เซิร์ฟเวอร์ (Serverless) และคอนเทนเนอร์ (Containers) ซึ่งทั้งคู่มีข้อดีที่แตกต่างกัน ซึ่งเป็นสิ่งสำคัญสำหรับนักพัฒนาและธุรกิจในการตัดสินใจเลือกประเภทของ Service ให้เหมาะสมกับความต้องการในการใช้งาน ดังนั้นบทความนี้จะช่วยเจาะลึกไปถึงข้อแตกต่าง จุดเด่น และการนำไปใช้งานจริงได้อย่างมีประสิทธิภาพสูงสุด

ปูพื้นฐานกันก่อน

Serverless: แม้จะแปลกันตรงๆ ว่า “ไร้เซิร์ฟเวอร์” แต่ Serverless ไม่ได้หมายความว่า ไม่มีเซิร์ฟเวอร์ เพียงแต่ว่างานระบบที่เกี่ยวกับการงานของตัวเซิร์ฟเวอร์นั้น จะถูกแยกออกจากฝั่ง Developer ออกไปอย่างสิ้นเชิง โดยผู้ให้บริการระบบคลาวด์จะดูแลรับผิดชอบงานด้านระบบเซิร์ฟเวอร์ให้เอง ส่วน Developer นั้นจะโฟกัสไปที่เพียงเรื่องการพัฒนา Application ช่วยลดโหลดงานและความผิดพลาดในการจัดการเซิร์ฟเวอร์ลงได้

Containers: ให้นึกภาพว่า Application หรือ Services ของเราถูกบรรจุอยู่ในกล่องตู้คอนเทนเนอร์เล็กๆ ที่ในกล่องนั้นมีสภาพแวดล้อมและองค์ประกอบอันจำเป็น (Dependency) พร้อมใช้งานร่วมกับกับระบบปฎิบัติการต่างๆได้อย่างลงตัว

ข้อดีและข้อเสียของแต่ละรูปแบบ

Serverless

ข้อดี:

ปรับการใช้งาน Server อัตโนมัติ (Auto-scaling): เพื่อให้รองรับ Load ตามฟังก์ชันงานที่เกิดขึ้นจริงโดยอัตโนมัติ ไม่จำเป็นต้องเข้าไปปรับเปลี่ยนการตั้งค่าด้วยตนเองตลอดเวลา

ประหยัดต้นทุน (Cost-efficiency): จ่ายค่าฮาร์ดแวร์เฉพาะเท่าที่ใช้งานจริง ซึ่งมักคำนวณจากเวลา Execution ตัวงานต่อมิลลิวินาที

ไม่ต้องดูแลเซิร์ฟเวอร์เอง (No server management): Developer มุ่งเน้นไปที่การโค้ดดิ้งเพียงอย่างเดียว โดยไม่ต้องกังวลเกี่ยวกับโครงสร้างพื้นฐานหรืองานฮาร์ดแวร์ของฝั่งเซิร์ฟเวอร์

ข้อด้อย: 

ความหน่วงในการเรียกใช้งาน (Cold start): อาจเกิดความล่าช้าเมื่อเรียกใช้ฟังก์ชันเมื่อไม่ได้ใช้งานชุดข้อมูลนี้ในระยะหนึ่ง ซึ่งส่งผลต่อรูปแบบงานที่ต้องการตอบสนองอย่างฉับไว

การปรับแต่งที่จำกัด (Limited customization): มีอิสระในการปรับแต่งสภาพแวดล้อมรันไทม์น้อยกว่าเมื่อเทียบกับคอนเทนเนอร์

เวลาในการ Execution: โดยทั่วไปแล้ว แต่ละฟังก์ชันงานจะถูกกำหนดค่าเวลาสูงสุดในการ Execution จึงไม่เหมาะสำหรับฟังก์ชันที่ต้องรันต่อเนื่องเป็นเวลานานๆ

Containers

ข้อดี:

ความสม่ำเสมอตลอดการรัน (Consistency): มั่นใจได้ว่าซอฟต์แวร์จะสามารถทำงานได้อย่างถูกต้องและต่อเนื่องตลอดเวลา ไม่ว่าคอนเทนเนอร์นั้นกำลังถูก Deploying อยู่ที่ใดก็ตาม

ไมโครเซอร์วิส (Microservices): คอนเทนเนอร์โดดเด่นในสถาปัตยกรรมไมโครเซอร์วิส (Microservice) ที่ออกแบบให้แต่ละ Services แยกจากกันและสามารถจัดการได้โดยไม่กระทบการทำงาน Services อื่นๆ 

ความยืดหยุ่น (Flexibility): รองรับสภาพแวดล้อมต่างๆ มากกว่าเมื่อเทียบกับแบบ Serverless

ข้อด้อย:

ความซับซ้อนในการจัดการ (Complexity): หลักการทำงานของคอนเทนเนอร์โดยเฉพาะอย่างยิ่งในระบบขนาดใหญ่ มักจะมีความซับซ้อนในการจัดการมากกว่า Serverless

ค่าใช้จ่ายสูง (Overhead): คอนเทนเนอร์ต้องการทรัพยากรสูง เพื่อการทำงานอย่างราบรื่น โดยเฉพาะอย่างยิ่งสำหรับระบบที่ไม่ได้ถูกปรับแต่งมาให้เหมาะสม (Optimized)

ลักษณะการใช้งานแต่ละรูปแบบ

พิจารณาจากสถานการณ์ของธุรกิจแพลตฟอร์มอีคอมเมิร์ซ ก็จะได้ลักษณะการใช้งานประมาณนี้

Serverless: เหมาะอย่างยิ่งสำหรับการทำงานที่มีการเรียกใช้เป็นระยะๆ ไม่ต่อเนื่อง เช่น เมื่อผู้ใช้ทำการสั่งซื้อสินค้า ฟังก์ชันบน Serverless อาจถูกเขียนเพื่อใช้งานปรับจำนวนสินค้าในสต็อก การส่งอีเมลเพื่อยืนยัน หรือการส่งต่อคำสั่งซื้อให้ฝั่งโลจิสติกส์รับช่วงต่อ เป็นต้น

Containers: เว็บไซต์หลักในปัจจุบันมักมี Microservices หลายตัวแยกกันทำงาน ซึ่งรองรับการใช้งานแบบ Containers ได้ เช่น การจัดการผู้ใช้ (Users) ระบบแค็ตตาล็อกผลิตภัณฑ์ และเกตเวย์การชำระเงิน เพื่อมั่นใจได้ว่าจะระบบหน้าบ้านจะยังเสถียรภาพตลอดเวลา แม้หลังบ้านมีการ พัฒนา ทดสอบ และนำขึ้นใช้งานอยู่ (development, testing, production)

แล้วถ้านำทั้งสองรูปแบบใช้ร่วมกัน

ในทางปฏิบัติแล้ว หลายธุรกิจจะได้ประโยชน์จากการนำ Cloud computing ทั้งสองมาผสมผสานกันอย่างมาก เช่น 

– ใช้ Serverless สำหรับรูปแบบงานที่มีลักษณะเฉพาะเจาะจง มีการเรียกใช้เป็นบางครั้งคราว (Event-driven) หรือรูปแบบงานที่คาดเดาลักษณะโหลดใช้งานได้ยาก

– นำ Containers มาใช้สำหรับแอปพลิเคชันที่อยู่ในสภาพแวดล้อมที่สามารถควบคุมได้ มีกระบวนการรันที่นาน หรือการประสานงานระหว่าง Microservice ย่อยหลาย ๆ ส่วนร่วมกัน 

สรุป

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

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

 

ติดตามข้อมูลข่าวสารและกิจกรรมของเราได้ที่ช่องทาง Facebook FanpageLinkedin หรือดูข้อมูลและติดต่อรับคำปรึกษาได้ที่เว็บไซต์ของเรา