Chuyển đến nội dung chính

Bài 1: Từ Monolith đến Microservices & Micro Frontend — Lộ trình tiến hóa kiến trúc

Hiểu vì sao Monolith trở thành bottleneck, hành trình tiến hóa sang Microservices, và tại sao Frontend cũng cần được phân tách. So sánh Monolith vs SOA vs Microservices vs Micro Frontend. Khi nào nên bắt đầu chuyển đổi.

🏗️ Kiến trúc — Bài 1 Bài 1: Từ Monolith đến Microservices & Micro Frontend — Lộ trình tiến hóa kiến trúc

Thiết kế hệ thống Microservices & Micro Frontend — Từ cơ bản đến Production

Phần 1: Nền tảng — Evolution of Architecture

xdev.asia

Giới thiệu

Hầu hết các hệ thống phần mềm đều bắt đầu là Monolith — và điều đó hoàn toàn đúng đắn. Nhưng khi hệ thống phát triển, team mở rộng, và yêu cầu thay đổi liên tục, kiến trúc Monolith dần trở thành bottleneck. Bài học này giúp bạn hiểu toàn bộ hành trình tiến hóa kiến trúc phần mềm và tại sao Microservices + Micro Frontend là đích đến cho các hệ thống phức tạp.


1. Monolith — Điểm khởi đầu hợp lý

1.1 Kiến trúc Monolith là gì?

Kiến trúc Monolith — toàn bộ modules trong 1 block, shared database

Monolith là kiến trúc mà toàn bộ ứng dụng được xây dựng, deploy và scale như một đơn vị duy nhất. Tất cả các module (User, Product, Order...) chạy trong cùng một process, chia sẻ cùng database, và deploy cùng nhau.

1.2 Ưu điểm của Monolith

Ưu điểmMô tả
Đơn giảnDễ phát triển, debug, test ban đầu
Dễ deployChỉ cần deploy 1 artifact
PerformanceGọi function nội bộ (in-process) thay vì qua network
ACID TransactionsDễ dàng thực hiện transaction xuyên module
Dễ refactorIDE hỗ trợ tốt, tìm kiếm và đổi tên dễ dàng

1.3 Khi nào Monolith trở thành vấn đề?

Khi hệ thống phát triển, Monolith gặp phải các bottleneck:

Về Development:

  • Codebase quá lớn, dev mới cần nhiều thời gian để hiểu
  • Build time tăng lên hàng chục phút
  • Merge conflicts liên tục giữa các team
  • Một bug nhỏ có thể crash toàn bộ hệ thống

Về Deployment:

  • Deploy toàn bộ ứng dụng cho 1 thay đổi nhỏ
  • Release cycle kéo dài (tuần/tháng)
  • Rollback phức tạp, ảnh hưởng toàn bộ

Về Scaling:

  • Phải scale toàn bộ khi chỉ 1 module cần thêm tài nguyên
  • Không thể dùng technology khác nhau cho từng phần

Rule of thumb: Nếu bạn có dưới 5 developers và hệ thống chưa quá phức tạp, Monolith vẫn là lựa chọn tốt nhất.


2. Hành trình tiến hóa kiến trúc

2.1 Monolith → SOA → Microservices

Timeline:
2000s          2010s              2015+              2020+
┌──────┐    ┌──────────┐    ┌──────────────┐    ┌───────────────────┐
│Monolith│ → │   SOA    │ → │ Microservices│ → │ Microservices +   │
│       │    │Services  │    │              │    │ Micro Frontend    │
└──────┘    └──────────┘    └──────────────┘    └───────────────────┘

2.2 SOA (Service-Oriented Architecture)

SOA với ESB — centralized bus trở thành single point of failure

SOA là bước đầu tiên tách Monolith thành các services. Tuy nhiên, SOA có một số hạn chế:

  • Sử dụng ESB (Enterprise Service Bus) tập trung → single point of failure
  • Services thường không thực sự độc lập (shared database, shared libraries)
  • Protocol phức tạp (SOAP, WS-*)

2.3 Microservices — SOA done right

Microservices kế thừa ý tưởng SOA nhưng với các nguyên tắc cốt lõi:

┌──────────────────────────────────────────────────────┐
│                 API GATEWAY                          │
└──────┬──────────┬──────────────┬─────────────────────┘
       │          │              │
  ┌────┴────┐ ┌───┴────┐  ┌─────┴─────┐
  │  User   │ │Product │  │  Order    │
  │ Service │ │Service │  │  Service  │
  │         │ │        │  │           │
  │ ┌─────┐ │ │┌─────┐ │  │ ┌──────┐  │
  │ │ DB  │ │ ││ DB  │ │  │ │  DB  │  │
  │ └─────┘ │ │└─────┘ │  │ └──────┘  │
  └─────────┘ └────────┘  └───────────┘
  
  Mỗi service: Own database, Own deployment, Own team

So sánh SOA vs Microservices:

Tiêu chíSOAMicroservices
CommunicationESB (centralized)Smart endpoints, dumb pipes
DataShared DB phổ biếnDatabase per service
SizeCó thể rất lớnNhỏ, focused
DeployThường deploy cùngIndependent deployment
TechnologyThường homogeneousPolyglot

3. Frontend Monolith — Vấn đề bị bỏ quên

3.1 Backend đã tách, Frontend vẫn gộp

Frontend Monolith — Backend đã tách nhưng Frontend vẫn là 1 cục SPA khổng lồ

Nhiều tổ chức đã áp dụng Microservices cho backend, nhưng frontend vẫn là một ứng dụng SPA khổng lồ (React/Angular/Vue monolith).

3.2 Hệ quả của Frontend Monolith

  • Code coupling: Tất cả team đóng góp vào cùng 1 repo frontend
  • Tech lock-in: Không thể dần dần upgrade framework
  • Slow builds: Bundle size ngày càng lớn
  • Deployment bottleneck: Phải deploy toàn bộ frontend
  • Team dependencies: Team A chờ Team B merge code

3.3 Micro Frontend — giải pháp

┌─────────┐  ┌──────────┐  ┌─────────────┐
│  User   │  │ Product  │  │   Order     │
│  MFE    │  │   MFE    │  │    MFE      │
│ (React) │  │  (Vue)   │  │  (React)    │
└────┬────┘  └─────┬────┘  └──────┬──────┘
     │             │              │
     └─────────┬───┴──────────────┘
               │
     ┌─────────┴──────────┐
     │   SHELL / CONTAINER │
     │   Application       │
     └────────┬────────────┘
              │
┌─────────────┴────────────────────────┐
│            API GATEWAY               │
└──────┬──────────┬──────────┬─────────┘
  ┌────┴────┐ ┌───┴────┐ ┌──┴────────┐
  │User µS  │ │Product │ │Order µS   │
  └─────────┘ └────────┘ └───────────┘

4. Khi nào nên chuyển đổi?

4.1 Signals cần Microservices

  • Team > 10 người làm việc trên cùng codebase
  • Release bị block bởi team khác
  • Scaling không đều: 1 module cần scale nhưng phải scale tất cả
  • Technology lock-in: muốn dùng tech mới nhưng không thể
  • Failure cascade: 1 bug crash toàn bộ hệ thống

4.2 Signals cần Micro Frontend

  • Nhiều team phát triển feature trên cùng frontend app
  • Frontend build time > 5 phút
  • Merge conflicts frontend thường xuyên
  • Muốn upgrade framework nhưng phải đổi toàn bộ
  • Independent release cho từng phần UI

4.3 Khi nào KHÔNG nên?

Don't fix what ain't broken.

  • Team nhỏ (< 5 devs) → Monolith là đủ
  • MVP / Startup → Tốc độ phát triển quan trọng hơn kiến trúc
  • Hệ thống đơn giản, ít thay đổi → Over-engineering
  • Team chưa đủ kinh nghiệm DevOps → Microservices tăng operational complexity

5. Tổng quan series này

5.1 Roadmap học tập

Phần 1-3:  Backend Foundation → DDD, Service Design, Data Architecture
Phần 4-5:  Micro Frontend    → Architecture, Implementation, Design System
Phần 6:    Integration Layer  → BFF, API Gateway, GraphQL Federation
Phần 7-8:  Quality & Deploy   → Testing, CI/CD, Deployment Strategies
Phần 9:    Production         → Observability, Performance, Readiness
Phần 10:   Real World         → Case Study, Migration Guide

5.2 Dự án xuyên suốt

Xuyên suốt series, chúng ta sẽ thiết kế một E-Commerce Platform hoàn chỉnh:

  • 5 Microservices: User, Product, Cart, Order, Payment
  • 5 Micro Frontends: Homepage, Product Detail, Cart, Checkout, Account
  • Shared: Design System, Auth, API Gateway

Tóm tắt

Kiến trúcKhi nào dùngTradeoff chính
MonolithTeam nhỏ, MVP, hệ thống đơn giảnDễ bắt đầu, khó scale
MicroservicesTeam lớn, cần scale độc lậpPhức tạp hóa ops & data
Micro FrontendNhiều team FE, cần deploy độc lậpTăng bundle size, cần design system
Full-stack (MS + MFE)Tổ chức lớn, sản phẩm phức tạpCần DevOps maturity cao

Đọc thêm


Bài tiếp theo: Bài 2: Domain-Driven Design — Tư duy phân tách hệ thống