朴素的字节范围缓存可能会在小请求上浪费千兆字节的源带宽。我们在Pingora中重建了缓存架构,以自动协调部分提取,将R2 p99延迟减少了一半。寻找电影中间的视频播放器要求几兆字节。
在我们的旧范围缓存下,一个请求可以使Cloudflare从源中提取128 MiB并在数据中心之间移动,有时在观众已经离开之后。范围请求是交付大文件的方式,在大规模运行CDN时,天真地缓存它们很容易导致浪费网络带宽和浪费磁盘操作。因此,我们重建了缓存处理它们的方式。
对于R2, Cloudflare的对象存储, p99到第一个字节的时间减少了大约一半,后续改进将R2和类似工作负载的分层缓存流量减少了大约6%。今天,我们将该新实现作为Origin Range Requests提供,这是所有套餐的自助服务功能。无需调整范围大小,也无需联系客服。使用缓存规则将其打开, Cloudflare将处理其余部分。
对文件的一部分的请求HTTP范围请求请求的是资源的一部分,而不是整个资源。
客户端发送带有Range标头的正常GET: GET/movie.mp4 HTTP/1.1 Host: example.com Range: bytes = 1048576-2097151如果服务器支持该请求,它将返回206 Partial Content,并使用Content-Range: HTTP/1.1 206 Partial Content Content-Range: bytes 1048576-2097151/524288000 Content-Length: 1048576标识返回的字节。对于大型对象,范围请求很常见。