0

# [Open Source] #171 - ConvertX: Hệ thống chuyển đổi tệp tin vạn năng với kiến trúc Bun/ElysiaJS, cơ chế Adapter cho CLI và tư duy hiệu năng cực hạn

Việc chuyển đổi định dạng tệp tin thường đòi hỏi các bộ thư viện nặng nề và phức tạp. ConvertX phá vỡ rào cản đó bằng cách xây dựng một "lớp điều phối" (Orchestration Layer) tinh gọn, tận dụng sức mạnh của các công cụ dòng lệnh (CLI) huyền thoại như FFmpeg, Pandoc và ImageMagick. Với nhân xử lý là Bun, ConvertX mang lại tốc độ phản hồi vượt trội cùng khả năng hỗ trợ hàng trăm định dạng: từ Video 4K, tài liệu văn phòng đến các mô hình 3D và E-book.

Dưới góc độ kỹ thuật, ConvertX là một minh chứng xuất sắc cho việc kết hợp giữa ElysiaJS, kỹ thuật Adapter Pattern cho các tiến trình con và tư duy xử lý I/O bất đồng bộ hiệu quả.

Github: https://github.com/stue90/convertx


🛠️ 1. Nền tảng công nghệ: Sức mạnh từ Runtime Bun

ConvertX chọn một ngăn xếp công nghệ "Bleeding Edge" để đạt được hiệu suất tối đa:

  • Execution Runtime (Bun): Sử dụng Bun thay cho Node.js để tận dụng tốc độ khởi động nhanh và hiệu năng xử lý JavaScript cực đại. Bun cũng tích hợp sẵn bộ engine SQLite, giúp quản lý trạng thái công việc (Jobs) một cách nhẹ nhàng.
  • Web Framework (ElysiaJS): Một framework được thiết kế riêng cho Bun, mang lại tốc độ xử lý request tiệm cận với mã nguồn C++ thuần túy, đồng thời đảm bảo an toàn kiểu dữ liệu (Type-safety) thông qua TypeScript.
  • Conversion Engines (The CLI Army): Dự án không viết lại logic chuyển đổi mà đóng vai trò là "Nhạc trưởng" điều phối các công cụ chuẩn công nghiệp: FFmpeg (Media), Pandoc/LibreOffice (Docs), ImageMagick/Vips (Images), Assimp (3D) và Calibre (E-books).
  • Server-side JSX Rendering: Sử dụng @kitajs/html để render giao diện trực tiếp từ server. Cách tiếp cận này loại bỏ gánh nặng của các framework client-side nặng nề, giúp Dashboard khởi động tức thì.

🏗️ 2. Trụ cột kiến trúc: Modular Adapters và Async Child Processes

Kiến trúc của ConvertX được thiết kế để mở rộng một cách linh hoạt:

  • Converter Adapter Pattern: Mỗi công cụ CLI được đóng gói trong một Adapter độc lập. Tất cả đều tuân thủ một Interface duy nhất: tiếp nhận đường dẫn tệp vào và định dạng đích. Tư duy này cho phép người dùng thêm các công cụ chuyển đổi mới (ví dụ: một AI Upscaler) mà không cần can thiệp vào lõi logic của hệ thống.
  • Secure Process Orchestration: Thay vì dùng lệnh exec nguy hiểm, ConvertX sử dụng execFile để thực thi các tệp nhị phân CLI. Kỹ thuật này giúp ngăn chặn tuyệt đối các cuộc tấn công Shell Injection bằng cách tách biệt rõ ràng giữa câu lệnh và tham số đầu vào.
  • Stateless Polling Architecture: Để hỗ trợ các tệp tin lớn cần thời gian xử lý lâu, ConvertX sử dụng cơ chế Polling (truy vấn định kỳ) từ phía Client. Server xử lý tệp trong các tiến trình con bất đồng bộ và liên tục cập nhật trạng thái vào SQLite, cho phép người dùng theo dõi tiến độ thời gian thực mà không làm treo kết nối HTTP.

🔄 3. Workflow: Vòng đời của một yêu cầu chuyển đổi (Sequence Diagram)

Sơ đồ mô tả quy trình từ lúc người dùng tải lên một tệp MP4 đến khi nhận về tệp GIF:

image.png


⚡ 4. Các kỹ thuật "Pro-level" trong mã nguồn

  1. Unlimited Payload Support: ConvertX cấu hình maxRequestBodySize lên mức tối đa. Kỹ thuật này kết hợp với khả năng xử lý stream của Bun cho phép hệ thống "nuốt" được các tệp tin video dung lượng hàng chục GB mà không gây lỗi tràn bộ nhớ (Out of Memory).
  2. Smart Target Discovery: Hệ thống tự động tổng hợp danh sách possibleTargets từ toàn bộ các Adapter hiện có. Khi người dùng tải lên một tệp lạ (vd: .emf), hệ thống sẽ tự động quét và gợi ý các định dạng mà Inkscape hoặc ImageMagick có thể xử lý.
  3. Automatic Job Purge: Tích hợp bộ dọn dẹp (Cleaner) chạy định kỳ để tự động xóa các tệp tạm và tệp kết quả sau 24h, đảm bảo hạ tầng tự lưu trữ luôn gọn nhẹ và bảo mật.
  4. Security Sanitization: Sử dụng sanitize-filename cho mọi tệp đầu vào và đầu ra. Đây là bước quan trọng trong các ứng dụng xử lý file để ngăn chặn các cuộc tấn công ghi đè tệp hệ thống (Path Traversal).

⚖️ 5. So sánh chiến lược

Tiêu chí ConvertX Stirling-PDF CloudConvert (SaaS)
Phạm vi Vạn năng (Media, Docs, 3D) Chuyên sâu PDF Vạn năng
Runtime Bun (Siêu nhanh) Java Proprietary
Triển khai Docker cực nhẹ Docker trung bình Không cần
Quyền riêng tư Tuyệt đối (Self-host) Tuyệt đối Thấp
Cơ sở dữ liệu SQLite nhúng Không/Hạn chế SQL lớn

✅ Kết luận: Tại sao ConvertX là hình mẫu cho File Processing?

ConvertX chứng minh rằng một ứng dụng mạnh mẽ không nhất thiết phải cồng kềnh. Bằng cách làm chủ Runtime Bun và xây dựng một kiến trúc Adapter thông minh cho các công cụ CLI, dự án đã tạo ra một giải pháp chuyển đổi tệp tin có hiệu năng vô địch trong cộng đồng mã nguồn mở.

Đối với các kỹ sư Backend, nghiên cứu ConvertX mang lại giá trị về:

  • Kỹ thuật điều phối Child Processes an toàn và hiệu quả.
  • Cách xây dựng High-performance API với Bun và ElysiaJS.
  • Tư duy thiết kế hệ thống Adapter cho đa công cụ bên thứ ba.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí