ทำไมเราถึงกลับมาใช้ Modular Monolith
ทีมพัฒนาซอฟต์แวร์กำลังเปลี่ยนกลยุทธ์ หลายทีมใช้เวลาหลายปีในการแยกแอปพลิเคชันออกเป็น microservices แต่ตอนนี้พวกเขากำลังนำชิ้นส่วนเหล่านั้นกลับมารวมกันใหม่ พวกเขาไม่ได้กำลังสร้าง monolith แบบเก่าที่ยุ่งเหยิง แต่พวกเขากำลังสร้าง modular monoliths
Microservices สร้างต้นทุนแฝง ระบบแบบกระจายตัว (Distributed systems) เพิ่มความซับซ้อนอย่างมหาศาล หลายทีมเลือกใช้ microservices เพราะกระแสความนิยม ไม่ใช่เพราะต้องการการขยายตัว (scale) หากคุณมีทีมขนาดเล็ก microservices อาจกำลังทำให้คุณทำงานช้าลง
Modular monolith มอบข้อดีของทั้งสองโลก มันยังคงเป็นหน่วยที่สามารถ deploy ได้เพียงหน่วยเดียว แต่โค้ดจะถูกจัดระเบียบเป็นโมดูลที่เคร่งครัด คุณจะได้ขอบเขต (boundaries) ที่ชัดเจนโดยไม่ต้องแบกรับต้นทุนที่สูงจากการรันระบบแบบกระจายตัว
เปรียบเทียบทั้งสองแนวทาง:
• Deployment: Monoliths ใช้หน่วยเดียว Microservices ใช้หลายหน่วย • Boundaries: Monoliths ใช้กฎของโค้ดที่เคร่งครัด Microservices ใช้เครือข่าย • Communication: Monoliths ใช้การเรียกฟังก์ชันแบบง่าย Microservices ใช้การเรียกผ่านเครือข่าย • Overhead: Monoliths มีต้นทุนการดำเนินงานต่ำ Microservices มีต้นทุนสูง
เมื่อไหร่ที่คุณควรเลือก modular monolith?
- ทีมของคุณมีวิศวกรน้อยกว่า 50 คน
- คุณต้องการลดต้นทุนโครงสร้างพื้นฐานคลาวด์ (cloud infrastructure)
- คุณต้องการทำให้การ debug และการทดสอบง่ายขึ้น
- บริการของคุณมักจะต้องถูก deploy พร้อมกันอยู่แล้ว
บริษัทชั้นนำหลายแห่งเริ่มทำแบบนี้แล้ว Shopify ใช้แนวทางแบบ modular เพื่อจัดการกับร้านค้าหลายล้านราย Amazon Prime Video ได้ย้าย workload เฉพาะบางอย่างจาก microservices กลับมาเป็น monolith ซึ่งพวกเขาสามารถลดต้นทุนโครงสร้างพื้นฐานลงได้ถึง 90%
อย่าสร้างระบบเพื่อรองรับ scale ระดับ Netflix หากคุณเป็นทีมขนาดเล็ก เริ่มต้นด้วยแบบ modular ก่อน แล้วค่อยแยก service ออกมาเมื่อข้อมูลแสดงให้เห็นว่าคุณจำเป็นต้องทำจริงๆ
ใช้รายการตรวจสอบนี้เพื่อดูว่าคุณจำเป็นต้องรวมระบบ (consolidate) หรือไม่:
- คุณใช้เวลาไปกับการ debug การเชื่อมต่อระหว่าง service มากกว่าการสร้างฟีเจอร์หรือไม่?
- ค่าใช้จ่ายคลาวด์ของคุณเติบโตเร็วกว่าจำนวนผู้ใช้งานหรือไม่?
- คุณมีวิศวกร DevOps น้อยกว่า 5 คน สำหรับการดูแลหลายๆ service หรือไม่?
- วิศวกรต้องไล่ตรวจสอบ (tracing) หนึ่ง request ผ่าน 3 service ขึ้นไปเพื่อหา bug หรือไม่?
หากคุณตอบว่าใช่ modular monolith น่าจะเป็นทางเลือกที่ถูกต้อง
Optional learning community: https://t.me/GyaanSetuAi