ป้ายกำกับ: UI

Monolithic ArchitectureMonolithic Architecture

การที่ทุกอย่าง ถูกรวมอยู่ในโปรเจกต์เดียวกันและรันอยู่ใน Server ตัวเดียวกันแบบนี้ เราเรียกว่า Monolithic Architecture


Monolithic Architecture คืออะไร ?

มันคือรูปแบบการสร้างซอฟต์แวร์ที่ส่วนประกอบทั้งหมด (User Interface, Business Logic, Database Access) ถูกรวมเข้าด้วยกันเป็นหน่วยเดียว เวลาคุณสั่ง Build คุณจะได้ไฟล์ก้อนเดียว แล้วนำไปรันที่เดียวจบ

ส่วนประกอบ

  • Frontend: ใช้ Template Engine อย่าง Thymeleaf เพื่อสร้าง HTML บน Server แล้วส่งไปให้ Browser
  • Backend: จัดการสิทธิ์ , ติดต่อ Database (SQL Server) , และควบคุม Flow การทำงาน

API

สามารถใช้ API ควบคู่ไปกับ Web Controller ได้ในโปรเจกต์เดียวกันครับ

  • Controller -> สำหรับส่งหน้าเว็บ
  • RestController -> สำหรับส่งข้อมูล ให้ Mobile App หรือระบบอื่นมาดึงข้อมูลไปใช้

ทำไมเราถึงเรียกว่า Monolith ?

  1. ใช้ Runtime เดียวกัน: เมื่อคุณสั่งรันโปรเจกต์ ทั้งหน้าเว็บ และระบบหลังบ้านจะทำงานภายใต้ Java Process ตัวเดียวกัน
  2. แชร์ Resource เดียวกัน: ใช้ CPU และ RAM ก้อนเดียวกันบนเครื่อง Server
  3. Deploy พร้อมกัน: เวลาคุณแก้ไข Code แค่ปุ่มเดียวในหน้า Login คุณต้อง Build และ Restart ระบบใหม่ทั้งหมด

สรุปสั้นๆ: คือการสร้าง “ระบบที่สมบูรณ์ในตัวมันเอง”


เมื่อไหร่ที่มันจะไม่ใช่ Monolith ?

มันจะเปลี่ยนไปเป็น Decoupled Architecture หรือ Microservices ก็ต่อเมื่อ

  • คุณแยก Frontend ออกไปเขียนด้วย React / Vue แล้วรันบน Server คนละตัวกับ Spring Boot
  • คุณแยก Database ออกไปเป็นหลาย ๆ ก้อนตามฟังก์ชันงาน

เปรียบเทียบกับรูปแบบอื่น

รูปแบบลักษณะการทำงาน
Monolithเหมือน Laravel ที่ใช้ Blade + Controller จบในที่เดียว รันบน Server ตัวเดียว
Decoupled / Separatedแยกเป็น Backend และ Frontend (React /Vue / Next.js) คุยกันผ่าน JSON
Microservicesแยก Backend ออกเป็นหลาย ๆ โปรเจกต์ย่อย แยกฐานข้อมูลกัน

ข้อดีและข้อเสียของ Monolith


ข้อดี

  • Simple: พัฒนาง่าย ไม่ต้องปวดหัวกับการตั้งค่า CORS หรือการยิง API ข้ามเครื่อง
  • Performance: การดึงข้อมูลทำได้เร็วเพราะทุกอย่างอยู่ในหน่วยความจำเดียวกัน
  • Deployment: เอาไฟล์ไปรันที่ Server แค่ที่เดียว จบ
  • เหมาะกับการทำ Prototype อย่างน้อยลดความยุ่งยากในการจัดการ service, API

ข้อเสีย

  • Scalability: ถ้าคนใช้เยอะจนเว็บอืด คุณต้องขยาย ทั้งก้อน ไม่สามารถขยายเฉพาะส่วนได้
  • Tight Coupling: ถ้าส่วนใดส่วนหนึ่งพัง อาจจะทำให้ทั้งระบบรันไม่ได้

อ่านเพิ่มเติม