Cloudflare用Zstandard省出PB级缓存

We could save petabytes of cache storage with Zstandard and Pingora

Cloudflare用Zstandard省出PB级缓存

内存成本飙升之际,Cloudflare在Pingora代理中引入Cache Transcoding方案,利用Zstandard对缓存内容进行压缩。我们在资产进入缓存时进行编码,存储和跨数据中心传输时保持压缩状态,仅在交付给客户端前解码。测试显示,符合条件的文本资产平均缩小至原大小的三分之一。虽然编码带来少量CPU开销,但一次性的编码成本换来了持续的存储和带宽节省,显著提升了缓存密度并减少了数据中心的传输量。

压缩一次,受益多次:编码成本仅在资产进入缓存时支付一次,而存储和带宽的节省在每次复用该资产时持续产生。
  1. nithril

    有一件事让我困扰到必须评论一下:在这个语境下,"transcoding"(转码)似乎不是最合适的术语。"Encode/decode"(编码/解码)在技术上是正确的,但用 "compress/decompress"(压缩/解压)会让意图清晰得多。

  2. r3trohack3r

    稍微相关的一点是,几年前我采用过类似的方法来压缩 npm registry,使其在磁盘上的占用减少了 90% 以上。由于同一个包的大多数版本都很相似,你可以先对它们进行差分编码(delta encode),然后再压缩。这些差分数据很小,且与原始源文件一起作为集合时压缩效果很好。

    对于另一个应用场景,在压缩之前,我应用了滚动哈希(rolling hash)来确定性地将文件拆分。然后压缩这些块,并将它们存储在 CID 文件系统中。结果是,大部分相似的文件可以共享压缩后的块。

    我们可以做很多事情来显著提高现有计算机的效率,但工程师的成本往往高于硬件。随着近期供应链的制约,这个计算逻辑正在发生改变!

  3. CodesInChaos

    我不太明白这对范围请求(range requests)有什么影响。如果不进行压缩,这些请求可以通过读取缓存完整文件的相关部分轻松满足。但现在它们是如何处理的呢?文章声称“范围请求保持不变”,但如果缓存不再存储未压缩的数据,我看不出这怎么可能实现。

  4. thinkindie

    如果客户端支持压缩,为什么不直接提供压缩后的文件呢?即使源站提供的是未压缩的文件。

  5. londons_explore

    Zstd 支持使用“字典”(dictionary)。

    有了字典,即使是小对象——哪怕只有几个字节——也能压缩得很好。

    如果连请求头也压缩一下,那这就变得非常值得做了。

同日更多故事

2026-09-02