Cách đây 1 thời gian, tình cờ phát hiện ra x-dr/telegraph-Image, dùng rất thích, giao diện sạch sẽ, upload lên thẳng Telegram, có link trực tiếp, nghĩ Telegram không thể nào sập được, nên mạnh dạn dùng tên Archive 🤣 dùng ít tháng, tự dưng ông nội Telegram thay đổi chính sách, không cho dùng link trực tiếp nữa (hình như giờ dùng lại được rồi thì phải), nay có hứng nên làm bản Image Archive System v2, thay thế cho bản cũ
PS: các ảnh hiện ra ở bài viết này, đang dùng từ Image Archive System v2
Giới thiệu chung về Image Archive System v2
Image Archive System v2 hoàn thiện với bộ khung xoay quanh Cloudflare, trừ phần storage ban đầu khá khó lựa chọn, các thành phần khác Cloudflare miễn phí cái gì, mình dùng cái đó 😅
- Frontend: Cloudflare Pages
- Backend: Cloudflare Pages Functions (hỗ trợ multi server, max 119 Compute Workers & Pages)
- Database: Cloudflare D1 (SQLite)
- Storage S3: Cloudflare R2 (hỗ trợ multi account)
- Optimization: Jetpack
Image Archive System v2 nhái giao diện, ý tưởng từ telegraph-Image khá nhiều, cách sử dụng tương tự các dịch vụ upload khác, chọn ảnh cần upload, ấn gửi là được
- Khi chọn nhiều ảnh nếu nhầm có thể click vào icon x (màu đỏ góc phải) để bỏ ra, hoặc clear tất cả file khỏi danh sách, chọn lại …
- Sau khi upload, mỗi ảnh sẽ tạo sẵn 4 URL thông dụng:
Direct
,Markdown
,BBCode
,HTML
, cần dùng link dạng nào click vào nó tự copy, đỡ phải nhớ nhiều - Khi upload nhiều ảnh hoặc nhiều lần, sử dụng nút
Copy All
để chọn tất cả URL từ danh sách Upload Results bên dưới
Các thông báo khi upload, hiện ra khá đầy đủ, nếu upload gặp lỗi sẽ có thông báo cụ thể nguyên nhân, cá nhân thấy 1 trang upload ảnh, các tính năng thế là đủ, thêm tính năng nữa cũng rất ít khi cần dùng
Riêng tư:
Image Archive System v2 lưu vào database ở mức tối thiểu, không lưu trữ IP người upload ảnh, chỉ lưu IP để đếm lượt upload nhằm tránh lạm dụng upload quá nhiều, tên file ảnh được tạo ra ngẫu nhiên, sau đó mới upload vào storage, tránh các vấn đề phiền phức về tên file
- Với người dùng thông thường, chỉ vào upload ảnh, từ phần bên dưới, mình nghĩ không cần đọc
- Phần bên dưới mình viết chủ yếu để nhớ
Hiệu năng và độ ổn định:
Phiên bản Image Archive System v2 mới nhất, theo mình hiệu năng, độ ổn định rất tốt, đây là phần mình mất khá nhiều thời gian, vì phải đảm bảo upload nhanh, ảnh load nhanh, vừa phải xử lý các giới hạn của gói Cloudflare miễn phí
Domain bibica.net còn thời gian sử dụng tới 2033 (8 năm nữa), ảnh chứa ở đây, nếu không có gì quá đặc biệt, cũng sẽ tồn tại tới ngày đó
User upload -> server upload ngẫu nhiên -> storage ngẫu nhiên -> Jetpack -> Cloudflare Pages
Tuyến đường khá lòng vòng, lòng vòng tới mức nếu mình không nói storage dùng dịch vụ nào, chắc hiếm ai biết ảnh gốc để ở đâu 😁 chính mình cũng không biết ảnh gốc để ở đâu nếu chỉ nhìn vào URL của tấm ảnh
Upload xong, ảnh hiện ra chậm hơn so với thông thường (do lần đầu load ra từ Jetpack) bù lại cho điểm này, sử dụng sau này sẽ đạt hiệu năng tốt hơn, vì dung lượng đã được nén lại (tương tự Jetpack WebP CDN Replacer) và cache qua CDN Cloudflare (ý tưởng của tính năng này là để giảm dung lượng ảnh phải chứa trên storage, do các dịch vụ miễn phí cho không nhiều, khá là khả quan, vì mỗi ảnh giảm 30%-70% dung lượng gốc lận đấy)
Image Archive System v2 có thể đáp ứng upload khoảng 30.000 ảnh mỗi ngày (do D1 cho hơi ít request ghi vào database), quy đổi đơn giản 1 phút có thể upload 20 tấm ảnh, dù thực tế chắc 1 tuần có 1 tấm ảnh upload lên 🤑
Để tăng tốc độ khi upload, mình quản lý nhiều file 1 lúc theo dung lượng các batch, quá trình này hơi phức tạp quá mức cần thiết so với thông thường, bù lại hiệu năng cải thiện khá tốt
- Thử nghiệm upload thực tế upload 2154 tấm ảnh 1 lúc, dung lượng mỗi ảnh đa phần < 5MB, tổng dung lượng ~1.3GB mất khoảng 1 phút 30 giây, quy đổi tốc độ upload đạt ~14.8 MB/s
- Upload chỉ 1 tấm ảnh duy nhất, tốc độ khá tầm thường, vì không tận dụng được cơ chế batch, trung bình ảnh 5MB, mất gần 5-6s mới upload xong
Các lỗi có thể xử lý, mình đã cố làm, từ 500, 502, 503 …. còn kiểu đang upload, mà Cloudflare, Jetpack, Storage bị lỗi, hay đơn giản nhất là mạng nhà bạn chập chờn thì … chịu thôi, ảnh upload bị lỗi vẫn nằm lại Selected Files để người dùng upload lại
Tất cả dịch vụ lựa chọn cho hệ thống này, đều có tầm vóc thế giới, tuổi đời lâu dài, upload ảnh mà thấy lỗi, đa phần là do mình sử lý chưa tốt, bạn nào sử dụng thấy lỗi, có thể comment dưới bài này để mình xem lại
Tính năng:
Các tính năng sau này thêm vào phần lớn không liên quan tới sử dụng, chủ yếu là vấn đề chống lạm dụng, tránh các tool, boot, hạn chế storage bị hết dung lượng miễn phí
- Tính năng duy nhất thêm sau này mà mình thấy thiết thực là hỗ trợ nhiều tài khoản storage, đúng ra nên viết từ đầu, mình lại thêm vào sau cùng, hậu quả cho việc này là sửa lại các URL be bét, ngồi tạo cỡ 100 tài khoản storage miễn phí thì có 1-2TB dung lượng để dùng tới mùa quýt luôn 🤣
Image Archive System v2 dù giao diện người dùng cực kì đơn giản, nhưng khi viết mình toàn tính theo cường độ user upload 1 lần 1000 ảnh trở lên, cái nút x tắt ảnh ra khỏi danh sách Selected Files, kể cả bạn có kéo vào 1000 ảnh, khi tắt nó vẫn mượt, không lag nhé
Giao diện:
Vấn đề này tùy gu, sở thích mỗi người, cá nhân mình thấy giao diện hiện tại khá ổn, trừ độ tương phản rất có vấn đề, mà cũng lười sửa thêm, dùng 1 thời gian xem thế nào rồi tính sau, các tính năng cho giao diện, theo mình đủ dùng, thực tế thao tác upload ảnh cũng chỉ thế, không cần thêm
Vấn đề trang quản trị cho user hay admin thì chịu, không biết làm, và cũng không có nhu cầu dùng tới
Giới hạn của hệ thống
Cloudflare Pages thường cho dùng tầm 64 MB RAM, thực tế kiểm nghiệm, khi cố tính upload file ~ 80MB – 100MB sẽ bị báo thiếu RAM, để xử lý vấn đề này, mình quản lý theo batch và tạo ra 19 server upload, lý thuyết tổng số RAM sử dụng cùng lúc có thể > 1GB, hiểu nôm na là có thể đáp ứng cường độ upload cùng lúc ~ 1Gb/s, thực tế mình upload tầm 20MB/s là kịch tốc độ nhà mạng, nên không có cách nào kiểm chứng hiệu năng của 19 server cùng lúc
Thực tế sử dụng, khi upload file, rất khó để gặp tình huống này, vì thời gian Cloudflare Pages chuyển file sang storage rất nhanh, đa phần 1-2s, chuyển xong RAM sẽ được hoàn lại, nên trừ khi trang của bạn, liên tục có user upload dạng bot mới sập, còn dùng bình thường, theo mình là thừa (lý do có thêm limit 10-20 lượt upload trong 5 phút là để giảm thiểu các lạm dụng này)
Storage
Bỏ qua vấn đề sử lý hiệu năng ban đầu, thứ làm mình mất thời gian nhiều nhất cho script này là vấn đề, lựa chọn nơi chứa ảnh, thực tế mình đã đổi qua 3-4 dịch vụ, tất cả đều đáp ứng tốt vấn đề hiệu năng, dung lượng miễn phí nhiều, sau khi cân nhắc vấn đề sử dụng lâu dài, mình quyết định lưu trữ trên các storage service như Cloudflare R2, Backblaze B2, các dịch vụ này cho phép 1 người tạo nhiều tài khoản miễn phí, sử dụng tự tin không vi phạm chính sách
Bảo mật:
Sử lý cơ bản, chủ yếu hạn chế, tránh storage hết dung lượng miễn phí, mà thường mình nghĩ với các trang upload ảnh cá nhân, cũng hiếm ai rảnh rỗi đi phá
Kết luận:
Mục đích ban đầu của Image Archive System, là 1 nơi lưu trữ ảnh thật bền vững, an toàn, miễn phí, nếu 10 năm sau coi lại, ảnh vẫn còn, xưa dùng Telegram thì siêu trâu, mà ăn vài đợt hãng thay đổi chính sách, cũng khá rén để dùng lại
Cấu hình hiện tại đều dùng các dịch vụ bố đời, mẹ thiên hạ, đa phần chính sách của họ ổn định nhiều năm, nên cũng đặt niềm tin vào hơn, mỗi cái tầm của mí vị này, to tới nổi end user phổ thông họ liệt vào dạng … không thèm nhận email, nói khó nghe tí là không thèm tiếp, đúng kiểu “bọn teo miễn phí cmn hết rồi, còn bắt support kĩ thuật nữa thì mài lên làm bố lun đê”, đâm ra viết cái gì cũng phải google lỗi đần người
Khá tự tin giới thiệu mọi người dùng thử phiên bản này, theo mình là nó đơn giản và nhanh hơn phiên bản telegraph-Image trước đây 🤞
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ị!