5.3 KiB
Danh Sách Công Việc Cần Xử Lý (Project Todo List)
Tài liệu này liệt kê các vấn đề cần khắc phục và cải thiện cho dự án Portal VPS/Hosting, được sắp xếp theo độ ưu tiên từ Cao đến Thấp dựa trên đánh giá rủi ro vận hành (Production Readiness).
🚨 Mức Độ 1: Cực Kỳ Quan Trọng (Critical) - Phải Xử Lý Trước Khi Chạy Production
Các vấn đề đe dọa trực tiếp đến khả năng vận hành, bảo mật và hiệu năng của hệ thống.
-
Xử lý cuộc gọi đồng bộ vCenter (Blocking Calls)
- Mô tả: Các thao tác bật/tắt/khởi động lại VPS hiện đang chờ phản hồi từ vCenter ngay trong request của người dùng (nếu vCenter chậm 10s, web treo 10s).
- Giải pháp: Đã chuyển tất cả hành động này vào Laravel Queue (Background Jobs:
StartVmJob,StopVmJob,RebootVmJob). API trả về "Đang xử lý". - File:
app/Http/Controllers/frontend/ServiceController.php(Đã xử lý),App\Http\Controllers\frontend\ManagerService.php(Đã sử dụng Job từ trước).
-
Loại bỏ "Jump Host" PowerShell (Kiến trúc mỏng manh)
- Mô tả: Hệ thống phụ thuộc vào việc SSH vào một máy Windows (
10.10.10.173) để chạy lệnh PowerShell. Nếu máy này chết hoặc lỗi mạng, toàn bộ hệ thống tê liệt. - Giải pháp: Chuyển sang dùng vCenter REST API trực tiếp cho các tác vụ: Snapshot, lấy thông tin VM, đổi cấu hình. Chỉ dùng PowerShell khi thực sự không có cách nào khác (ví dụ: chạy script bên trong Guest OS).
- File:
app/Http/Services/vCenter.php.
- Mô tả: Hệ thống phụ thuộc vào việc SSH vào một máy Windows (
-
Bảo mật SSL (Security)
- Mô tả: Đang sử dụng
Http::withoutVerifying()ở khắp nơi. Dễ bị tấn công Man-in-the-Middle. - Giải pháp: Thêm chứng chỉ CA của vCenter vào server và bật xác thực SSL, hoặc cấu hình Guzzle client đúng cách.
- File:
app/Http/Services/vCenter.php,app/Http/Livewire/VPSReinstallModal.php.
- Mô tả: Đang sử dụng
-
Hiệu năng Redis & Database (Memory Leak)
- Mô tả: Hàm
getAll()trongBaseCachedRepositorycache toàn bộ bảng dữ liệu. Khi dữ liệu lớn sẽ làm tràn RAM Redis/Server. - Giải pháp: Xóa việc cache
getAll(). Sử dụng phân trang (paginate) cho các danh sách. - File:
app/Repositories/BaseCachedRepository.php.
- Mô tả: Hàm
-
Loại bỏ gọi ngược nội bộ (Self-Calling HTTP)
- Mô tả: Livewire
VPSReinstallModalgọiHttp::post(route('service.reinstall.vm')). Đây là một anti-pattern (tốn tài nguyên gấp đôi: 1 request của user + 1 request của server tự gọi mình). - Giải pháp: Gọi trực tiếp Service hoặc Controller method thay vì bắn HTTP request.
- File:
app/Http/Livewire/VPSReinstallModal.php.
- Mô tả: Livewire
⚠️ Mức Độ 2: Quan Trọng (Major) - Cần Xử Lý Sớm
Các tính năng cần thiết để hệ thống hoạt động trơn tru và chuyên nghiệp.
-
Tối ưu Console Access (WebMKS)
- Mô tả: Việc lấy Ticket Console hiện đang đồng bộ.
- Giải pháp: Đặt timeout thấp cho request lấy ticket (ví dụ 5s) hoặc hiển thị trạng thái loading rõ ràng hơn nến kết nối chậm. Cải thiện xử lý lỗi khi ticket không lấy được.
-
Cải thiện Quy trình Reinstall VPS
- Mô tả: Logic reinstall hiện tại xóa VM (
DeleteVirtualMachine) rồi mới tạo lại. Nếu bước tạo lại lỗi, khách hàng mất VM và không có gì thay thế. - Giải pháp:
- Tạo VM mới song song (tên tạm clone).
- Nếu thành công -> Xóa VM cũ -> Rename VM mới -> IP Swap.
- Nếu thất bại -> Báo lỗi, giữ nguyên VM cũ.
- Mô tả: Logic reinstall hiện tại xóa VM (
-
Thêm Index Database
- Mô tả: Các khóa ngoại trong bảng
vpsvàmodule_ip_addresscần được đánh index để tăng tốc độ truy vấn khi số lượng row tăng lên. - Giải pháp: Kiểm tra và thêm index migration.
- Mô tả: Các khóa ngoại trong bảng
📝 Mức Độ 3: Cải Thiện (Minor/Enhancement) - Làm Cho Đẹp & Tiện
Tính năng nâng cao trải nghiệm người dùng.
-
Biểu đồ giám sát (Graphs)
- Mô tả: Khách hàng chưa xem được biểu đồ CPU/RAM/Network.
- Giải pháp: Viết Scheduled Job (Cron) định kỳ 5 phút/lần lấy stats từ vCenter lưu vào DB (bảng
vm_stats) và vẽ biểu đồ bằng Chart.js.
-
Phân tách Queue
- Mô tả: Hiện tại có thể đang dùng chung queue
default. - Giải pháp: Tách queue:
high(thanh toán, mail OTP),default(tác vụ thường),provisioning(tạo VM - rất lâu, cần worker riêng).
- Mô tả: Hiện tại có thể đang dùng chung queue
-
Logging & Monitoring
- Mô tả: Log đang ghi vào file hoặc DB rải rác.
- Giải pháp: Tập trung Log các lỗi quan trọng ra kênh Telegram/Slack (đã có implementation nhưng cần review để không spam tin nhắn rác).
Cập nhật lần cuối: 27/01/2026