Cloudflare: сжатие Zstandard в Pingora может сэкономить петабайты кэш-хранилища

We could save petabytes of cache storage with Zstandard and Pingora

Cloudflare: сжатие Zstandard в Pingora может сэкономить петабайты кэш-хранилища

В Cloudflare прототипировали систему Cache Transcoding, которая сжимает подходящие активы алгоритмом Zstandard (zstd) прямо в кэше, внутри прокси-сервера Pingora. В среднем это уменьшает размер объектов на диске втрое, а также сокращает трафик между дата-центрами. Цена — небольшой рост нагрузки на CPU. Эксперимент с более чем миллионом запросов подтвердил: архитектура работает в рамках бюджета CPU и может существенно расширить эффективную ёмкость кэша без закупки нового оборудования.

Небольшое увеличение CPU даёт Cloudflare петабайты эффективной ёмкости кэша и сокращает объём данных, передаваемых между нашими дата-центрами.
  1. r3trohack3r

    Небольшое отступление: несколько лет назад я применил похожий подход, чтобы сжать npm-реестр более чем на 90% на диске. Поскольку большинство версий пакета похожи, можно сначала применить дельта-кодирование, а затем сжать. Дельты получаются небольшими и хорошо сжимаются в совокупности с исходными файлами.

    Для другого случая использования, перед сжатием я применял скользящий хэш для детерминированного разбиения файла. Затем сжимал фрагменты и сохранял их в файловой системе CID. В результате файлы, которые в значительной степени похожи, разделяют сжатые фрагменты.

    Мы можем сделать много вещей, чтобы существенно повысить эффективность использования компьютеров, но инженеры часто стоят дороже, чем оборудование. С недавними ограничениями в цепочке поставок эта арифметика меняется!

  2. thinkindie

    Почему бы не отдавать файлы сжатыми, если клиент это поддерживает, даже если источник отдал несжатый файл?

  3. CodesInChaos

    Меня смущает, как это влияет на запросы с диапазонами. Без сжатия их легко удовлетворить, прочитав нужную часть полного кэшированного файла. Но как они обрабатываются сейчас? В статье утверждается, что "запросы с диапазонами остаются без изменений", но я не понимаю, как это возможно, если кэш больше не хранит несжатые данные.

Ещё за этот день

2026-09-02