Présentation

Cloudflare a intégré le codec Zstandard (zstd) dans son moteur de cache Pingora afin de compresser les objets stockés. Selon le blog officiel, la combinaison de ces deux technologies a permis d’économiser plus de 1,5 pétaoctet de données en 2023, avec un objectif de 3 pétaoctets d’ici 2024. L’enjeu principal est de diminuer l’empreinte disque tout en conservant des temps de réponse compatibles avec les exigences du web à grande échelle.

Architecture de Pingora et compression Zstandard

Pingora, le reverse‑proxy open‑source de Cloudflare, agit comme point d’entrée unique pour le trafic HTTP. Lorsqu’une requête arrive, le composant cache manager interroge le stockage local. Si l’objet est présent, Pingora le décompresse à la volée grâce à la bibliothèque libzstd intégrée. Le processus s’appuie sur un pool de threads dédié, chaque thread exécutant une compression/décompression en mode streaming afin de limiter la latence. Le niveau de compression choisi par défaut est zstd -3, qui offre un bon compromis entre ratio (environ 30 % de réduction par rapport à gzip) et consommation CPU (≈ 5 % d’utilisation supplémentaire).

zstd -3 -o cached_object.zst original_object

Le code ci‑dessus illustre la commande utilisée lors du pré‑traitement des objets avant leur insertion dans le cache. Pingora conserve également le dictionnaire de compression généré à partir des objets les plus fréquents, ce qui améliore le ratio jusqu’à 2 :1 pour les fichiers texte et JSON.

Performances et économies réalisées

Les mesures internes montrent que la compression zstd réduit la taille moyenne des objets de 1,2 Mo à 0,84 Mo. Sur un trafic quotidien de 150 TB, cela représente une économie de 45 TB de stockage journalier. En termes de bande passante, la transmission d’un objet compressé consomme ≈ 30 % de données réseau supplémentaires, mais le gain de cache compense largement ce coût grâce à la moindre fréquence de re‑fetch depuis les origines.

Le temps de latence ajouté par la décompression est mesuré à moins de 1 ms pour des objets de taille moyenne, ce qui reste négligeable comparé aux 30‑40 ms de RTT typiques du réseau. Cette marge est rendue possible par l’optimisation du pipeline de Pingora : les opérations de I/O sont overlappées avec le décodage, et les threads de compression sont pin‑nés sur des cœurs dédiés afin d’éviter la contention avec le traitement des requêtes.

Limitations et perspectives

Le principal compromis réside dans l’augmentation de la charge CPU. Sur des serveurs déjà saturés, le passage à un niveau de compression supérieur (ex. -5 ou -9) pourrait entraîner une hausse de latence de 2‑3 ms et un impact de 10‑15 % sur le taux d’utilisation du CPU. De plus, certains formats binaires (images WebP, AVIF) ne bénéficient que d’une réduction marginale, voire d’une augmentation de taille, ce qui oblige Pingora à désactiver la compression pour ces types MIME.

Cloudflare prévoit d’étendre le modèle de « cache transcoding » à d’autres algorithmes, notamment Brotli, afin de comparer les ratios sur les contenus vidéo et les fichiers d’archives. L’objectif à moyen terme est d’automatiser le choix du codec en fonction du profil d’accès (latence critique vs capacité de stockage), tout en conservant la transparence pour les clients finaux.