Cloudflare最近推出了针对R2平台的“本地上传”功能,并已进入公开测试阶段。这一新功能能够在不改变对象存储桶所在区域的情况下,提升全球范围内用户的写入性能,从而有效降低跨地区数据写入所导致的延迟。

通过“本地上传”功能,对象数据会首先被保存在离客户端较近的位置,随后由Cloudflare在后台运行的复制任务将这些数据复制到对象存储桶所在的区域。根据相关文档说明,在整个复制过程中,文件的内容始终是可访问的,并且其状态也始终保持一致。Cloudflare的系统工程师Frank Chen、Rahul Suresh以及产品经理Anni Wang这样写道:

“本地上传”功能使得上传操作(如PutObject、UploadPart等)的速度得到了显著提升。在分别与客户进行的私人测试以及各种模拟测试中,我们发现:当上传请求来自与存储桶不同的地区时,数据传输完成所需的时间最多可缩短75%。这里的“数据传输完成时间”是指从Cloudflare收到上传请求开始,到它返回200状态码结束这一整个过程所花费的时间。

数据传输完成时间示意图

来源:Cloudflare官方文档

如果客户端与对象存储桶位于不同的地区,并且启用了“本地上传”功能,那么Cloudflare会先将数据写入客户端所在地区的存储系统中,同时仍会将对象的元数据发布到存储桶所在的区域。后续的复制工作则由Cloudflare在后台自动完成。

R2本地上传功能示意图

来源:Cloudflare官方博客

Cloudflare通过使用队列任务以及自动重试机制来处理这些后台复制操作,从而确保数据的安全性与可靠性。Chen、Suresh和Wang进一步补充道:

最重要的是,在初始数据写入完成后,对象就可以立即被访问了。在整个复制过程中,对象都处于可访问状态——用户无需等待后台复制任务完成才能读取数据。

Cloudflare之所以能够实现这一点,是因为它将物理存储与逻辑元数据分离开来,并基于Cloudflare Workers中的“持久化对象”功能构建了一个全球统一的元数据管理系统。这一技术使得应用程序即便在全球范围内的不同地点运行,也能在同一个、统一的位置存储和管理数据。

这一新功能主要针对那些用户遍布全球的工作负载而言,在这类工作负载中,快速且可靠的上传操作至关重要,而且人们也希望能够在不改变存储桶主位置的情况下提升上传性能。客户可以通过查看R2存储桶的指标页面上按地区划分的读写请求分布图表,来了解这些请求的地理分布情况。Oracle公司的首席工程师Sri Chavali在LinkedIn上这样总结道:

将一个1GB大小的文件从一个地区上传到另一个地区的存储桶时,传输延迟是决定上传速度的关键因素。Cloudflare的R2 Local Uploads功能通过在最近的PoP节点终止上传过程,并利用持久化对象、原子性提交机制以及基于拉取式的复制流程,有效地解决了这一问题,从而实现了数据上传性能的提升。

Cloudflare并不是唯一一家致力于优化全球各地用户向中央存储桶进行数据上传的过程并降低跨地区写入延迟的云计算公司。AWS也提供了S3 Transfer Acceleration这一服务。虽然R2 Local Uploads功能通过异步复制机制在本地完成数据写入操作,但S3 Transfer Acceleration则利用全球分布的边缘节点来优化数据传输路径,从而减少互联网环境带来的影响,使文件能够被上传到最近的CloudFront边缘节点,然后再通过AWS的网络传输到目标存储桶。相比之下,Google Cloud Storage和Azure Blob Storage并没有提供支持全球范围内本地写入操作的接口。

在Cloudflare R2平台上启用Local Uploads功能不会产生任何额外费用;上传请求仍然需要支付标准的A类操作费用,这与不使用该功能时的收费标准完全相同。此外,还提供了一个测试演示版本,可供用户在不同地点测试本地上传功能的效果。

Comments are closed.