Hệ thống Tool RecordVideo được thiết kế theo kiến trúc xử lý tác vụ bất đồng bộ dựa trên hàng đợi (Queue), Webhooks và tự động hóa trình duyệt (Browser Automation). Kiến trúc này đảm bảo tính ổn định cao, khả năng xử lý song song nhiều luồng và cơ chế tự phục hồi khi gặp sự cố.
1. Quy Trình Vận Hành & Luồng Dữ Liệu (Data Flow)#
Luồng hoạt động của hệ thống được chia thành 6 giai đoạn chính từ khi tiếp nhận yêu cầu đến khi trả kết quả thành công:Bước 1: Tiếp nhận yêu cầu (API Producer Layer)#
Công nghệ: Framework ElysiaJS chạy trên runtime Bun.
Mô tả: Hệ thống API lắng nghe các request từ các CMS hoặc hệ thống quản trị khác thông qua endpoint /api/task. Ngay khi nhận lời gọi, thông tin tác vụ sẽ được lưu vào MongoDB với trạng thái khởi tạo status = 0 (Create/Pending).
Bước 2: Điều phối hàng đợi (Queue Manager)#
Thành phần: InitializeQueueTask() tại module bootstrap/queue_task.ts.
Mô tả: Một tiến trình chạy ngầm thực hiện cơ chế Polling (quét định kỳ) cơ sở dữ liệu. Nó truy vấn các tác vụ có status = 0, cập nhật chúng sang status = 1 (Running) và đẩy (Enqueue) vào hàng đợi Queue<T> trong bộ nhớ để sẵn sàng xử lý.
Bước 3: Phân bổ luồng xử lý (Concurrency Management)#
Mô tả: Hệ thống khởi tạo một lượng các "Node.js Worker Threads" dựa trên cấu hình PROCESS_LIMIT (mặc định = 4).
Cơ chế: Khi có tác vụ trong hàng đợi và có một Worker rảnh (isBusy = false), trình quản lý sẽ sử dụng phương thức postMessage để gán tác vụ xuống Worker tương ứng (worker_task.ts).
Bước 4: Tự động hóa trình duyệt (Browser Automation Engine)#
Công nghệ: puppeteer-real-browser kết hợp với stealth plugin.
Thực thi: Worker mở giả lập trình duyệt, truy cập vào website đích thông qua Proxy (đơn hoặc xoay vòng). Tại đây, hệ thống thực hiện các kịch bản: inject script, tương tác người dùng (click), kiểm tra từ khóa (HTML tĩnh và động), và thực hiện ghi hình/chụp ảnh màn hình.
Bước 5: Xử lý kết quả & Lưu trữ (Post-Processing)#
Mô tả: Sau khi hoàn tất quay chụp, video và ảnh sẽ được lưu tạm tại local (storage/videos/ hoặc images/) trước khi được upload lên dịch vụ lưu trữ đám mây (Cloud Storage/S3).
Cập nhật: Worker gửi tin nhắn ngược lời về luồng chính để cập nhật kết quả vào DB và chuyển trạng thái sang status = 2 (Completed) hoặc status = 3 (Failed).
Bước 6: Báo cáo kết quả (Webhook Delivery)#
Thành phần: InitializeQueueWebhook().
Mô tả: Module này thực hiện quét các bản ghi đã xử lý xong và tự động invoke axios.post để gửi toàn bộ bằng chứng (link ảnh/video, từ khóa tìm thấy) về địa chỉ hookUrl mà đối tác đã đăng ký ban đầu.
2. Cơ Chế Giám Sát & Tự Phục Hồi (Monitoring & Retry)#
Để đảm bảo hệ thống không bị "treo" bởi các tác vụ lỗi, kiến trúc tích hợp 2 lớp bảo vệ:1.
Retry Logic: Module InitQueueTaskRetryOldRunning() tự động quét các tác vụ bị kẹt ở trạng thái Running quá 6 phút (do lỗi tràn bộ nhớ hoặc ngắt mạng) để reset về trạng thái 0 và cho phép chạy lại.
2.
Alerting: Tích hợp bot Telegram để gửi cảnh báo tức thời cho đội kỹ thuật khi có sự cố nghiêm trọng xảy ra.
3. Các Thành Phần Công Nghệ Lõi (Core Stack)#
| Lớp (Layer) | Công nghệ sử dụng |
|---|
| Runtime & Framework | Bun >= 1.2.2, ElysiaJS. |
| Cơ sở dữ liệu | MongoDB >= 8.0, Typegoose. |
| Xử lý đa luồng | Node.js Worker Threads. |
| Xử lý Media | FFmpeg (Quay và nén video), Puppeteer (Capture). |
| Môi trường Headless | Xvfb (Giả lập màn hình ảo trên Linux). |
Modified at 2026-03-27 10:52:41