CloudflareのインターンがZstandardとPingoraでキャッシュ保存をペタバイト単位で節約する方法を試作
We could save petabytes of cache storage with Zstandard and Pingora

Cloudflareは、キャッシュに保存する前にZstandard(zstd)で圧縮する「Cache Transcoding」というシステムを試作しました。Pingoraプロキシに実装されたこのシステムは、CPU使用率をわずかに増やす代わりに、キャッシュの実効容量を大幅に拡大し、データセンター間の転送量を削減します。対象となるテキスト資産は平均で約3分の1のサイズに縮小され、推定でペタバイト規模のキャッシュ容量を節約できる可能性があります。画像や動画など既に圧縮済みのメディアは対象外で、4KiB以上の圧縮可能なテキストのみが対象です。
圧縮コストは資産がキャッシュに入るときに一度だけ支払われ、ストレージと帯域幅の節約はその資産が再利用されるたびに続きます。
HNでの議論
60- r3trohack3r
関連して、数年前に私は似たようなアプローチでnpmレジストリをディスク上で90%以上圧縮しました。パッケージのほとんどのバージョンは似ているので、最初にデルタエンコードしてから圧縮できます。デルタは小さく、元のソースファイルと一緒にコレクションとして圧縮するとよく圧縮されます。
別のユースケースとして、圧縮する前に、ローリングハッシュを使ってファイルを決定的に分割しました。そしてチャンクを圧縮してCIDファイルシステムに保存しました。その結果、大部分が類似したファイルは圧縮チャンクを共有します。
私たちが持っているコンピュータを大幅に効率化するためにできることはたくさんありますが、エンジニアはしばしばハードウェアよりコストがかかります。最近のサプライチェーンの制約により、その計算は変わりつつあります!
- thinkindie
オリジンが非圧縮ファイルを配信しているのに、クライアントが圧縮をサポートしているなら、圧縮して配信しないのはなぜですか?
- CodesInChaos
これがレンジリクエストにどう影響するのか混乱しています。圧縮なしでは、キャッシュされた完全なファイルの関連部分を読むことで簡単に満たせます。しかし、今はどう処理されるのでしょうか?記事は「レンジリクエストは変更されない」と主張していますが、キャッシュが非圧縮データを保存しなくなった場合、それがどう可能なのかわかりません。
- MayeulC
> 当初はトランスコーディングを人気コンテンツに限定することを検討しました
奇妙ですね。もしデコード時のCPU時間を節約するのが目的なら、私はむしろコールドコンテンツを圧縮したでしょう。
- zahlman
これはPyPIの帯域も毎月ペタバイト単位で節約できるでしょう。(しかし、これは壊れたCIシステムがローカルにキャッシュしないことによっても引き起こされているようです。)