Service Boundaries
Chia theo Domain-Driven Design (DDD): user service, order service, payment service, inventory service. Mỗi service own data + business logic riêng.
Microservices là kiến trúc chia một hệ thống lớn thành nhiều service nhỏ, độc lập, mỗi service đảm nhiệm 1 domain nghiệp vụ và giao tiếp với nhau qua API (REST/gRPC). Khác với monolith — một codebase duy nhất chứa tất cả tính năng. Ví dụ: Netflix chia thành 600+ microservices.
Microservices là buzzword nhiều người nói nhưng ít ai thực sự cần. Đa số dự án VN scale nhỏ (<100 user đồng thời) nên dùng monolith. Microservices chỉ phù hợp khi quy mô đủ lớn + đội dev đủ kỹ năng manage complexity.
Hiểu các thành phần cơ bản để biết khi nào triển khai phần nào trước.
Chia theo Domain-Driven Design (DDD): user service, order service, payment service, inventory service. Mỗi service own data + business logic riêng.
Entry point duy nhất từ frontend → microservices. Handle auth, rate limit, route. Ví dụ: Kong, Cloudflare API Gateway.
REST/gRPC cho sync calls, Message queue (RabbitMQ, Kafka) cho async events. Tránh tight coupling giữa services.
Mỗi service có DB riêng — không share DB. Đảm bảo loose coupling. Cross-service query qua API hoặc event sourcing.
Services tìm nhau qua registry (Consul, Eureka) hoặc DNS-based (Kubernetes Service). Tự động routing.
Distributed tracing (Jaeger, OpenTelemetry), centralized logging (ELK), metrics (Prometheus + Grafana). Debug cross-service khó hơn monolith.
Không phải "tăng năng suất chung chung" — đây là con số thực từ các dự án Alodev đã triển khai.
Service heavy traffic (order, payment) scale up, service ít dùng giữ nguyên. Tiết kiệm resource.
Mỗi đội own 1-2 service, deploy độc lập. Không conflict merge code, không block nhau.
Service AI dùng Python, service web dùng Node.js, service real-time dùng Go. Chọn tool đúng cho từng job.
1 service crash không kéo theo cả hệ thống. Payment service down vẫn xem được catalog.
Nếu ≥2/4 dấu hiệu dưới đúng với hiện trạng, là thời điểm phù hợp để bàn.
Có — đa số SME VN không cần microservices. Monolith tốt cho: <50 dev, <100k user/ngày, đội nhỏ. Microservices premature optimization sẽ làm chậm dự án + đội burn out. Quy tắc: bắt đầu monolith well-structured (modular), khi grow đủ lớn mới refactor sang microservices từng phần.
Modular monolith: 1 deployable nhưng code chia rõ ràng theo domain (như Shopify). 90% lợi ích microservices, 10% complexity. Phù hợp 80% dự án VN. Microservices thực sự: chỉ khi cần scale từng service độc lập + multi-team. Alodev mặc định build modular monolith, refactor khi cần.
Có đáng kể — gấp 2-3x. Lý do: cần infra phức tạp (Kubernetes, API gateway, service mesh), DevOps cao hơn, monitoring stack, testing distributed (E2E, contract tests), nhiều người manage. Cho dự án 200tr-2 tỷ scope thường monolith ROI tốt hơn. Microservices break-even từ dự án 3-5 tỷ+.
Có, gọi là 'strangler fig pattern' — tách dần từng module ra khỏi monolith. Bắt đầu từ module có boundary rõ ràng (notification, payment), test trong production, đến khi monolith chỉ còn legacy module thì retire. Mất 6-18 tháng tuỳ scope. Không bao giờ rewrite from scratch — chết.
Vì khi mới build, domain boundaries chưa rõ — chia microservices sai = phải refactor liên tục, đắt + chậm. Monolith trước cho phép iterate nhanh, khi domain đã stable mới chia services. Đa số 'thành công microservices' (Netflix, Uber) đều bắt đầu monolith và refactor sau khi đã prove product-market fit.