我们如何利用Zstandard和Pingora节省PB级缓存存储
内容提要
Cloudflare实习生Aashi Patel开发了Cache Transcoding系统,利用Zstandard压缩算法在Pingora中编码缓存资产,将可压缩文本平均缩小至原大小的三分之一。该系统以少量CPU开销换取存储和带宽节省,测试中处理了超百万请求,验证了架构可行性,未来将优化压缩级别和参数。
延伸解读
压缩的代价与收益
Cache Transcoding 的核心权衡是用少量 CPU 换取存储和带宽的节省。编码成本仅在资产进入缓存时支付一次,而解码成本在每次服务时支付。测试中,编码成本约为 4.31 纳秒/字节,解码成本约为 1.56 纳秒/字节。由于资产被服务的频率远高于填充频率,这种权衡在测试条件下是有利的。
并非所有内容都值得压缩
系统只对未压缩的文本内容(如 HTML、JSON、CSS、JavaScript)进行转码,且要求响应为 200 OK、Content-Encoding 未设置、Content-Type 为可压缩文本、Content-Length 至少为 4 KiB。图片、视频和字体等已压缩的媒体内容占请求的 21.4% 但字节数的 63.3%,压缩它们只会浪费 CPU。4 KiB 阈值过滤了大量小请求,但仅损失约 1% 的可压缩字节。
架构验证与未来方向
原型在超过一百万请求的测试中验证了架构可行性,包括缓存未命中、命中、分层缓存等场景。测试资产压缩比约为 2.8 倍,但作者提醒这不能代表所有互联网文本对象。未来计划包括评估更高的 zstd 压缩级别、测试更广泛的内容类型和对象大小,以及探索范围请求和预压缩响应等场景。
Q&A
Cloudflare的Cache Transcoding系统是什么?
Cache Transcoding是Cloudflare实习生Aashi Patel在实习期间开发的一个原型系统,它利用Zstandard压缩算法在Pingora中编码缓存资产,以少量CPU开销换取存储和带宽节省。
Zstandard压缩算法有什么特点?
Zstandard(zstd)是一种无损压缩算法,由Yann Collet在Facebook开发并于2016年开源。它旨在平衡压缩比和速度,在测试中比Brotli快42%且文件大小相近,比gzip小11.3%且速度相当。
Cache Transcoding如何决定哪些内容值得压缩?
Cache Transcoding只对满足以下条件的响应进行压缩:200 OK响应、Content-Encoding未设置、Content-Type为可压缩文本、Content-Length至少为4 KiB。图片、视频、字体等已压缩内容以及二进制内容不会被压缩。
Cache Transcoding在缓存命中时如何处理?
在缓存命中时,存储的zstd对象从磁盘读取并解码,然后以原始形式发送给客户端。如果使用Tiered Cache,压缩表示会在上层和下层之间传输,解码只发生在面向客户端的那一跳。
Cache Transcoding的测试结果如何?
在测试中,可压缩文本平均缩小至原大小的三分之一(压缩比约2.8倍)。在超过一百万请求的测试中,验证了架构的可行性,CPU开销保持在几个百分点以内,存储和带宽节省显著。
Cache Transcoding的未来计划是什么?
未来计划包括评估更高的zstd压缩级别、测试更广泛的内容类型和对象大小、调整资格标准等参数,以及研究范围请求、预压缩源响应和直接将压缩对象传递给支持它的下游组件。