Cloudflare在10月23日的官方博客中宣布,将重建后的范围请求缓存实现以Origin Range Requests功能向所有套餐开放。用户通过一条缓存规则即可启用,无需自行调整范围大小,也不必联系支持团队。

这项变化针对的是大文件按需读取。HTTP范围请求允许客户端只索取资源的一部分,例如视频播放器跳转到影片中间、下载工具断点续传,或软件包管理器获取制品的部分内容。是否发起范围请求仍由客户端决定,Cloudflare不改变这条请求,而是改变满足请求的方式。

旧实现的问题在于,客户端只要一小段,缓存系统却可能搬运一大块。Cloudflare举例称,播放器跳转时请求几兆字节的数据,旧机制可能因此从源站拉取128 MiB,并在数据中心之间传输;有时观众已经离开,数据仍在搬运。

此前,Cloudflare通过站点级静态配置支持范围请求缓存,将客户端请求映射到文件的固定大小分片,并按站点配置分片大小与文件扩展名。分片较小会带来大量小型源站请求,以及在内存中合并请求的压力;分片较大则可能下载远超客户端所需的数据。由于分片大小属于缓存键的一部分,调整它还会使缓存条目失效。

旧机制也存在并发访问问题:落在同一个分片内的请求,即使各自需要的字节位置相距很远,也可能相互阻塞。Cloudflare还指出,其基于nginx的旧缓存无法把范围缓存与并发流式读取结合起来;后者允许多个客户端在文件仍写入缓存时就开始读取。

对于新实现的效果,Cloudflare给出了特定工作负载下的数据:其对象存储R2的p99首字节时间下降约一半;后续一项优化又使R2及类似工作负载的分层缓存流量减少约6%。这些数字对应官方列明的场景,而本次开放的使用方式,是让各套餐用户自行通过缓存规则启用新实现。

原始来源:Origin Range Requests: Serving large files without range-request tuning