File Archive System – upload file đơn giản và hiệu năng bố đời

File Archive System được phát triển từ Image Archive System, hỗ trợ mọi định dạng file, thi thoảng cần share file nào đó upload vào đây cho nhanh, đỡ phải upload vào server hay Google Driver, rồi phải phải xem URL là gì để copy ra như trước đây

Github File Archive System

Tính năng chính

  • Hỗ trợ nhiều tài khoản: Phân phối tải lên nhiều tài khoản Cloudflare R2 để tăng dung lượng lưu trữ
  • Tối ưu hóa hình ảnh: Tự động tối ưu hóa hình ảnh sau khi tải lên thông qua Jetpack
  • Kiểm soát truy cập: Hạn chế số lượng yêu cầu từ mỗi IP và phát hiện hành vi bất thường
  • Hiệu suất cao: Tích hợp với CDN của Cloudflare để tăng tốc độ truy cập
  • Upload hàng loạt: Hỗ trợ tải lên nhiều file cùng lúc với cơ chế phân chia batch tùy chỉnh

Tính năng thêm vào ở File Archive System

  • Trừ ảnh cho hiện ra, mọi định dạng file khác, đều sẽ là download
  • Trang File Manager đơn giản để xóa hoặc đổi tên file
  • Bật xác thực cơ bản cho admin hoặc trang chủ

Tính năng giao diện người dùng

  • Giao diện kéo thả trực quan (xem trước ảnh trước khi tải lên)
  • Mỗi file tự động tạo 4 định dạng URL: Direct, Markdown, BBCode và HTML
  • Click vào URL để tự động copy vào clipboard
  • Nút “Copy All” cho phép copy tất cả URL theo định dạng đã chọn
  • Kiểm tra kích thước và loại file tự động
  • Tự động phát hiện và thông báo lỗi

Giao diện người dùng không khác biệt so với Image Archive System, hướng tới đơn giản nhất có thể, kéo hoặc chọn file cần upload là được

File Archive System – upload file đơn giản và hiệu năng bố đời

  • Do bản này hỗ trợ upload mọi định dạng file, sau khi upload xong, hiển thị tên file ban đầu, nếu upload nhiều file 1 lúc biết file nào tạo ra URL nào (tên file gốc chỉ hiện ra duy nhất 1 lần sau khi upload)

File Archive System – upload file đơn giản và hiệu năng bố đời

  • Ý tưởng File Archive System là 1 hệ thống chứa file, nên trừ ảnh cho hiện ra, mọi định dạng file khác, đều sẽ là download

File Archive System – upload file đơn giản và hiệu năng bố đời

Trang quản trị File Manager đơn giản để xóa hoặc đổi tên file cụ thể nào đó, đôi khi 1 file, ảnh được user báo cáo lại, là vi phạm bản quyền … có thể xóa hoặc đổi tên khác đi cho tiện, đỡ phải lục tung mọi thứ lên xem nó nằm ở đâu

Kiến trúc hệ thống

  • Frontend: Cloudflare Pages
  • Backend: Cloudflare Pages Functions
  • Database: Cloudflare D1 (SQLite)
  • Storage S3: Cloudflare R2
  • Optimization for images: Jetpack

File Archive System tận dụng mọi thứ miễn phí từ Cloudflare, bypass mọi giới hạn của Cloudflare lên mức cao nhất mà mình có thể xử lý

Nếu bạn không biết, dùng DNS Cloudflare (bật đám mây vàng), ở tài khoản miễn phí, sẽ bị giới hạn upload file < 100MB, còn Cloudflare Pages (Worker) cho chạy khoảng 128MB, cấu hình không tốt rất hay báo thiếu RAM

File Archive System lưu trữ file từ Cloudflare R2 nên có thể hỗ trợ mọi định dạng file, dung lượng file lý thuyết có  thể đạt mức …. 5TG, tài khoản free được 10GB nên không bàn thêm làm gì, thực tế trừ vài video blu-ray, hiếm file nào dung lượng cần quá 10GB

Cloudflare R2 tương thích Amazon S3, có thể tận dụng 1 tính năng rất bá mà Amazon gọi là Multipart Upload, S3 hỗ trợ chia một file lớn thành nhiều phần nhỏ, sau đó tự ghép hoàn chỉnh, nhờ công nghệ này, chỉ cần upload từng file nhỏ, vừa vượt qua được giới hạn DNS Cloudflare (chỉ cho upload file < 100MB từ client), vừa giúp server không bị báo thiếu RAM, lại tăng tốc độ upload lên cao nhất có thể (vì có thể upload được nhiều file cùng 1 lúc)

Vấn đề gặp phải của việc upload các file siêu lớn, là nó tốn khá nhiều request ghi vào D1, với 1 file 10GB, nếu bạn cắt nhỏ mỗi phần 10MB, cần tạo ra tới 1.024 file, quá trình này cần ghi vào database 1.024 dòng, trong khi D1, 1 ngày chỉ cho 100.000 lần ghi miễn phí, dùng cá nhân mình nghĩ vẫn thừa, nhưng nếu tạo ra 1 trang để user vào upload toàn file to, thì không đủ

1 điểm khá lạ, dù vẫn dùng Cloudflare Pages làm reverse proxy tương tự reverse proxy từ Alist, nhưng khi chạy qua storage Cloudflare R2 lại không gặp vấn đề giới hạn 50s như reverse proxy của Alist (storage Google Drive)???

Nguyên tắc hoạt động

Cá nhân vẫn thấy nguyên tắc upload file đang vận hành theo các rule quá mức phức tạp

  • Upload thông thường, tự gom nhiều file nhỏ vào 1 file lớn
  • Multipart upload (file > 40MB) thì lại ngược lại, là cắt file lớn thành nhiều part nhỏ, sau đó upload nhiều part nhỏ cùng lúc
  • Cả hai hình thức upload này đều chỉ nhận kết quả trả về ở bước cuối cùng

Nhìn vào code sẽ rất gây lú, vì cứ đẻ tính năng ra, thấy lỗi tới đâu sửa tới đó, không thống nhất các nguyên tắc từ đầu, code thừa chằng chịt

Hiệu năng upload/download

Sau vài ngày thử nghiệm ở điều kiện tương đối cục súc, upload 6 file .ios, tổng dung lượng ~ 42GB mất khoảng ~20 phút, tốc độ upload trung bình đạt ~ 35MB/s, với trường hợp upload 1 file ~ 4.39GB trong 2 phút 8s, tốc độ trung bình khoảng ~35 MB/s, với các file dung lượng nhỏ hơn ~ 100MB, tốc độ upload trung bình ~ 10MB/s

File Archive System – upload file đơn giản và hiệu năng bố đời

Nói chung tốc độ upload khá ổn định, có điều tốc độ download đôi khi lệch hơi nhiều, có khi download được ~ 40MB/s50MB/s, có khi lại chỉ loanh quanh ~ 10MB/s (thậm chí đôi lúc cá biệt, xuống 500kb/s)

File Archive System – upload file đơn giản và hiệu năng bố đời

Vấn đề này có thể tạm lý giải, do các domain download là từ .r2.dev, bị Cloudflare bóp băng thông, muốn đảm bảo tốc độ thì cần custom domain, mà thế chỉ có thể dùng R2 trên domain chính, đành bỏ qua vấn đề này

Độ ổn định

Trên phiên bản Image Archive System, viết ra với mục đích share public, dùng trên số lượng user đông đảo mà vẫn đảm bảo không vượt quá giới hạn miễn phí, mỗi request D1 đều được tính toán kĩ, trên phiên bản File Archive System, sử dụng cá nhân, mục đích duy nhất là …. chạy không lỗi và tốc độ nhanh nhất có thể, không quan tâm tới chuyện dùng nhiều hay ít request 😀 tạm các lỗi thấy đã cố sửa, các lỗi chưa thấy thì khi nào dùng gặp thì sửa sau 😅

Ah, còn 1 lỗi khá là ảo, mà tới giờ mình cũng không hiểu sửa kiểu gì, File Archive System chạy trên 19 server upload, tất cả dùng cùng 1 cấu hình, sau đó clone ra 19 nơi, vấn đề nó ảo điên, là 18 server chạy bình thường, 1 server cứ chạy là báo lỗi, xóa đi tạo mới, vẫn lỗi, hoàn toàn không hiểu là tại sao, đành bỏ server đó ra 🤣

Cài đặt

File Archive System - Giới thiệu, hướng dẫn cài đặt và đánh giá hiệu năng

Nếu bạn nào thích, muốn cài 1 phiên bản tương tự, có thể xem hướng dẫn tại Github, hoặc clip bên trên

Kết luận:

Sử dụng cá nhân, tạm cũng chưa gặp vấn đề gì để phàn nàn, sau bài này, share file gì sẽ dùng qua File Archive System cho tiện


Related Posts

Chính sách bình luận: Chúng tôi rất trân trọng các bình luận của bạn và cảm ơn thời gian bạn dành để chia sẻ ý tưởng và phản hồi.
Ghi chú: Những bình luận được xác định là spam hoặc chỉ mang tính quảng cáo sẽ bị xóa.

• Để cải thiện trải nghiệm bình luận, chúng tôi khuyến khích bạn tạo một tài khoản Gravatar. Thêm avatar vào tài khoản Gravatar sẽ giúp bình luận của bạn dễ nhận diện hơn đối với các thành viên khác.

✂️ Sao chép và 📋 Dán Emoji 💪 giúp bình luận thêm sinh động và thú vị!