Compresión dinámica

La compresión dinámica permite que Cloud CDN comprima de forma automática las respuestas a medida que se entregan entre el origen y el cliente. El tamaño de los datos enviados a través de la red se reduce entre un 60% y un 85% en los casos comunes.

La reducción del tamaño disminuye el tiempo que lleva descargar el contenido. En el caso de elementos importantes, como hojas de estilo (CSS), secuencias de comandos (JavaScript) y manifiestos de video (HLS/DASH), esto puede reducir la carga de la página y los tiempos de inicio del video.

Puedes obtener más información sobre los beneficios de comprimir respuestas en la guía Fundamentos de la Web.

Casos de uso de ejemplo

La compresión dinámica reduce directamente el tamaño de los datos enviados desde el perímetro de Cloud CDN al cliente. Esto puede hacer directamente lo siguiente:

  • Reducir el tamaño de CSS y JavaScript, lo que ayuda a las páginas web a procesarse más rápido y a reducir el tiempo de primer procesamiento de imagen con contenido, una métrica importante del rendimiento web.
  • Tener un gran impacto positivo cuando se almacenan en caché respuestas de la API de REST, como las cargas útiles de JSON. Estas cargas útiles se comprimen de forma correcta debido a las claves repetidas, el espacio en blanco y las llaves. El almacenamiento en caché de API públicas durante 5 a 10 segundos es un enfoque popular para reducir la carga de origen y, al mismo tiempo, mantener la actualidad de los datos.
  • Mejorar el tiempo de inicio de reproducción para la entrega de video y la latencia de unión para la transmisión en vivo. Las listas de reproducción en vivo grandes (manifiestos) tienen una cantidad significativa de datos repetidos, incluido el prefijo de ruta y host de cada segmento, así como los metadatos de la lista de reproducción de HLS o DASH. Cuanto más rápido cargue la lista de reproducción o se descarguen las actualizaciones de la lista de reproducción, menos tiempo esperará un cliente para analizar y comenzar a descargar los segmentos de video a los que se hace referencia. Las listas de reproducción de HLS y DASH suelen ver una reducción de su tamaño total de más del 90%.

Habilita la compresión

Puedes habilitar la compresión en un servicio de backend o un bucket de backend.

Antes de comenzar

  • Asegúrate de tener configurado un backend y un balanceador de cargas habilitado para Cloud CDN. Si no tienes Cloud CDN configurado actualmente, puedes seguir una de las guías de configuración.
  • Tu backend tiene contenido que se puede comprimir y listo para entregar, como elementos web o manifiestos de video entre 1 KiB y 10 MiB (inclusive).
  • Asegúrate de que los clientes no dependan de recuperar contenido parcial con solicitudes de rango o con ETags sólidas. Estas no son compatibles con la compresión dinámica.
  • Tienes el rol Compute Load Balancer Admin (roles/compute.loadBalancerAdmin), que es necesario para realizar cambios en la configuración de backend.

Habilita la compresión en un servicio de backend o un bucket de backend

Console

Aún no se admite la habilitación de la compresión dinámica en Google Cloud Console.

gcloud

Para los servicios de backend, usa el comando gcloud beta compute backend-services create o gcloud beta compute backend-services update con la marca --compression-mode.

Para los buckets de backend, usa el comando gcloud beta compute backend-buckets create o gcloud beta compute backend-buckets update con la marca --compression-mode.

Para un servicio de backend nuevo, usa el comando create:

gcloud beta compute backend-services create BACKEND_SERVICE_NAME \
    --compression-mode=AUTOMATIC

Para un servicio de backend existente, usa el comando update:

gcloud beta compute backend-services update BACKEND_SERVICE_NAME \
    --compression-mode=AUTOMATIC

Para un bucket de backend nuevo, usa el comando create:

gcloud beta compute backend-buckets create BACKEND_BUCKET_NAME
    --compression-mode=AUTOMATIC

Para un bucket de backend existente, usa el comando update:

gcloud beta compute backend-buckets update BACKEND_BUCKET_NAME
    --compression-mode=AUTOMATIC

El compression-mode puede ser uno de los siguientes:

  • AUTOMATIC: Comprime el contenido de forma automática.
  • DISABLED (predeterminado): inhabilita la compresión.
  • API

    Para los servicios de backend, usa la llamada a la API Method: backendServices.insert o Method: backendServices.update.

    En el caso de los buckets de backend, usa la llamada a la API Method: backendBuckets.insert o Method: backendBuckets.update.

    Usa una de las siguientes llamadas a la API:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices
    
    PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE
    
    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets
    
    PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/BACKEND_BUCKET
    

    Agrega el siguiente fragmento al cuerpo de solicitud JSON:

    "compressionMode": AUTOMATIC
    

    El compression-mode puede ser uno de los siguientes:

  • AUTOMATIC: Comprime el contenido de forma automática.
  • DISABLED (predeterminado): inhabilita la compresión.
  • En pocos minutos, tu configuración se propaga a todas las ubicaciones perimetrales. El contenido comprimible que se entrega desde el backend se comprime antes de entregarse al cliente.

    Modos de compresión

    El modo de compresión predeterminado es DISABLED. Solo los backends con un loadBalancingScheme de EXTERNAL pueden configurar un modo de compresión que no sea DISABLED.

    El modo AUTOMATIC permite que Cloud CDN elija el mejor método de compresión en función de los siguientes factores:

    • La codificación aceptada del cliente
    • El índice de compresión previsto de la respuesta
    • La velocidad de compresión (capacidad de procesamiento) de Cloud CDN

    Cloud CDN determina el nivel de compresión para equilibrar el tamaño total de la descarga y el costo de CPU en el cliente. Los niveles de compresión más altos no siempre benefician el rendimiento, en especial en dispositivos móviles de menor potencia.

    ¿Cuándo se comprime una respuesta?

    Actualmente, solo se admite la compresión gzip. Si el cliente incluye gzip en su lista de codificaciones Accept-Encoding, Cloud CDN usa gzip para comprimir la respuesta. De lo contrario, Cloud CDN no comprime la respuesta.

    Las respuestas solo se comprimen si se pueden almacenar en caché.

    Tipos de contenido que se pueden comprimir

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

    Los tipos de contenido comunes y sus tipos de MIME incluyen lo siguiente:

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

    La siguiente tabla resume cómo el tipo de MIME afecta la capacidad de compresión.

      Tipos de MIME que se pueden comprimir
    Concordancia exacta application/x-javascript
    application/x-sdch-dictionary
    application/javascript
    application/xml
    application/csv
    application/json
    application/json+protobuf
    application/signed-exchange
    application/vnd.apple.mpegurl
    application/wasm
    application/x-plist
    application/x-protobuffer
    application/x-protobuf
    application/x-nacl
    application/x-pnacl
    font/ttf
    font/otf
    font/eot
    image/svg+xml
    image/pwg-raster
    image/x-icon
    image/vnd.microsoft.icon
    video/vnd.mpeg.dash.mpd
    application/dicom+json
    audio/mpegURL
    application/dash+xml
    application/vnd.ms-sstr+xml
    Coincidencia del patrón application/*+xml
    text/*
    application/*mpegURL

    Los formatos de imagen y video (como image/jpeg, image/png y video/mpeg4) casi siempre están comprimidos, por lo que Cloud CDN no los comprime. Volver a comprimir una respuesta ya comprimida rara vez reduce el tamaño del archivo, y los clientes pueden presentar un comportamiento inesperado cuando reciben una respuesta de este tipo.

    ¿Cuándo no se comprime una respuesta?

    La compresión dinámica no comprime una respuesta cuando la respuesta tiene una o más de las siguientes características:

    • No hay encabezado Content-Type que coincida con un tipo de contenido comprimible.
    • No hay encabezado Content-Length
    • Menor que 1 KiB

      El tiempo dedicado a comprimir y descomprimir a menudo compensa cualquier beneficio. También hay menos contenido para comprimir, lo que puede reducir la efectividad de la compresión (una proporción de compresión más baja).

    • Mayor que 10 MiB

    • Una directiva Cache-Control: no-transform

    Solicitudes de rango

    Cuando la compresión dinámica está habilitada en un backend, la compatibilidad con rangos está inhabilitada:

    • Los encabezados Range y If-Range se quitan de todas las solicitudes.
    • Los encabezados Accept-Ranges: bytes se quitan de todas las respuestas.

    Esto evita que los clientes entreguen contenido parcial incorrecto porque no hay forma de garantizar si un cliente espera un rango de bytes de la forma comprimida o sin comprimir de un recurso.

    ETag

    Cuando la compresión dinámica comprime una respuesta, cualquier encabezado de ETag fuerte se debilita, como lo requiere la sección 2.3 de RFC 7232. Por ejemplo, ETag: "xyzzy" se reemplaza por ETag: W/"xyzzy".

    Encabezado Vary

    Si una respuesta tiene el potencial de comprimirse (según la solicitud), la respuesta se entrega al cliente con un encabezado Vary: Accept-Encoding.

    Facturación

    Cuando se comprime una respuesta mediante Cloud CDN o Cloud Load Balancing, la salida de caché o la salida de Internet relevantes (respectivamente) se mide en función de los bytes comprimidos finales que se envían al cliente.

    Si entregas una gran cantidad de respuestas que se pueden comprimir, esto puede generar una reducción en tus tarifas de salida mensual y un mayor rendimiento para los usuarios finales.

    Métricas

    Cuando la compresión está habilitada, la métrica https/response_bytes_count existente en loadbalancing.googleapis.com informa el tamaño de la respuesta comprimida.

    Deberías esperar una disminución en los bytes totales de respuesta (y la capacidad de procesamiento de salida).

    Si entregas una gran cantidad de contenido basado en texto que se comprime bien, como HTML, CSS, JavaScript o JSON, es posible que veas una gran disminución de los bytes de respuesta.

    Para obtener más información, consulta Supervisión.

    ¿Qué sigue?