Cloudflare R2 是一款兼容 S3 的对象存储服务,无出口流量费用,构建于 Cloudflare 全球网络之上。它具有强一致性,并为数据持久性而设计。
R2 非常适合存储和提供需要频繁通过互联网访问的非结构化数据,且无需承担出口流量费用。它适用于提供 Web 资源、训练 AI 模型以及管理用户生成内容等工作负载。
R2 的架构由多个组件构成:
-
R2 Gateway: 所有 API 请求的入口,负责处理身份验证和路由逻辑。该服务通过 Cloudflare Workers 部署在 Cloudflare 全球网络上。
-
Metadata Service: 基于 Durable Objects 构建的分布式层,用于存储和管理对象元数据(例如对象键、校验和),以确保对象在整个存储系统中具有强一致性。它包含内置缓存层以加速元数据访问。
-
Tiered Read Cache: 位于分布式存储基础设施前方的缓存层,通过 Cloudflare Tiered Cache 使数据更接近客户端,从而加速对象读取。
-
Distributed Storage Infrastructure: 持久存储加密对象数据的底层基础设施。
R2 支持多种客户端接口,包括 Cloudflare Workers Binding、S3-compatible API 以及为 Cloudflare 仪表板和 Wrangler CLI 提供支持的 REST API。所有请求均通过 R2 Gateway 路由,Gateway 与 Metadata Service 和 Distributed Storage Infrastructure 协调以检索对象数据。
当向 R2 发起写入请求(例如上传对象)时,将发生以下序列:
-
请求处理: 请求由靠近用户的边缘 R2 Gateway 接收并进行身份验证。
-
加密与路由: Gateway 联系 Metadata Service 以获取加密密钥,并确定在存储桶所设置的位置内将加密数据写入哪个存储集群。
-
写入存储: 加密数据被写入并存储在分布式存储基础设施中,并在区域内(例如 ENAM)复制以实现持久性。
-
元数据提交: 最后,Metadata Service 提交对象的元数据,使其在后续读取中可见。仅在此提交完成后,才会向客户端发送
HTTP 200成功响应,从而防止未确认的写入。
当向 R2 发起读取请求(例如获取对象)时,将发生以下序列:
-
请求处理: 请求由靠近用户的边缘 R2 Gateway 接收并进行身份验证。
-
元数据查找: Gateway 向 Metadata Service 请求对象元数据。
-
读取对象: Gateway 尝试从 tiered read cache 检索加密的对象。若不可用,则从持有对象数据的区域内某个分布式存储数据中心检索对象。
-
提供给客户端: 对象被解密并提供给用户。
操作的性能可能受存储桶的地理位置、请求来源和访问模式等因素影响。
若要优化跨区域请求的上传性能,请在存储桶上启用 本地上传。
若要优化读取性能,在使用自定义域名时启用 Cloudflare Cache。启用缓存后,读取请求可绕过 R2 Gateway,直接从 Cloudflare 边缘缓存提供,从而降低延迟。请注意,缓存数据可能不会立即反映最新版本。