跳转到内容
搜索文档

R2 工作原理

最后更新 查看 MarkdownAgent 设置

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 Architecture

R2 支持多种客户端接口,包括 Cloudflare Workers BindingS3-compatible API 以及为 Cloudflare 仪表板和 Wrangler CLI 提供支持的 REST API。所有请求均通过 R2 Gateway 路由,Gateway 与 Metadata Service 和 Distributed Storage Infrastructure 协调以检索对象数据。

向 R2 写入数据

当向 R2 发起写入请求(例如上传对象)时,将发生以下序列:

  1. 请求处理: 请求由靠近用户的边缘 R2 Gateway 接收并进行身份验证。

  2. 加密与路由: Gateway 联系 Metadata Service 以获取加密密钥,并确定在存储桶所设置的位置内将加密数据写入哪个存储集群。

  3. 写入存储: 加密数据被写入并存储在分布式存储基础设施中,并在区域内(例如 ENAM)复制以实现持久性

  4. 元数据提交: 最后,Metadata Service 提交对象的元数据,使其在后续读取中可见。仅在此提交完成后,才会向客户端发送 HTTP 200 成功响应,从而防止未确认的写入。

向 R2 写入数据

从 R2 读取数据

当向 R2 发起读取请求(例如获取对象)时,将发生以下序列:

  1. 请求处理: 请求由靠近用户的边缘 R2 Gateway 接收并进行身份验证。

  2. 元数据查找: Gateway 向 Metadata Service 请求对象元数据。

  3. 读取对象: Gateway 尝试从 tiered read cache 检索加密的对象。若不可用,则从持有对象数据的区域内某个分布式存储数据中心检索对象。

  4. 提供给客户端: 对象被解密并提供给用户。

从 R2 读取数据

性能

操作的性能可能受存储桶的地理位置、请求来源和访问模式等因素影响。

若要优化跨区域请求的上传性能,请在存储桶上启用 本地上传

若要优化读取性能,在使用自定义域名时启用 Cloudflare Cache。启用缓存后,读取请求可绕过 R2 Gateway,直接从 Cloudflare 边缘缓存提供,从而降低延迟。请注意,缓存数据可能不会立即反映最新版本。

通过 Cloudflare Cache 读取 R2 数据

了解更多

持久性

了解更多关于 R2 持久性保证的信息。

数据位置

了解 R2 如何确定数据存储位置,以及司法管辖区限制的详情。

这篇文档对您有帮助吗?