สถาปัตยกรรมเสาหิน vs Microservices

Mar 26 2023
Monolithic กล่าวง่ายๆ ก็คือ สถาปัตยกรรมแบบ monolithic คือสถาปัตยกรรมที่ codebase, ฟังก์ชัน และอัลกอริทึมทั้งหมดรวมอยู่ในยูนิตหรือโปรเจกต์เดียว แม้ว่า monolithic จะเป็นแนวทางดั้งเดิมเล็กน้อยในการพัฒนาซอฟต์แวร์ แต่ก็ไม่ได้หมายความว่าจะไม่มีการใช้งานอีกต่อไป

เสาหิน

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

แม้ว่า monolithic จะเป็นแนวทางดั้งเดิมเล็กน้อยในการพัฒนาซอฟต์แวร์ แต่ก็ไม่ได้หมายความว่าจะไม่มีการใช้งานอีกต่อไป สถาปัตยกรรมแบบเสาหินยังคงเหมาะสำหรับโครงการที่เรียบง่ายกว่า เนื่องจากสร้างและปรับใช้ได้ง่ายกว่า

ข้อดี:

  • ง่ายต่อการพัฒนาและปรับใช้
  • มีโอกาสน้อยที่จะเผชิญกับปัญหาด้านความหน่วงเนื่องจากการสื่อสารกับบริการอื่นมีน้อยกว่า
  • นักพัฒนาจำเป็นต้องมุ่งเน้นไปที่องค์ประกอบเดียวเท่านั้น
  • ส่วนประกอบที่เชื่อมต่ออย่างแน่นหนาทำให้ยากต่อการรวมการออกแบบและหลักการของซอฟต์แวร์ที่ดีเข้าด้วยกัน นอกจากนี้ การเปลี่ยนแปลงเล็กน้อยอาจทำให้องค์ประกอบทั้งหมดลดลงได้อย่างมีประสิทธิภาพ
  • การเปลี่ยนแปลงเพียงเล็กน้อยจำเป็นต้องปรับใช้ส่วนประกอบทั้งหมด ซึ่งอาจขัดกับสัญชาตญาณเมื่อพยายามลดต้นทุน
  • มีความยืดหยุ่นน้อยกว่าในการนำเทคโนโลยีใหม่มาใช้เนื่องจากลักษณะของสถาปัตยกรรมเอง

อีกด้านหนึ่ง เรามีไมโครเซอร์วิส Microservices เป็นหน่วยปฏิบัติการหรือบริการขนาดเล็กโดยพื้นฐานแล้วทำงานอย่างอิสระ แต่ทำงานร่วมกันเพื่อสร้างชิ้นส่วนที่ใหญ่ขึ้น ในขณะที่พวกเขาให้บริการที่มีน้ำหนักเบาซึ่งเชื่อมโยงกันอย่างหลวม ๆ แต่ก็มีระดับของความซับซ้อนที่นำมาสู่สถาปัตยกรรม ตัวอย่างดังกล่าวรวมถึงการจัดการคำขอ/การโทรระหว่างบริการต่างๆ และการจัดการฐานข้อมูลที่ใช้โดยแต่ละบริการ

ข้อดี

  • น้ำหนักเบาทำให้ง่ายต่อการหยิบ จัดการ และปรับใช้
  • การเชื่อมต่อแบบหลวมๆ หมายความว่าแม้ว่าบริการหนึ่งจะหยุดทำงาน ก็จะไม่ส่งผลกระทบต่อบริการอื่นๆ เว้นแต่ว่าบริการที่หยุดทำงานนั้นเป็นส่วนหนึ่งของกรณีการใช้งานขนาดใหญ่ที่จำเป็น
  • สามารถปรับขนาดหน่วยเดียวในแนวนอนได้หากต้องเผชิญกับภาระการโทรที่มากขึ้นในบริการใดบริการหนึ่งโดยเฉพาะ
  • ระบบกระจายเพิ่มความซับซ้อนเนื่องจากมีบริการมากขึ้น
  • มีค่าใช้จ่ายสูงเนื่องจากจำเป็นต้องใช้เครือข่ายมากขึ้นเพื่อรักษาเวลาแฝงของการสื่อสารระหว่างส่วนประกอบต่างๆ
  • การดีบักกรณีการใช้งานเดียวอาจทำได้ยาก เนื่องจากเวิร์กโฟลว์ข้ามส่วนประกอบต่างๆ ทำให้ระบุสาเหตุของปัญหาได้ยากขึ้น

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

ฉันเดาว่ากฎทั่วไปคือถ้าคุณคาดการณ์ว่าโปรเจ็กต์จะง่ายกว่าด้วยฟังก์ชันที่ไม่ซับซ้อนแม้ในระยะยาว วิธีการแบบเสาหินจะเหมาะ มิฉะนั้น หากคุณคาดว่าจะต้องปรับขนาดหรือแม้แต่นำเทคโนโลยีใหม่มาใช้ บริการไมโครจะเป็นตัวเลือกที่ดีกว่า