Bỏ qua

ADR-007: Docker Compose trên 2 VM (Không Kubernetes)

Trạng thái

Accepted

Ngày

2026-04-08

Người quyết định

Tech Lead

Architecture Drivers

D4 (Đơn giản vận hành), D8 (Tiết kiệm chi phí)

Bối cảnh

Hệ thống triển khai on-premise tại Data Center Thành phố. Đội 2 senior fullstack không có Ops/SRE riêng. Hệ thống có ~10 container (NGINX, Backend, Frontend, Matching Service, Keycloak, PostgreSQL Primary/Replica, Redis, MinIO, Monitoring stack).

Các Phương Án Xem Xét

Phương án A: Docker Compose trên 2 VM

  • Ưu điểm: Dễ hiểu và vận hành; đội 2 người quản lý được; hành vi dự đoán được; local dev parity; không cần học K8s
  • Nhược điểm: Không auto-scaling; không self-healing; failover thủ công; không rolling deployment

Phương án B: Kubernetes (K3s hoặc full K8s)

  • Ưu điểm: Auto-scaling; self-healing; rolling deployment; service mesh
  • Nhược điểm: Overhead vận hành rất lớn; cần K8s expertise; overkill cho 10 container trên 2 VM; K8s on-premise đặc biệt phức tạp

Quyết Định

Sử dụng Phương án A: Docker Compose trên 2 VM. VM-App chứa application containers, VM-DB chứa data containers. Đủ cho yêu cầu GĐ1 (99.5% uptime, RTO < 4h).

Ngưỡng chuyển đổi: Xem xét K8s khi cần > 3 VM hoặc auto-scaling trở nên quan trọng.

Hệ Quả

Tích cực

  • Đội dành thời gian cho tính năng, không phải hạ tầng
  • Triển khai đơn giản: docker compose up -d
  • Dễ debug và giám sát

Tiêu cực

  • Scaling và failover thủ công
  • Không zero-downtime deployment (downtime ngắn khi restart)

Liên Quan

  • ADR-002 (Modular Monolith — giữ số lượng service thấp)