去年 9 月,我们宣布正在打造自己的对象存储解决方案:Cloudflare R2。R2 是我们对现有云服务提供商高昂出口收费的答案,允许开发人员按需存储尽可能多的数据,而无需担心访问数据的成本。
人们反应非常热烈。
独立开发人员的账单金额太小,云服务提供商不会与他们协商合理的出口费率。出口费用是这些开发人员云服务账单上最大的一项,扼杀他们正在构建的业余项目和新业务。
大型企业已经将多云存储——以及多云本身——视为不切实际的梦想。他们兴奋地来找到我们,提出与合作公司集成数据的新产品。
非营利研究机构支付巨额出口费用,只是为了在彼此之间分享实验数据。出口费用对他们的协作能力产生了切实的影响,在组织之间形成孤岛,限制他们能进行的实验和分析。
Cloudflare 的存在就是为了构建更好的互联网。今天,互联网终于得偿所愿:R2 现已开放公测。
自助客户可在 Cloudflare 仪表板中启用 R2。Enterprise 客户可联系 CSM 以启用。
内部及外部 API
R2 有两个 API:其一只能从 Workers 内访问,我们称之为 In-Worker API,另一个是兼容 S3 的 API,将您的存储桶暴露在形如 bucket.account.r2storage.com 的 URL 上。在对 R2 发出请求前,您将需要通过身份验证——R2 存储桶默认是私有的。
In-Worker API
使用 In-Worker API 时,某个存储桶被绑定到特定 Worker,后者可针对该存储桶执行 PUT、GET、DELETE 和 LIST 操作。
兼容 S3 的API
对于兼容 S3 的 API,身份验证方式与在 S3 上相同:针对 R2 URL 的 SigV4。SigV4 使用一个密钥对请求进行签名,完成对 R2 的身份验证。这意味着,目前通过互联网对 R2 进行公开访问的唯一方式是托管一个 Worker,将其连接到 R2,并通过其路由请求。
要测试兼容 S3 的 API,最简单的方式是使用 S3 客户端。其中一个最流行的 S3 客户端是 boto3 SDK。
在 Python 中,复制如下脚本,并填入 R2 帐户凭据的 account_id
、 access_key
和 secret_access_key
字段。
特性
main.py
import boto3
s3 = boto3.resource('s3',
endpoint_url = 'https://<accountid>.r2.cloudflarestorage.com',
aws_access_key_id = '<access_key_id>',
aws_secret_access_key = '<access_key_secret>'
)
print('Buckets:')
for bucket in s3.buckets.all():
print(' - ', bucket.name)
bucket = s3.Bucket('my-bucket-name')
print('Objects:')
for item in bucket.objects.all():
print(' - ', item.key)
R2 通过两个 API 支持所有基本 S3 功能:创建/读取/更新/删除。
公测期间,我们的目标是让 R2 支持每个存储桶每秒 1000 次 GET 操作和每秒 100 次 PUT 操作。R2 支持最大约 5 TB 的对象,每个部分的数据大小限制为 5 GB。
R2 提供对数据的强一致性访问。一旦某个 PUT 操作得到 R2 确认,未来的 GET 操作将总是反映该新键/值对。唯一例外是在删除一个存储桶时。在删除后的一小段时间内,该存储桶可能仍继续存在,并继续允许读/写。
定价
最初宣布 R2 时,我们包含了初步定价信息。我们构建 R2 的主要目标之一是服务那些无法与云服务提供商协商大幅折扣的开发人员。为此目的,我们也宣布了一个永远免费的级别,让开发人员能零费用利用 R2 进行开发。
R2 收费取决于存储数据总量,以及对数据执行的操作类型:
存储定价为 0.015 美元/GB/每月。
A 类操作(包括读取和列出)费用为 4.50 美元/百万次。
B 类操作费用为 0.36 美元/百万次。
A 类操作会改变状态,例如创建存储桶、列出存储桶中的对象或写入对象。B 类操作会读取现有状态,例如读取存储桶中的对象。有关定价和操作类型的更多信息,请参阅文档。
当然,R2 的出口带宽是免费的。您可以随心所欲地访问存储桶。
R2 的永远免费级别包含:
10 GB/月的存储数据
A 类操作 100 万次/月
B 类操作 1000 万次/月
免费使用量每月清零。公测阶段,免费级别的 R2 使用量将被记账。
未来计划
过去六个月内,我们与一些设计合作伙伴进行了封闭测试,打造我们的存储解决方案。在 Durable Objects 支持下,R2 的全新架构同时实现高可用性和一致性能。
虽然我们在 R2 上取得了巨大进步,未来数月内还有大量工作要做。
提高性能
我们的首要任务是改善性能和可靠性。虽然我们将内部使用量和设计合作伙伴的需求放到了 R2 上,但没有实时生产流量的替代品。
公测期间,我们的目标是让 R2 支持每个存储桶每秒 1000 次 GET 操作和每秒 100 次 PUT 操作。随着系统运行变得顺畅,我们将提高上限。如果您有更高需求,欢迎联系我们。
创建存储桶时,您不会看到地区选择器。我们对 R2 的设想包括自动全球分布式的存储,R2 无缝地将每个对象放置到最接近请求来源的存储地区。今天,R2 主要在北美存储数据,因此从其他地区访问内容时延迟较高。我们将首先通过增加可以创建对象的额外地区来解决这个问题,然后增加现有对象的跨区域自动迁移。类似于我们为 Durable Objects 构建的司法管辖区限制,我们也将对 R2 存储桶放置数据的地点进行限制,以遵守隐私保护法规。
扩大 R2 的功能集
随后我们将专注于将 R2 功能扩大到基本 S3 API 以外。短期内,我们将重点实现:
支持 TTL,以便能随时间推移而自动删除对象。
公共存储桶,以便能将存储桶暴露在互联网上,无需编写 Worker。
预签名 URL 支持,将特定键的读写权限授予一个令牌。
与 Cloudflare 缓存集成,以扩大读取请求的规模,提供数据的全球分布。如果您有这里没有列出的额外功能需求,欢迎告诉我们!加入我们的 Discord,在 r2-open-beta 频道分享您的需求,以便使 R2 成为您的全新零出口费用对象存储。