~/VibeHandbook
PDF miễn phí

Cloudflare

developers.cloudflare.com

R2

Đây là gì

Hãy tưởng tượng một nhà kho khổng lồ trên mạng, nơi bạn gửi các thùng tệp tin và lấy ra bất cứ lúc nào. R2 là dịch vụ lưu trữ đối tượng (object storage) của Cloudflare — chính là nhà kho đó — nơi để đặt các tệp: hình ảnh, video, bản sao lưu, tệp người dùng tải lên, sản phẩm build. Nó dùng cùng một (Application Programming Interface — Giao diện lập trình ứng dụng, tức tập hợp các lệnh mà công cụ dùng để giao tiếp với nó) như Amazon S3, nên phần lớn công cụ và SDK (Software Development Kit — Bộ công cụ phát triển phần mềm, tức các thư viện mã dựng sẵn) của S3 hoạt động được với nó mà không cần chỉnh sửa. Điểm khác biệt nổi bật nhất là giá cả: R2 tính phí cho lưu trữ và các thao tác, nhưng không thu phí egress (không tính phí khi dữ liệu rời khỏi nhà kho), nên việc phục vụ dữ liệu ra ngoài là miễn phí.

Điểm mạnh

  • Không thu phí egress — khoản tiết kiệm lớn cho các ứng dụng nặng về media hoặc tải xuống nhiều.
  • API tương thích S3, nên các công cụ và thư viện sẵn có chạy được ngay.
  • Có thể gắn (bind) trực tiếp vào một Worker để đọc và ghi mà không cần thông tin xác thực (credentials) trong mã.
  • Có thể đặt phía sau CDN (Content Delivery Network — Mạng phân phối nội dung, tức tập hợp máy chủ trên toàn cầu giữ bản sao tệp gần từng người truy cập) của Cloudflare để phân phối nhanh và có bộ nhớ đệm ().
  • Mở rộng tốt cho các đối tượng lớn và bucket lớn mà không cần cấp phát trước.

Đánh đổi

  • Là lưu trữ đối tượng, không phải hệ thống tệp hay cơ sở dữ liệu — không thể truy vấn bên trong tệp.
  • Các thao tác (PUT/GET/LIST) đều bị tính phí, nên các kiểu truy cập dồn dập, nhiều lần sẽ cộng dồn chi phí.
  • Tính nhất quán mạnh (strong consistency) và một số tính năng có chi tiết khác với S3; cần kiểm tra các trường hợp biên.
  • Với các giá trị nhỏ, thay đổi thường xuyên, KV (kho lưu trữ khóa-giá trị, giống như một cuốn từ điển khổng lồ) hoặc D1 (cơ sở dữ liệu ) phù hợp hơn.

Khi nào nên dùng

Dùng R2 cho tệp người dùng tải lên, tệp được tạo ra tự động, tài nguyên tĩnh dung lượng lớn, dữ liệu xuất ra, và bản sao lưu — đặc biệt ở bất kỳ đâu mà chi phí băng thông trên S3 sẽ gây tốn kém.

Phù hợp với vibe coding

R2 kết hợp tốt với các dự án do AI dẫn dắt vì việc bind loại bỏ hẳn màn "múa" thông tin xác thực thông thường — ghi trực tiếp vào env.BUCKET. Hãy cho agent biết các tệp là công khai (phục vụ qua một Worker hoặc tên miền tùy chỉnh) hay riêng tư (truy cập có chữ ký), để nó thiết lập cách phân phối cho đúng. Ví dụ dưới đây gắn một bucket và tải lên một tệp từ .

# wrangler.toml
[[r2_buckets]]
binding = "BUCKET"
bucket_name = "uploads"
npx wrangler r2 bucket create uploads
npx wrangler r2 object put uploads/logo.png --file ./logo.png