1. Thiết Kế Kiến Trúc Cho Khởi Đầu (500 Users/Ngày)
Câu hỏi: Nếu ứng dụng hiện chỉ có 500 người dùng/ngày, có nên xây Kubernetes + 20 microservices ngay không? Vì sao?
Problem (Bài toán thực tế):
- Lưu lượng truy cập rất nhỏ (~500 DAU), không đòi hỏi hạ tầng phức tạp hay khả năng xử lý hàng triệu request/giây.
- Nguồn lực team (nhân sự, thời gian, ngân sách) thường hạn chế ở giai đoạn đầu.
- Nhu cầu cốt lõi là tốc độ phát triển tính năng (Feature Velocity) và kiểm chứng sản phẩm (Product-Market Fit).
Trade-off (Đánh đổi khi dùng Microservices + Kubernetes quá sớm):
Đổi lấy: Khả năng scale độc lập từng service và cách ly lỗi (nếu có).
- Phức tạp vận hành (DevOps Burden): Quản lý cluster Kubernetes, CI/CD pipelines cho 20 services, service mesh, distributed tracing, central logging.
- Độ trễ & Phức tạp mạng (Network Latency & Distributed Complexity): Giao tiếp qua mạng giữa 20 services dẫn tới latency, rủi ro partial failure, quản lý distributed transactions (Saga Pattern/2PC).
- Chi phí hạ tầng cao: 20 microservices + Kubernetes cluster yêu cầu nhiều tài nguyên phần cứng nền tảng (control plane, ingress, monitoring tools) ngay cả khi không có traffic.
- Chậm tốc độ phát triển: Thay vì tập trung viết logic sản phẩm, team mất phần lớn thời gian cấu hình Helm, Dockerfile, NetworkPolicies, gRPC/REST clients.
Decision (Quyết định & Đề xuất kiến trúc):
KHÔNG NÊN triển khai Kubernetes + 20 microservices ngay từ đầu.
Giải pháp tối ưu:
- Bắt đầu với kiến trúc Monolith hoặc Modular Monolith.
- Triển khai trên hạ tầng đơn giản (PaaS như Render/Fly.io, hoặc VPS với Docker Compose).
- Thiết kế codebase theo dạng mô-đun rõ ràng để sẵn sàng tách thành Microservices khi hệ thống thực sự chạm giới hạn scale hoặc khi quy mô team tăng lên.