การออกแบบโครงสร้างแอปพลิเคชันสำคัญไม่แพ้การสร้างบ้าน ถ้าโครงสร้างไม่แข็งแรง บ้านก็พังได้ การเลือกสถาปัตยกรรมให้ดี ไม่ว่าจะเป็นรูปแบบโมโนลิทที่แข็งแรงเปรียบดังเสาหิน หรือไมโครเซอร์วิสที่ยืดหยุ่นเหมือนเลโก้ แต่ละแบบต่างก็มีข้อดี-ข้อเสียแตกต่างกันไป – Microservices vs Monolithic เลือกใช้แบบไหนให้เหมาะกับโครงการสร้างแอปพลิเคชัน และธุรกิจของคุณ ?
สารบัญ
Monolithic Architecture ~ ความเรียบง่ายที่เราคุ้นชิน
การสร้างแอปพลิเคชันที่เป็นลักษณะโปรแกรมใหญ่ก้อนเดียว โดยรวมทุกฟังก์ชันไว้ในที่เดียว เหมือนกับบ้านหลังใหญ่ที่มีทุกห้องอยู่รวมกันหมด โดยทุกส่วนของระบบฯจะอยู่ในโค้ดแหล่งเดียวกัน และทำงานในฐานะโปรแกรมเดียว
จำง่ายๆ Monlithic เปรียบดัง “โปรแกรมที่เป็นเหมือนตึกใหญ่หลังเดียว ที่ทุกห้อง ทุกส่วนเชื่อมต่อหากันหมด ทำงานร่วมกันเป็นระบบเดียว”
ข้อดีของ Monolithic
- การปรับใช้ง่าย (Easy deployment) ไฟล์แอปพลิเคชันที่ถูกสร้างขึ้นทุกอย่างถูกรวบรวมไว้ที่แหล่งเดียว หรือไดเร็กทอรีเดียว
- การทดสอบง่าย (Simplified testing) แอปพลิเคชันถูกเก็บในแหล่งเดียวแบบรวมศูนย์ การทดสอบแบบ End-to-end จึงทำได้เร็วกว่าแอปพลิเคชันแบบกระจายศูนย์
- การดีบักที่ง่าย (Easy debugging) การค้นหาคำขอ (Request) และตรวจสอบปัญหา (Problem checking) ทำได้ง่าย เพราะโค้ดทั้งหมดอยู่แหล่งเดียวกัน (หาโค้ดกันตาเหลือก >.<)
- ประสิทธิภาพ (Performance) ระบบโค้ดและแหล่งเก็บข้อมูลแบบรวมศูนย์ API เดียวสามารถทำหน้าที่เดียวกันกับหลายๆ API ในระบบไมโครเซอร์วิสได้
- การพัฒนา (Development) แอปพลิเคชันถูกสร้างขึ้นด้วยฐานโค้ดเดียวกัน การพัฒนาก็จะง่ายขึ้น
ข้อเสียของ Monolithic
- การพัฒนาช้าลง (Slower development speed) เมื่อแอปพลิเคชันมีขนาดใหญ่ขึ้น การพัฒนาจะมีความซับซ้อน และยุ่งยากขึ้นตามมา
- ความน่าเชื่อถือต่ำ (Low Reliability) หากมีข้อผิดพลาดเกิดขึ้นที่จุดใดจุดหนึ่ง หรือ Module ย่อย อาจส่งผลต่อความพร้อมใช้งานทั้งหมดของแอปพลิเคชัน
- อุปสรรคของการนำเทคโนโลยีมาใช้ (Barrier to technology adoption) การปรับเปลี่ยนโครงสร้างหรือภาษาที่ใช้ในแอปพลิเคชันเพียงเล็กน้อย ก็สามารถส่งผลกระทบต่อระบบทั้งหมดได้ และการเปลี่ยนแปลงเหล่านี้มักจะต้องใช้ทั้งเวลา และค่าใช้จ่ายที่สูงขึ้น
- ความยืดหยุ่นต่ำ (Lack of flexibility) เสาหินแท่งเดียวย่อมมีความยืดหยุ่นที่ต่ำอยู่แล้ว ส่วนนี้เราขอไม่อธิบายเพิ่มเติม
- ความสามารถในการขยายขนาด (Scalability) การปรับขนาดแต่ละองค์ประกอบทำได้ยาก เพราะอาจส่งผลกระทบต่อภาพรวมของแอปพลิเคชันได้
Microservices Architecture ~ ที่มาพร้อมความยืดหยุ่นและคล่องตัว
สถาปัตยกรรมไมโครเซอร์วิส เป็นรูปแบบการออกแบบซอฟต์แวร์ที่แบ่งแอปพลิเคชันออกเป็น Service ขนาดเล็กที่ทำงานได้อย่างอิสระ โดยแต่ละ Service จะมีฐานข้อมูล และเทคโนโลยีที่แตกต่างกันไป ซึ่งสามารถติดต่อสื่อสารกันผ่าน API Service เป็นตัวกลาง
ข้อดีของ Microservices
- ความคล่องตัว (Agility) เพิ่มความคล่องตัวให้การทำงาน โดยเฉพาะทีมขนาดเล็กที่ต้องอาศัยการปรับเปลี่ยนบ่อย หรือแม้แต่ความแตกต่างของเทคโนโลยีที่นำมาใช้
- ความยืดหยุ่นในการปรับขนาด (Flexible scaling) ด้วยความสามารถในการยืดหยุ่น การปรับขนาด Scaling ต่างๆ สามารถปรับขยายได้ง่าย เพราะมีการแบ่ง Service ออกเป็นส่วนย่อย
- ความทนทาน (Durability) หากบริการใดบริการหนึ่งล่ม จะไม่ส่งผลต่อระบบทั้งหมด เป็นการแก้ปัญหาทีละจุด
- ความหน้าเชื่อถือสูง (High reliability) หากต้องการปรับปรุงแอปพลิเคชันในจุดใดจุดหนึ่ง สามารถแจ้งปิดให้บริการเป็นส่วนย่อยได้ เพื่อลดการกระทบกับบริการอื่นๆ โดยรวมทั้งหมด ซึ่งช่วยสร้างความเชื่อมั่นให้ผู้ใช้งานได้
- ทีมพัฒนาสุดแฮปปี้ (Happier teams) ด้วยความที่ไมโครเซอร์วิสมีความยืดหยุ่นสูง และเป็นอิสระมากกว่า จึงสามารถสร้าง และปรับปรุงแอปพลิเคชันได้ตรงจุด
ข้อเสียของ Microservices
- ความซับซ้อนในการจัดการ (Complexity of management) การจัดการบริการย่อยหลายๆ อย่างอาจเป็นเรื่องใหม่ และท้าทายสำหรับหลายองค์กร
- ต้นทุนด้านโครงสร้าง (Infrastructure costs) ไมโครเซอร์วิสใหม่ๆ ต้องแลกมาด้วยค่าใช้จ่าย และโครงสร้างพื้นฐานที่สูงขึ้น การปรับตัวในช่วงแรกอาจเป็นเรื่องใหญ่
- ความท้าทายในการดีบัก (Debugging challenges) ใน Service แต่ละรายการมีการเชื่อมโยงเป็นของตัวเองทำให้การดีบักมีความซับซ้อนมากยิ่งขึ้น จึงจำเป็นต้องมีการส่งต่อความเข้าใจภายในองค์กรที่ดี
การเลือกใช้งานระหว่าง Microservices vs Monolithic ?
การเลือกใช้ Monolithic หรือ Microservices ขึ้นอยู่กับความเหมาะสมของแต่ละโครงการ โดยควรพิจารณาถึงขนาดของแอปพลิเคชัน ความซับซ้อน ทีมพัฒนา และงบประมาณเป็นหลัก
บทสรุป
การเลือกสถาปัตยกรรมระหว่าง Microservices และ Monolithic นั้นขึ้นอยู่กับความต้องการเฉพาะทางของโครงการ โดย Microservices เหมาะสำหรับโครงการที่ต้องการความยืดหยุ่น และรองรับการเปลี่ยนแปลงได้อย่างรวดเร็ว ในขณะที่ Monolithic เหมาะสำหรับโครงการที่ต้องการความเรียบง่าย และการจัดการที่ง่าย อย่างไรก็ตามการตัดสินใจที่ดีย่อมส่งผลต่อโครงการในระยะยาว
→ The 12 Factors – กฎหลัก 12 ข้อของการทำแอปพลิเคชันบน Microservice ที่ถูกต้อง