Habilitar la compresión dinámica

La compresión dinámica comprime automáticamente las respuestas que sirve Media CDN. El tamaño de los datos enviados a través de la red se reduce entre un 60% y un 85% en los casos habituales.

La reducción del tamaño acelera la descarga de recursos importantes, como hojas de estilo (CSS), secuencias de comandos (JavaScript) y manifiestos de vídeo (HLS o DASH), lo que puede reducir significativamente los tiempos de carga de las páginas y de inicio de los vídeos.

Las listas de reproducción de vídeo en directo grandes (manifiestos) tienen una cantidad significativa de datos y solicitudes repetidos, incluidos el host y el prefijo de ruta de cada segmento, así como los metadatos de la lista de reproducción HLS o DASH. Cuanto más rápido se cargue la lista de reproducción o se descarguen las actualizaciones de la lista de reproducción, menos tiempo tendrá que esperar un cliente para analizar y empezar a descargar los segmentos de vídeo a los que se hace referencia. Las listas de reproducción HLS y DASH suelen reducir su tamaño total en más de un 90%.

Para obtener más información sobre las ventajas de comprimir las respuestas, consulta la guía Aspectos básicos de la Web.

Cómo funciona la compresión dinámica

Cuando la compresión dinámica está habilitada, el contenido comprimible que se sirve desde el origen se puede comprimir antes de entregarse si el cliente acepta uno de los algoritmos de compresión admitidos (br o gzip).

Media CDN añade un encabezado Vary: Accept-Encoding a todas las respuestas aptas para la compresión. Para obtener más información, consulta Contenido incompresible.

Además, si el encabezado Accept-Encoding de la solicitud indica una preferencia por el contenido comprimido especificando br o gzip (y, opcionalmente, incluyendo un parámetro q distinto de cero), Media CDN hace lo siguiente:

  • Elimina el encabezado Content-Length de la respuesta. Esto es necesario para que la respuesta se sirva lo antes posible, ya que la longitud completa del contenido se desconoce hasta que se haya comprimido toda la respuesta. En HTTP/1.1 y versiones anteriores, Media CDN usa Transfer-Encoding: chunked en la respuesta cuando no usa Content-Length.

    Una vez que se ha comprimido y almacenado en caché una respuesta, Media CDN puede incluir el encabezado Content-Length en las respuestas posteriores y asignar el valor a la longitud del contenido del cuerpo comprimido.

  • Asigna el valor none a Accept-Ranges. Informa a los clientes de que se ignoran las solicitudes de intervalo de este recurso.

  • Debilita los encabezados de respuesta ETagsegún lo estipulado en la sección 8.8.3 de la RFC 9110. Por ejemplo, ETag: "xyzzy" se sustituye por ETag: W/"xyzzy".

  • Asigna el valor br o gzip al encabezado Content-Encoding, que indica el algoritmo de compresión elegido.

    Media CDN elige el mejor algoritmo de compresión en función de la relación de compresión prevista de la respuesta y de la velocidad o el rendimiento de la compresión.

    • La compresión Brotli se usa si el cliente la admite, aunque otros algoritmos de compresión tengan valores de q más altos en el encabezado Accept-Encoding.

    • Los manifiestos HLS solo se comprimen con gzip.

    Media CDN determina el nivel de compresión para equilibrar el tamaño total de la descarga y el coste de CPU en el cliente. Los niveles de compresión más altos no siempre mejoran el rendimiento, sobre todo en dispositivos móviles con menos potencia.

Configurar la compresión dinámica

Puedes habilitar la compresión dinámica en las rutas que sirven solicitudes.

Antes de empezar

Sigue estos pasos:

Habilitar la compresión dinámica en una regla de ruta

De forma predeterminada, el modo de compresión de una regla de ruta está inhabilitado.

Si se selecciona el modo automático, se habilita la compresión dinámica para todas las respuestas aptas. Además, indica a Media CDN que elija automáticamente el mejor algoritmo de compresión.

Para habilitar la compresión dinámica, sigue estos pasos:

Consola

  1. En la Google Cloud consola, ve a la página Media CDN.

    Ir a Media CDN

  2. Para abrir la página Detalles del servicio en el que quiere configurar una regla de ruta, haga clic en el nombre del servicio.

  3. Para cambiar al modo de edición, haz clic en el botón Editar.

  4. Para ir a la sección Enrutamiento, haz clic en Siguiente.

  5. Para editar una regla de host, haz clic en la flecha para desplegarla.

  6. Para editar una regla de ruta, haz clic en Editar en la fila correspondiente.

  7. En el panel Editar regla de ruta, haga clic en Configuraciones avanzadas.

  8. Opcional: En Acción de ruta, añade un elemento Política de CDN.

    Una política de CDN permite a Media CDN comprimir el contenido una vez y servirlo varias veces, lo que ahorra ancho de banda y acelera la entrega.

  9. En la sección Compresión dinámica, seleccione Habilitar compresión.

  10. Para guardar la regla de ruta, haz clic en Guardar.

  11. Para guardar los cambios en el servicio, haz clic en Actualizar servicio.

gcloud y YAML

  1. Exporta tu configuración de Media CDN a un archivo YAML. Usa el comando gcloud edge-cache services export.

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

    Haz los cambios siguientes:

    • SERVICE_NAME: el nombre de tu servicio
    • FILENAME : el nombre del archivo YAML
  2. En la definición de la ruta del archivo YAML, en routeAction, asigna el valor AUTOMATIC a compressionMode, tal como se muestra en el siguiente ejemplo:

    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. Para actualizar el servicio, importa tu configuración de Media CDN desde el archivo YAML. Usa el comando gcloud edge-cache services import.

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

Terraform

El siguiente fragmento de Terraform muestra una regla de ruta con la compresión dinámica habilitada.

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}"
    }
  }
}

Tu configuración se propagará en breve a todas las ubicaciones perimetrales.

Cuando la compresión dinámica está habilitada en una ruta y la nueva configuración se aplica en las máquinas de producción, Media CDN empieza a comprimir las respuestas aptas, aunque haya versiones en caché sin comprimir. Mientras Media CDN obtiene y comprime contenido nuevo, puede producirse un aumento temporal del tráfico a tu origen.

Inhabilitar la compresión dinámica en una regla de ruta

Para inhabilitar la compresión dinámica, siga estos pasos:

Consola

  1. En la Google Cloud consola, ve a la página Media CDN.

    Ir a Media CDN

  2. Para abrir la página Detalles del servicio en el que quiere configurar la regla de ruta, haga clic en el nombre del servicio.

  3. Para cambiar al modo de edición, haz clic en el botón Editar.

  4. Para ir a la sección Enrutamiento, haz clic en Siguiente.

  5. Para editar una regla de host, haz clic en la flecha para desplegarla.

  6. Para editar una regla de ruta, haz clic en Editar en la fila correspondiente.

  7. En el panel Editar regla de ruta, haga clic en Configuraciones avanzadas.

  8. En la sección Compresión dinámica, desmarque Habilitar compresión.

  9. Para guardar la regla de ruta, haz clic en Guardar.

  10. Para guardar los cambios en el servicio, haz clic en Actualizar servicio.

gcloud y YAML

  1. Exporta tu configuración de Media CDN a un archivo YAML. Usa el comando gcloud edge-cache services export.

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

    Haz los cambios siguientes:

    • SERVICE_NAME: el nombre de tu servicio
    • FILENAME : el nombre del archivo YAML
  2. En la definición de la ruta del archivo YAML, asigna el valor compressionMode a DISABLED.

  3. Para actualizar el servicio, importa tu configuración de Media CDN desde el archivo YAML. Usa el comando gcloud edge-cache services import.

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

Si tienes problemas con la compresión dinámica en una ruta específica, como problemas de compatibilidad con determinados clientes (por ejemplo, smart TVs o dispositivos de streaming), inhabilita la compresión dinámica para evitar que Media CDN sirva contenido comprimido en esa ruta.

Si se inhabilita la compresión dinámica de una ruta, Media CDN dejará de servir contenido comprimido desde la caché. Todas las respuestas comprimidas almacenadas en caché anteriormente dejan de ser válidas y la CDN obtiene versiones sin comprimir de tu origen.

Tipos de contenido comprimible

La compresión dinámica se aplica a los siguientes tipos MIME, en función del encabezado de respuesta HTTP Content-Type. Las respuestas que no tienen un encabezado Content-Type no se comprimen.

Entre los tipos de contenido habituales y sus tipos MIME se incluyen los siguientes:

  • Contenido HTML: text/html
  • Hojas de estilo: text/css
  • JavaScript: application/javascript
  • JSON: application/json
  • Listas de reproducción HLS: application/x-mpegURL o application/vnd.apple.mpegURL
  • Archivos de manifiesto de DASH: application/dash+xml

En la siguiente tabla se resume cómo afecta el tipo MIME a la compresibilidad.

  Tipos de MIME comprimibles
Concordancia exacta 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
Concordancia de patrones application/*+json
application/*+xml
application/*mpegURL
text/*

Los formatos de imagen y vídeo (como image/jpeg, image/png y video/mpeg4) casi siempre ya están comprimidos. Por lo tanto, Media CDN no los comprime. Volver a comprimir una respuesta que ya está comprimida rara vez reduce el tamaño del archivo, y los clientes pueden mostrar un comportamiento inesperado al recibir una respuesta de este tipo.

Respuestas incompresibles

Media CDN no comprime una respuesta que tenga una o varias de las siguientes características:

  • La respuesta no tiene un encabezado Content-Type que coincida con un tipo de contenido comprimible.
  • La respuesta no tiene un encabezado Content-Length.
  • La respuesta tiene un encabezado Content-Encoding. Esto implica que el origen ya ha comprimido la respuesta. Por lo tanto, Media CDN no debe realizar ninguna compresión dinámica adicional.
  • La respuesta es inferior a 1 KiB.

    El tiempo dedicado a comprimir y descomprimir suele compensar cualquier ventaja. También hay menos contenido que comprimir, lo que puede reducir la eficacia de la compresión y dar lugar a una relación de compresión más baja.

  • La respuesta es superior a 1 MiB.

    Media CDN comprime las respuestas hasta el tamaño permitido para los objetos de almacenamiento en caché sin almacenamiento en caché por intervalo de bytes.

  • La respuesta tiene un encabezado Cache-Control: no-transform.

  • La respuesta tiene un encabezado Vary: Accept-Encoding, lo que implica que no se requiere compresión dinámica porque el origen puede comprimir la respuesta.

Almacenamiento de registros y monitorización

Cuando la compresión está habilitada, la métrica https/response_bytes_count de edgecache.googleapis.com/EdgeCacheRouteRule informa del tamaño de la respuesta comprimida. Es de esperar que se produzca una disminución en el total de bytes de respuesta y en el rendimiento de la transferencia de datos saliente para el contenido comprimible.

Los registros de Media CDN incluyen un campo compressionAlgorithmApplied en jsonPayload, que indica si el balanceador de carga ha comprimido la respuesta, así como el tipo de compresión.

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

Facturación

Cuando Media CDN comprime una respuesta, los cargos correspondientes por transferencia de datos de Internet o de caché de salida se basan en los bytes comprimidos finales que se envían al cliente.

Si sirves una gran cantidad de respuestas comprimibles, esto puede reducir las tarifas mensuales de transferencia de datos salientes, así como aumentar el rendimiento para los usuarios finales.

Siguientes pasos