Cloudflare R2 vs S3:面向 VPS 应用的对象存储
发布: (2026年4月29日 GMT+8 10:14)
6 分钟阅读
原文: Dev.to
看起来您只提供了来源链接,而没有贴出需要翻译的正文内容。请把要翻译的文本(文章正文)粘贴在这里,我就可以为您完成简体中文翻译,并保留原有的格式、Markdown 语法以及技术术语。谢谢!
典型的 VPS 工作负载
对象存储是您持久的“二进制大对象桶”,用于:
- 用户上传(图片、视频、PDF)
- 备份和归档
- Web 应用的静态资源
- 数据管道(日志、导出)
决定因素
- 出站费用 – 将数据移动到公共互联网或您的 VPS
- 延迟 – 计算资源到存储端点的距离
- S3 API 兼容性 – 工具和 SDK 的摩擦
- 运维便利性 – IAM、策略、生命周期规则
R2 的突出之处
- 零出站费用 在许多常见场景下,这可以改变提供文件或跨区域同步内容的成本计算。
- 与 Cloudflare 边缘网络和缓存层的紧密集成。
注意: “无出站”并不意味着“无成本”。您仍需为存储和操作付费,请根据您的访问模式验证请求定价。
成本考虑
- S3:存储费用通常适中;网络(出站流量 + 请求费用)往往占主导,尤其是公共下载或交互频繁的工作负载。
- R2:消除大部分出站费用,但仍会产生存储和请求费用。
如果你的应用资产密集(图片、下载、媒体),应先对出站流量进行建模。小型 VPS 上的突发流量峰值可能会让 S3 出站费用出乎意料,从而迫使重新设计。
- 如果你的 VPS 位于靠近 AWS 区域的位置,S3 延迟是可预测的。
- 对于全球分布的用户,放在任一服务前面的 CDN 往往比单纯的存储桶延迟更重要。
- R2 更靠近 Cloudflare 的边缘,当你已经使用 Cloudflare 的 CDN/DNS 时,它是一个自然的选择。
功能比较
| 功能 | Amazon S3 | Cloudflare R2 |
|---|---|---|
| 稳定性与生态系统成熟度 | ✔️ 出色的耐久性,庞大的生态系统 | ✔️ 良好的耐久性,正在增长的生态系统 |
| 出口定价 | 按 GB 收费(可能成本高) | 在多数场景下免费 |
| 请求定价 | 按请求收费 | 按请求收费(通常相当) |
| IAM 与策略工具 | 成熟,细粒度 | 更简洁,仍在发展 |
| 生命周期管理 | 深入的选项(转换、过期) | 基本的生命周期规则 |
| 广泛集成 | 备份、CI/CD、数据平台、众多第三方工具 | 与众多支持 S3 的工具兼容,但原生集成较少 |
| S3 兼容性 | 原生 | 对大多数操作兼容 S3(大多数 SDK 调用均可工作) |
| 边缘情况行为 | 完整的 AWS 功能集 | 在高级 IAM 或特定 AWS 集成上可能有所不同 |
提示: 如果您依赖于 S3 的边缘情况行为,请在正式使用前将工具链在 R2 上进行测试。
最小化 Node.js 示例(AWS SDK v3)
import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";
import fs from "node:fs";
const client = new S3Client({
region: "auto",
endpoint: process.env.R2_ENDPOINT, // e.g. https://.r2.cloudflarestorage.com
credentials: {
accessKeyId: process.env.R2_ACCESS_KEY_ID,
secretAccessKey: process.env.R2_SECRET_ACCESS_KEY,
},
});
async function upload() {
const Body = fs.createReadStream("./avatar.png");
const cmd = new PutObjectCommand({
Bucket: process.env.R2_BUCKET,
Key: "uploads/avatar.png",
Body,
ContentType: "image/png",
});
await client.send(cmd);
console.log("Uploaded");
}
upload().catch(console.error);
如果您能够使用现有工具上传、列出和读取对象,那么大多数迁移工作更多是定价决策,而不是重新编写代码。
决策指南
- 选择 S3 如果你深度依赖 AWS 服务,需要最成熟的 IAM/策略界面,或想要最大程度的“开箱即用”与第三方工具的集成。
- 选择 Cloudflare R2 如果出口流量是主要风险,你提供大量公共内容,或想要类似 S3 的工作流而不受典型带宽费用的限制。
对于精简的 VPS 堆栈(例如 DigitalOcean Droplets 或 Hetzner 服务器),R2 可以在保持账单可预测的同时仍使用熟悉的 S3 工具。如果你已经在使用 Cloudflare 进行 DNS/CDN,操作上的简便是一个不错的额外好处——但这不应成为切换的唯一理由。