🟡 Trung cấp · Bài 9 / 14

Kiến trúc ứng dụng

Cách tổ chức ứng dụng ở mức kiến trúc: N-tier, cuộc chiến Monolith vs Microservices, và vai trò của API Gateway.

N-tier Architecture

Chia ứng dụng thành các layer (lớp logic) và tier (tầng vật lý). Layer cao có thể dùng layer thấp, không ngược lại. Tách tier vật lý cải thiện scalability & resiliency nhưng thêm latency mạng.

  • 3-Tier (phổ biến): Presentation → Business Logic → Data Access.
  • 2-Tier: Presentation (client) ↔ Data store trực tiếp.
  • 1-Tier: tất cả trên một máy/app (như chạy app trên một PC).
Kiến trúc N-tier
Kiến trúc 3-tier: Presentation → Business Logic → Data Access

Monolith vs Microservices ⭐

Monolith: ứng dụng tự chứa, xây như một đơn vị duy nhất, làm mọi bước cho một nhu cầu nghiệp vụ.

Microservices: tập hợp các dịch vụ nhỏ, tự chủ, mỗi service triển khai một business capability trong một bounded context, có codebase & database riêng (database-per-service), deploy độc lập.

MonolithMicroservices
Phát triển ban đầuĐơn giản, dễ debug/testPhức tạp (hệ phân tán)
Giao tiếp nội bộNhanh, đáng tin (in-process)Qua mạng (latency, thách thức)
DeployRedeploy toàn bộ mỗi lần updateDeploy từng service độc lập
ScaleKhó, tightly coupledScale từng service riêng
Reliability1 bug có thể sập cả hệ thốngCô lập lỗi tốt hơn
Tech stackCam kết một stackTự do chọn stack mỗi service
Kiến trúc Monolith
Monolith — một khối duy nhất, một database chung
Kiến trúc Microservices
Microservices — nhiều service nhỏ, mỗi service có database riêng
🚨 Bạn (có thể) KHÔNG cần microservices

Microservices giải quyết vấn đề tổ chức (organizational) nhiều hơn công nghệ. Nên bắt đầu bằng monolith khi xây hệ thống mới. Chỉ tách microservices khi: team quá lớn cho một codebase, bị block bởi team khác, có business value rõ ràng. Cảnh giác "distributed monolith" — trông như microservices nhưng vẫn tightly coupled (share database, cần giao tiếp low-latency, phụ thuộc lẫn nhau).

ℹ️ Modular Monolith — lựa chọn trung gian

Deploy một app duy nhất nhưng tách code thành các module độc lập theo feature → giảm phụ thuộc, dễ nâng cấp từng phần. Là bước đệm tốt trước khi (nếu cần) tách microservices.

Phổ kiến trúc từ monolith đến microservices
Phổ kiến trúc: từ Monolith → Modular Monolith → Microservices

API Gateway

Là công cụ quản lý API, nằm giữa client và một tập backend service — single entry point đóng gói kiến trúc nội bộ và cung cấp API tùy biến cho từng client.

Vì sao cần? Microservices thường cung cấp API fine-grained → client phải gọi nhiều service. API Gateway gom lại một điểm vào với nhiều tính năng quản lý.

API Gateway
API Gateway — single entry point đứng giữa client và các microservice

Tính năng: authentication/authorization, service discovery, reverse proxy, caching, security, retry & circuit breaking, load balancing, logging/tracing, API composition, rate limiting/throttling, versioning, routing, IP whitelisting.

⚠️ Nhược điểm

Có thể là single point of failure, ảnh hưởng performance, thành bottleneck nếu không scale đúng, và cấu hình phức tạp. → Nhớ chạy bản dự phòng.

ℹ️ Backend For Frontend (BFF)

Tạo backend riêng cho từng loại frontend (web/mobile...). Khi data từ microservice không đúng format/filter mà frontend cần, BFF là lớp trung gian lấy & định dạng lại data. GraphQL hoạt động rất tốt như một BFF.

Backend For Frontend
BFF — backend riêng cho từng loại frontend (web, mobile...)
✅ Tóm tắt bài 9

N-tier tách layer/tier (3-tier phổ biến). Monolith đơn giản lúc đầu, microservices scale & cô lập lỗi tốt nhưng phức tạp — đừng vội tách, hãy bắt đầu monolith. API Gateway = single entry point gom nhiều tính năng (auth, routing, rate limit...); BFF tùy biến backend theo từng frontend.