Activer la compression dynamique

La compression dynamique compresse automatiquement les réponses diffusées par Media CDN. La taille des données envoyées sur le réseau est réduite de 60 à 85 % dans les cas typiques.

La réduction de la taille accélère le téléchargement des éléments importants, tels que les feuilles de style (CSS), les scripts (JavaScript) et les fichiers manifestes vidéo (HLS/DASH), ce qui peut réduire considérablement le temps de chargement des pages et le temps de démarrage des vidéos.

Les grandes playlists vidéo en direct (fichiers manifestes) contiennent une quantité importante de données et de récupérations répétées, y compris le préfixe d'hôte et de chemin d'accès de chaque segment, ainsi que les métadonnées de la playlist HLS ou DASH. Plus le téléchargement de la playlist ou les mises à jour de la playlist est rapide, moins le client doit attendre pour analyser et commencer à télécharger les séquences vidéo référencées. La taille des playlists HLS et DASH présente souvent une réduction totale de plus de 90 %.

Pour en savoir plus sur les avantages de la compression des réponses, consultez le guide Web Fundamentals.

Fonctionnement de la compression dynamique

Lorsque la compression dynamique est activée, le contenu compressible diffusé à partir de l'origine peut être compressé avant d'être distribué si le client accepte l'un des algorithmes de compression compatibles (br ou gzip).

Media CDN ajoute un en-tête Vary: Accept-Encoding à toutes les réponses éligibles à la compression. Pour en savoir plus, consultez Contenu incompressible.

De plus, si l'en-tête Accept-Encoding de la requête indique une préférence pour le contenu compressé en spécifiant br ou gzip (et en incluant éventuellement un paramètre q non nul), Media CDN effectue les opérations suivantes :

  • Supprime l'en-tête Content-Length de la réponse. Cette opération est nécessaire pour permettre à la réponse d'être diffusée le plus rapidement possible, car la longueur totale du contenu n'est connue qu'une fois la réponse entièrement compressée. Pour HTTP/1.1 et les versions antérieures, Media CDN utilise Transfer-Encoding: chunked dans la réponse lorsqu'il n'utilise pas Content-Length.

    Une fois qu'une réponse a été compressée et mise en cache, Media CDN peut inclure l'en-tête Content-Length dans les réponses ultérieures et définir la valeur sur la longueur du contenu du corps compressé.

  • Définit Accept-Ranges sur none. Cela indique aux clients que les requêtes de plage pour cette ressource sont ignorées.

  • Affaiblit tous les en-têtes de réponse ETag fortes, conformément à la section 8.8.3 de la RFC 9110. Par exemple, ETag: "xyzzy" est remplacé par ETag: W/"xyzzy".

  • Définit l'en-tête Content-Encoding sur br ou gzip, ce qui indique l'algorithme de compression choisi.

    Media CDN choisit le meilleur algorithme de compression en fonction du taux de compression attendu de la réponse, ainsi que de la vitesse ou du débit de compression.

    • La compression Brotli est utilisée si le client la prend en charge, même si d'autres algorithmes de compression ont des valeurs q plus élevées dans l'en-tête Accept-Encoding.

    • Les fichiers manifestes HLS ne sont compressés qu'avec gzip.

    Media CDN détermine le niveau de compression pour équilibrer la taille totale de téléchargement et le coût du processeur sur le client. Des niveaux de compression plus élevés n'entraînent pas toujours de meilleures performances, en particulier sur les appareils mobiles à faible puissance.

Configurer la compression dynamique

Vous pouvez activer la compression dynamique sur les routes qui traitent les requêtes.

Avant de commencer

Procédez comme suit :

Activer la compression dynamique pour une règle de route

Par défaut, le mode de compression d'une règle de routage est désactivé.

Si vous définissez le mode sur "automatique", la compression dynamique est activée pour chaque réponse éligible. Il indique également à Media CDN de choisir automatiquement le meilleur algorithme de compression.

Pour activer la compression dynamique, procédez comme suit :

Console

  1. Dans la console Google Cloud , accédez à la page Media CDN.

    Accéder à Media CDN

  2. Pour ouvrir la page Détails du service pour lequel vous souhaitez configurer une règle d'itinéraire, cliquez sur le nom du service.

  3. Pour passer en mode Édition, cliquez sur le bouton Modifier.

  4. Pour accéder à la section Routage, cliquez sur Suivant.

  5. Pour modifier une règle d'hôte, cliquez sur la flèche pour la développer.

  6. Pour modifier une règle de routage, cliquez sur Modifier sur la ligne correspondante.

  7. Dans le volet Modifier la règle de routage, cliquez sur Configurations avancées.

  8. Facultatif : Pour Action de routage, ajoutez un élément Règle CDN.

    Une règle CDN permet à Media CDN de compresser le contenu une fois et de le diffuser plusieurs fois, ce qui permet d'économiser de la bande passante et d'accélérer la diffusion.

  9. Dans la section Compression dynamique, sélectionnez Activer la compression.

  10. Pour enregistrer la règle d'itinéraire, cliquez sur Enregistrer.

  11. Pour enregistrer vos modifications apportées au service, cliquez sur Mettre à jour le service.

gcloud et YAML

  1. Exportez votre configuration Media CDN dans un fichier YAML. Utilisez la commande gcloud edge-cache services export.

    gcloud edge-cache services export SERVICE_NAME \
        --destination=FILENAME.yaml
    

    Remplacez les éléments suivants :

    • SERVICE_NAME : nom de votre service.
    • FILENAME : nom de votre fichier YAML
  2. Dans la définition de route du fichier YAML, sous routeAction, définissez compressionMode sur AUTOMATIC, comme indiqué dans l'exemple suivant :

    routing:
    hostRules:
    - hosts:
      - media.example.com
      pathMatcher: routes
    pathMatchers:
    - name: routes
      routeRules:
        - priority: 2
    origin: origin1
    matchRules:
    - pathTemplateMatch: "/**.m3u8" # HLS playlists
    - pathTemplateMatch: "/**.mpd" # DASH manifests
    routeAction:
      cdnPolicy:
        defaultTtl: 5s
      compressionMode: AUTOMATIC
    
  3. Pour mettre à jour le service, importez votre configuration Media CDN à partir du fichier YAML. Utilisez la commande gcloud edge-cache services import.

    gcloud edge-cache services import SERVICE_NAME \
        --source=FILENAME.yaml
    

Terraform

L'extrait Terraform suivant montre une règle de routage avec la compression dynamique activée.

route_rule {
  description = "a route rule with dynamic compression, priority=2 (high)"
  priority    = 2
  match_rule {
    path_template_match = "/**.m3u8" # HLS playlists
  }
  match_rule {
    path_template_match = "/**.mpd" # DASH manifests
  }
  origin = google_network_services_edge_cache_origin.default.name
  route_action {
    cdn_policy {
      cache_mode = "FORCE_CACHE_ALL"
      client_ttl = "300s"
    }
    compression_mode = "AUTOMATIC"
  }
  header_action {
    response_header_to_add {
      header_name  = "x-cache-status"
      header_value = "{cdn_cache_status}"
    }
  }
}

Votre configuration se propage rapidement à tous les emplacements périphériques.

Lorsque la compression dynamique est activée pour une route et que la nouvelle configuration prend effet sur les machines de production, Media CDN commence à compresser les réponses éligibles, même s'il existe des versions mises en cache non compressées. Lorsque Media CDN récupère et compresse de nouveaux contenus, il peut y avoir un pic temporaire de trafic vers votre origine.

Désactiver la compression dynamique pour une règle de routage

Pour désactiver la compression dynamique :

Console

  1. Dans la console Google Cloud , accédez à la page Media CDN.

    Accéder à Media CDN

  2. Pour ouvrir la page Détails du service pour lequel vous souhaitez configurer la règle d'itinéraire, cliquez sur le nom du service.

  3. Pour passer en mode Édition, cliquez sur le bouton Modifier.

  4. Pour accéder à la section Routage, cliquez sur Suivant.

  5. Pour modifier une règle d'hôte, cliquez sur la flèche pour la développer.

  6. Pour modifier une règle de routage, cliquez sur Modifier sur la ligne correspondante.

  7. Dans le volet Modifier la règle de routage, cliquez sur Configurations avancées.

  8. Dans la section Compression dynamique, décochez Activer la compression.

  9. Pour enregistrer la règle d'itinéraire, cliquez sur Enregistrer.

  10. Pour enregistrer vos modifications apportées au service, cliquez sur Mettre à jour le service.

gcloud et YAML

  1. Exportez votre configuration Media CDN dans un fichier YAML. Utilisez la commande gcloud edge-cache services export.

    gcloud edge-cache services export SERVICE_NAME \
        --destination=FILENAME.yaml
    

    Remplacez les éléments suivants :

    • SERVICE_NAME : nom de votre service.
    • FILENAME : nom de votre fichier YAML
  2. Dans la définition de l'itinéraire du fichier YAML, définissez compressionMode sur DISABLED.

  3. Pour mettre à jour le service, importez votre configuration Media CDN à partir du fichier YAML. Utilisez la commande gcloud edge-cache services import.

    gcloud edge-cache services import SERVICE_NAME \
        --source=FILENAME.yaml
    

Si vous rencontrez des problèmes de compression dynamique pour un itinéraire spécifique, tels que des problèmes de compatibilité avec certains clients (par exemple, des téléviseurs connectés ou des appareils de streaming), désactivez la compression dynamique pour empêcher Media CDN de diffuser du contenu compressé sur cet itinéraire.

Si vous désactivez la compression dynamique pour une route, Media CDN cesse de diffuser le contenu compressé à partir du cache. Toutes les réponses compressées mises en cache précédemment ne sont plus valides, et le CDN récupère les versions non compressées depuis votre serveur d'origine.

Types de contenus compressibles

La compression dynamique s'applique aux types MIME suivants, en fonction de l'en-tête de réponse HTTP Content-Type. Les réponses qui n'ont pas d'en-tête Content-Type ne sont pas compressées.

Les types de contenu courants et leurs types MIME sont les suivants :

  • Contenu HTML : text/html
  • Feuilles de style : text/css
  • JavaScript : application/javascript
  • JSON : application/json
  • Playlists HLS : application/x-mpegURL ou application/vnd.apple.mpegURL
  • Fichiers manifestes DASH : application/dash+xml

Le tableau suivant récapitule l'impact du type MIME sur la compression.

  Types MIME compressibles
Correspondance exacte application/csv
application/javascript
application/json
application/json+protobuf
application/signed-exchange
application/wasm
application/x-javascript
application/x-nacl
application/x-plist
application/x-pnacl
application/x-protobuf
application/x-protobuffer
application/x-sdch-dictionary
application/xml
audio/mpegURL
font/eot
font/otf
font/ttf
image/pwg-raster
image/svg+xml
image/vnd.microsoft.icon
image/x-icon
video/vnd.mpeg.dash.mpd
Correspondance de format application/*+json
application/*+xml
application/*mpegURL
text/*

Les formats d'image et de vidéo (tels que image/jpeg, image/png et video/mpeg4) sont presque toujours déjà compressés. Media CDN ne les compresse donc pas. La recompression d'une réponse déjà compressée réduit rarement la taille du fichier, et les clients peuvent présenter un comportement inattendu lorsqu'ils reçoivent une réponse de ce type.

Réponses incompressibles

Media CDN ne compresse pas une réponse présentant une ou plusieurs des caractéristiques suivantes :

  • La réponse ne comporte pas d'en-tête Content-Type correspondant à un type de contenu compressible.
  • La réponse ne comporte pas d'en-tête Content-Length.
  • La réponse comporte un en-tête Content-Encoding. Cela implique que l'origine a déjà compressé la réponse. Media CDN ne doit donc pas effectuer de compression dynamique supplémentaire.
  • La taille de la réponse est inférieure à 1 Kio.

    Le temps passé à compresser et à décompresser est souvent compensé par les avantages offerts par ce service. Il y a également moins de contenu à compresser, ce qui peut réduire l'efficacité de la compression et entraîner un taux de compression inférieur.

  • La réponse est supérieure à 1 Mio.

    Media CDN compresse les réponses jusqu'à la taille autorisée pour la mise en cache des objets sans mise en cache par plage d'octets.

  • La réponse comporte un en-tête Cache-Control: no-transform.

  • La réponse comporte un en-tête Vary: Accept-Encoding, ce qui implique que la compression dynamique n'est pas requise, car l'origine peut compresser la réponse.

Journalisation et surveillance

Lorsque la compression est activée, la métrique https/response_bytes_count existante sous edgecache.googleapis.com/EdgeCacheRouteRule indique la taille de la réponse compressée. Vous devriez constater une baisse du nombre total d'octets de réponse et du débit de transfert de données sortantes pour le contenu compressible.

Les journaux Media CDN incluent un champ compressionAlgorithmApplied dans jsonPayload, qui indique si la réponse a été compressée par l'équilibreur de charge, ainsi que le type de compression.

{
  insertId: "1c02hw9g3gjay67"
  jsonPayload: {
    @type: "type.googleapis.com/google.cloud.edgecache.v1.EdgeCacheLogEntry",
    cacheId: "IAD-862d661f",
    cacheStatus": "hit,stale",
    compressionAlgorithmApplied: "br"
  },
}

Facturation

Lorsqu'une réponse est compressée par Media CDN, les frais de transfert de données sortantes du cache ou d'Internet applicables sont basés sur les octets compressés finaux envoyés au client.

Si vous diffusez une grande quantité de réponses compressibles, cela peut entraîner une réduction de vos frais de transfert de données sortantes mensuels et une augmentation des performances pour les utilisateurs finaux.

Étapes suivantes