Contexte et objectifs

Face à l'augmentation constante du volume de contenus statiques servis par les CDN, Cloudflare a cherché à augmenter la capacité de son réseau de cache sans investir massivement en stockage. Le projet Cache Transcoding vise à compresser les réponses éligibles (HTML, JSON, CSS, JavaScript) avant leur mise en cache, afin de diminuer l'empreinte disque et d'optimiser le transfert entre les niveaux de cache.

Mécanisme de compression Zstandard

Le système s’appuie sur l'algorithme Zstandard (zstd), reconnu pour son ratio de compression élevé et son temps de décompression très rapide. Lorsqu'une réponse est jugée « eligible », le serveur applique zstd avec un niveau de compression moyen (généralement -3 à -5) afin de limiter l'impact CPU. Le flux compressé est stocké dans le cache de niveau supérieur et décodé à la volée lorsqu'un client le demande, garantissant une latence comparable à une réponse non compressée.

Résultats de performance et impact sur la capacité du cache

Les premiers tests internes montrent que les actifs compressés atteignent environ un tiers de leur taille d'origine. Par exemple, un fichier JavaScript de 300 KB passe à 100 KB après transcoding. Le coût additionnel en CPU se situe « quelques pourcents », typiquement entre 2 % et 5 % de charge CPU supplémentaire sur les nœuds de cache. Cette surcharge marginale se traduit par une augmentation potentielle de plusieurs pétaoctets de capacité effective, simplement en libérant de l'espace disque déjà disponible.

En pratique, la réduction de taille diminue également la bande passante inter‑tiers, ce qui peut réduire les coûts de réseau et améliorer le temps de récupération des objets depuis les caches de niveau inférieur. Le processus reste transparent pour les clients : les en‑têtes HTTP indiquent la présence de Content‑Encoding: zstd, et les navigateurs compatibles décompressent automatiquement.

Limites et perspectives

Le modèle actuel ne s’applique qu’aux types de contenu statique listés; les réponses dynamiques ou les médias lourds (images, vidéos) restent hors de portée, limitant le gain global. De plus, la compatibilité des navigateurs avec le codage zstd n’est pas encore universelle, ce qui impose un fallback vers gzip ou aucune compression pour certains agents utilisateurs. Enfin, la décision d'eligibilité repose sur des heuristiques internes (taille, type MIME, fréquence d'accès) qui ne sont pas détaillées publiquement, ce qui rend difficile l'évaluation précise du taux de couverture dans des environnements réels.

À moyen terme, Cloudflare envisage d’étendre le transcoding à d’autres formats (par ex. WebAssembly) et d’ajuster dynamiquement le niveau de compression en fonction de la charge CPU du nœud, afin d’optimiser le compromis entre taille et latence.