Yêu cầu hạ tầng triển khai EVO LMS
Tài liệu này liệt kê phần cứng, mạng và dịch vụ để một đơn vị (trường) tự mua sắm hoặc rà soát năng lực hiện có nhằm vận hành EVO LMS. Các con số được đo trực tiếp từ một deployment đang chạy thực tế và đối chiếu với baseline stress test, không phải ước lượng cảm tính.
- Quy mô mục tiêu: 4.000 sinh viên
- Đỉnh thi thiết kế: 2.000 người đồng thời (bán đồng bộ)
- Kiến trúc khuyến nghị: tách App + Database (2 server)
- CDN / lưu trữ file: Cloudflare R2 (egress miễn phí)
Cấu hình khuyến nghị: App server 48 vCPU / 96 GB / 256 GB NVMe + Database server 16 vCPU / 64 GB / 512 GB NVMe. Nếu muốn gọn thành 1 máy: 64 vCPU / 128 GB / 1 TB NVMe.
1. Hiện trạng tham chiếu
Một deployment tham chiếu đang phục vụ 600 sinh viên trên duy nhất 1 server all-in-one (chạy toàn bộ khoảng 50 container: LMS, Auth, Exam, AI/RAG, Notification, Storage, Monitoring, Backup).
| Thành phần | Cấu hình | Ghi chú |
|---|---|---|
| CPU | 16 vCPU | Intel Xeon E5-2696 v4 @ 2.2 GHz |
| RAM | 32 GB | Đang dùng 23 GB, swap gần đầy |
| Ổ cứng | 256 GB SSD | Đã dùng 94 GB (40%) |
| Nền tảng | Ubuntu 22.04 | Docker + Dokploy + Traefik |
Ở 600 sinh viên, máy đã dùng gần hết RAM và phải swap. Đây là mức tối thiểu chạy được, không còn dư. Vì vậy khi mở rộng lên 4.000 sinh viên cần nâng cấp thật sự, không chỉ là thêm buffer.
2. Căn cứ tính toán
Con số cấu hình không suy ra từ tổng số sinh viên, mà từ đỉnh người dùng đồng thời lúc thi - yếu tố ngốn CPU lớn nhất. Phần lớn RAM của máy tham chiếu là overhead nền tảng cố định (không phụ thuộc 600 hay 4.000 sinh viên).
Ba mốc đo được làm gốc:
| Mốc | Số đo | Ý nghĩa |
|---|---|---|
| Máy tham chiếu (600 SV) | 16 core / 32 GB | Nghẽn vì RAM (overhead cố định), không phải CPU. Vận hành thường ngày gần như không đụng CPU. |
| Stress test | ~860 req/s trên 16 core | Suy ra khoảng 50 req/s mỗi core. Fail 70% khi vượt 5.000 người đồng thời. |
| Production đại học lớn | 32 core / 62 GB | Tỷ lệ ~2 GB RAM cho mỗi vCPU, dùng làm chuẩn cân đối CPU/RAM. |
Từ đó ước tính tải đỉnh cho kịch bản 2.000 người thi bán đồng bộ:
Tải đỉnh ~ 2.000 người x 0.4 req/s + burst lúc bắt đầu/nộp bài
~ 1.600 - 2.400 req/s
CPU cần ~ 2.400 req/s / 50 req/s mỗi core
~ 48 core cho tầng App
RAM đi kèm ~ 2 GB mỗi core (Gunicorn workers = 2 x core + 1, mỗi worker ~300 MB)
Khi không thi: 4.000 SV x ~15% online x ~0.2 req/s ~ 120 req/s, chỉ 16-32 core là thừa. Cấu hình lớn hoàn toàn là để nuốt đỉnh mùa thi.
3. Bảng năng lực theo đỉnh đồng thời
Bảng để đối chiếu nếu chính sách thi thay đổi. Dòng được đánh dấu ứng với kịch bản bán đồng bộ 2.000 người.
| Đỉnh đồng thời (mùa thi) | req/s (kể cả burst) | CPU cần | RAM cần | Ghi chú |
|---|---|---|---|---|
| 500 - thi lệch ca nhiều đợt | ~250-500 | 16-24 core | 48 GB | 1 server all-in-one là đủ |
| 1.000 | ~500-1.000 | 24-32 core | 64 GB | 1 server, nên tách DB |
| 2.000 - bán đồng bộ (đã chọn) | ~1.000-2.400 | 48 core | 96-128 GB | Tách App + DB, hoặc scale-out 2 app node |
| 4.000 - đồng bộ toàn trường | ~2.000-4.000+ | 64-96 core | 128 GB+ | Bắt buộc scale-out nhiều app node |
4. Cấu hình chốt cho đỉnh 2.000 đồng thời
Phương án A - Tách App + Database (khuyến nghị)
Database tách riêng nên không bị App giành CPU lúc đỉnh thi. Cân bằng chi phí và độ ổn định.
| Server | CPU | RAM | Ổ cứng | Vai trò |
|---|---|---|---|---|
| App server | 48 vCPU | 96 GB | 256 GB NVMe | Django, Celery, go-proxy, Angular, Exam app, AI, Novu, Redis |
| DB server | 16 vCPU | 64 GB | 512 GB NVMe | 3 PostgreSQL (LMS/Auth/Exam), PgBouncer, Backup |
Tổng: 64 vCPU / 160 GB.
Phương án B - 1 server all-in-one
Đơn giản nhất khi mua sắm và vận hành. Rủi ro: mùa thi App và DB tranh CPU của nhau, cần RAM l ớn hơn vì PostgreSQL nằm chung máy.
| Server | CPU | RAM | Ổ cứng |
|---|---|---|---|
| All-in-one | 64 vCPU | 128 GB | 1 TB NVMe |
Phương án C - Scale-out (HA, linh hoạt theo đợt thi)
Linh hoạt nhất: bật thêm node mùa thi, tắt bớt lúc thường. Chịu lỗi tốt. Django và Exam app đều stateless nên đặt sau Traefik + PgBouncer, mở rộng chỉ cần thêm node.
| Server | CPU | RAM | Ổ cứng |
|---|---|---|---|
| App node x2 | 24 vCPU mỗi node | 48 GB mỗi node | 200 GB NVMe |
| DB server | 16 vCPU | 64 GB | 512 GB NVMe |
Vượt khoảng 32-48 core thì nên scale-out (thêm máy) thay vì scale-up (1 máy khổng lồ). Django và Exam app stateless nên nhân bản dễ, tránh được điểm chết đơn lẻ.
Lưu ý phần cứng: CPU nên là Intel Xeon / AMD EPYC đời gần (>= 2.5 GHz). Ổ cứng bắt buộc NVMe SSD vì database phụ thuộc IOPS. Vì file và video đẩy lên CDN (R2/GCS), đĩa local chủ yếu cho hệ điều hành, Docker, database, vector DB và log.
5. Danh mục dịch vụ chạy trên hệ thống
Toàn bộ chạy bằng Docker, không cần license (đều open-source).
| Nhóm | Số container | Thành phần |
|---|---|---|
| LMS Core | 9 | Django backend (Gunicorn), Celery worker + beat, Flower, go-proxy (cache), Angular frontend, PostgreSQL, PgBouncer, Redis |
| Auth Service | 6 | 2 bản sao app (login + refresh token), Celery worker + beat, PostgreSQL, PgBouncer, Redis |
| Exam App | 6 | Backend, Nginx, Celery + beat, PostgreSQL, Redis. Hot path mùa thi |
| AI / RAG | 9 | AI backend, embedding + question-gen + grading worker, Milvus (vector DB) + etcd, LiteLLM proxy + Postgres + Redis. Tùy chọn |
| Notification (Novu) | 6 | API, WebSocket, worker, dashboard, MongoDB, Redis |
| Object Storage | 8 | SeaweedFS (master, 2 volume, filer, S3, WebDAV). Tùy chọn - thay bằng R2/GCS thì bỏ được |
| Monitoring | 3 | cAdvisor, node-exporter, promtail |
| Backup và Ingress | 3 | pgbackweb + DB, Traefik (reverse proxy + SSL tự động) |
6. Chi phí vận hành hàng tháng (OPEX)
Đây là chi phí thuê bao, không phải phần cứng mua một lần. Cần dự trù riêng.
| Hạng mục | Nhà cung cấp | Ước tính | Ghi chú |
|---|---|---|---|
| CDN / lưu trữ file | Cloudflare R2 | ~15-30 $/tháng | Storage 0.015 $/GB. Egress miễn phí - rất lợi vì sinh viên tải tài liệu nhiều |
| (Phương án CDN khác) | Google Cloud Storage | cao hơn nhiều | Storage tương đương nhưng egress ~0.08-0.12 $/GB, đắt khi tải file nhiều |
| Backup offsite | R2 / GCS | ~5-10 $/tháng | pgbackweb tự đẩy backup DB lên cloud |
| Video bài giảng (tùy chọn) | Mux | theo phút | Chỉ cần nếu dùng video. Bỏ qua nếu chỉ dùng SCORM/tài liệu |
| AI (tùy chọn) | LLM API | theo usage | Chấm bài, sinh câu hỏi, chatbot RAG. Tắt được nếu không dùng |
| Email / SMTP | SES / SendGrid / Workspace | ~0-10 $/tháng | Gửi thông báo + OTP đăng nhập |
| Tên miền + SSL | Nhà cung cấp domain | ~10-15 $/năm | SSL miễn phí (Let's Encrypt qua Traefik) |
7. Mạng, tên miền và hạ tầng phụ trợ
| Hạng mục | Yêu cầu |
|---|---|
| Đường truyền Internet | Tối thiểu 100 Mbps, khuyến nghị 500 Mbps - 1 Gbps, ưu tiên đối xứng (đỉnh đăng nhập/thi đồng loạt) |
| IP tĩnh public | Tối thiểu 1 địa chỉ IPv4 tĩnh |
| Tên miền | 1 domain chính (vd lms.truong.edu.vn) + quyền tạo subdomain cho api / auth / exam / ai / storage / notification |
| Firewall | Mở cổng 80 và 443 ra Internet; SSH qua cổng tùy chỉnh, giới hạn IP quản trị |
| Nếu đặt on-premise | UPS + nguồn điện dự phòng, phòng máy có điều hòa / chống ẩm, người trực vận hành. Nếu không đủ điều kiện, khuyến nghị thuê VPS/cloud cho ổn định |
8. Checklist rà soát cho nhà trường
- App server 48 vCPU / 96 GB / 256 GB NVMe
- DB server 16 vCPU / 64 GB / 512 GB NVMe (hoặc gộp all-in-one 64 vCPU / 128 GB / 1 TB)
- Đường truyền >= 500 Mbps + 1 IP tĩnh public
- Tên miền + quyền quản trị DNS
- Tài khoản Cloudflare R2 (hoặc GCS) cho CDN + backup offsite
- SMTP gửi email (SES / SendGrid / Google Workspace)
- Tài khoản Mux cho video (tùy chọn)
- Ngân sách LLM API cho tính năng AI (tùy chọn)
- UPS + phòng máy chủ (nếu on-premise)
9. Ghi chú phương pháp
Mức tiêu thụ tài nguyên đo trực tiếp trên server đang vận hành (16 vCPU Xeon E5-2696 v4 / 32 GB / 256 GB SSD, khoảng 50 container) và đối chiếu baseline stress test (16 core = ~860 req/s, tương đương ~50 req/s mỗi core). Đỉnh thi thiết kế 2.000 người đồng thời (bán đồng bộ) là biến quyết định CPU/RAM; nếu chuyển sang thi đồng bộ toàn trường 4.000 người thì cần scale-out thêm app node theo bảng mục 3. Phần mềm nền tảng (Ubuntu LTS, Docker, Dokploy, Traefik) đều miễn phí, không phát sinh chi phí license.