Compressione dinamica

La compressione dinamica funziona con un bilanciatore del carico HTTP(S) esterno globale (classico) per comprimere automaticamente le risposte pubblicate da Cloud CDN tra l'origine e il client. Le dimensioni dei dati inviati attraverso la rete sono ridotte del 60-85% nei casi tipici.

La riduzione delle dimensioni riduce il tempo necessario per il download dei contenuti. Per asset importanti come fogli di stile (CSS), script (JavaScript) e manifest video (HLS/DASH), questo può ridurre il tempo di caricamento della pagina e il tempo di avvio del video.

Puoi scoprire di più sui vantaggi della compressione delle risposte nella guida di Web Fundamentals.

Esempi di casi d'uso

La compressione dinamica riduce direttamente le dimensioni dei dati inviati dal perimetro di Cloud CDN al client. Questa operazione può essere eseguita direttamente:

  • Riduci le dimensioni di CSS e JavaScript, consentendo una visualizzazione più veloce delle pagine web e riducendo il tempo di First ContentfulPaint, un'importante metrica relativa alle prestazioni web.
  • Hanno un grande impatto positivo nella memorizzazione nella cache delle risposte dell'API REST, come i payload JSON. Questi payload si comprimono bene a causa dei tasti ripetuti, dello spazio vuoto e delle parentesi graffe. La memorizzazione nella cache delle API pubbliche per 5-10 secondi è un approccio noto per la riduzione del carico delle origini, mantenendo al contempo l'aggiornamento dei dati.
  • Migliora i tempi di inizio della riproduzione dei video e aggiungi la latenza per i live streaming. Le playlist dal vivo di grandi dimensioni (manifest) contengono una quantità significativa di dati ripetuti, tra cui il prefisso host + percorso di ciascun segmento, oltre ai metadati delle playlist HLS o DASH. Più velocemente la playlist si carica o possono essere scaricati gli aggiornamenti delle playlist, minore è il tempo di attesa di un client per l'analisi e l'avvio del download dei segmenti video di riferimento. Le playlist HLS e DASH spesso registrano una riduzione totale delle dimensioni di oltre il 90%.

Abilita compressione

Puoi attivare la compressione su un servizio di backend o un bucket di backend.

Prima di iniziare

  • Assicurati di avere configurato un bilanciatore del carico HTTP(S) esterno globale (beta) abilitato per Cloud CDN e un backend configurato. Se al momento non hai configurato Cloud CDN, puoi seguire una delle guide alla configurazione.
  • Il backend ha contenuti comprimibili pronti per la pubblicazione, ad esempio asset web o file manifest video compresi tra 1 KiB e 10 MiB (inclusi).
  • Assicurati che i client non si basino sul recupero di contenuti parziali con richieste di intervallo o con ETag efficaci. Questi file non sono compatibili con la compressione dinamica.
  • Disponi del ruolo Amministratore di bilanciatore del carico Compute IAM (roles/compute.loadBalancerAdmin), necessario per apportare modifiche alla configurazione del backend.

Abilita la compressione su un servizio di backend o un bucket di backend

console

L'attivazione della compressione dinamica in Google Cloud Console non è ancora supportata.

gcloud

Per i servizi di backend, utilizza il comando gcloud beta compute backend-services create o gcloud beta compute backend-services update con il flag --compression-mode.

Per i bucket di backend, utilizza il comando gcloud beta compute backend-buckets create o gcloud beta compute backend-buckets update con il flag --compression-mode.

Per un nuovo servizio di backend, utilizza il comando create:

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

Per un servizio di backend esistente, utilizza il comando update:

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

Per un nuovo bucket di backend, utilizza il comando create:

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

Per un bucket di backend esistente, utilizza il comando update:

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

Il valore compression-mode può essere uno dei seguenti:

  • AUTOMATIC: comprime automaticamente i contenuti.
  • DISABLED (valore predefinito): disattiva la compressione.
  • API

    Per i servizi di backend, utilizza la chiamata API Method: backendServices.insert o Method: backendServices.update.

    Per i bucket di backend, utilizza la chiamata API Method: backendBuckets.insert o Method: backendBuckets.update.

    Utilizza una delle seguenti chiamate 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
    

    Aggiungi il seguente snippet al corpo della richiesta JSON:

    "compressionMode": AUTOMATIC
    

    Il valore compression-mode può essere uno dei seguenti:

  • AUTOMATIC: comprime automaticamente i contenuti.
  • DISABLED (valore predefinito): disattiva la compressione.
  • Entro pochi minuti, la tua configurazione si propaga a tutte le località perimetrali. I contenuti comprimibili pubblicati dal backend vengono compressi prima di essere inviati al client.

    Modalità di compressione

    La modalità di compressione predefinita è DISABLED. Solo i backend con un oggetto loadBalancingScheme di EXTERNAL possono configurare una modalità di compressione diversa da DISABLED.

    La modalità AUTOMATIC consente a Cloud CDN di scegliere il miglior metodo di compressione in base a quanto segue:

    • Codifica accettata dal client
    • Il rapporto di compressione previsto dalla risposta
    • Velocità di compressione di Cloud CDN (velocità effettiva)

    Cloud CDN determina il livello di compressione per bilanciare le dimensioni di download totali e il costo della CPU sul client. Livelli di compressione più elevati non sono sempre vantaggiose per le prestazioni, specialmente sui dispositivi mobili con potenza inferiore.

    Quando viene compressa una risposta?

    Al momento è supportata solo la compressione gzip. Se il client include gzip nel suo elenco di codifiche Accept-Encoding, Cloud CDN utilizza gzip per comprimere la risposta, altrimenti Cloud CDN non comprime la risposta.

    Attualmente le risposte vengono compresse solo se sono memorizzabili nella cache.

    Tipi di contenuti comprimibili

    La compressione dinamica si applica ai seguenti tipi MIME, in base all'intestazione della risposta HTTP Content-Type. Le risposte che non hanno un'intestazione della risposta Content-Type non vengono compresse.

    I tipi di contenuti più comuni e i relativi tipi MIME includono:

    • Contenuti HTML: text/html
    • Fogli di stile: text/css
    • JavaScript: application/javascript
    • JSON: application/json
    • Playlist HLS: application/x-mpegURL o application/vnd.apple.mpegURL
    • Manifest DASH: application/dash+xml

    La seguente tabella riassume il modo in cui il tipo MIME influisce sulla compressione.

      Tipi MIME comprimibili
    Corrispondenza esatta applicazione/x-doc
    /gdd
    /g
    chich_ chich_ associate -
    Corrispondenza di schema applicazione/*+xml
    testo/*
    applicazione/*mpegURL

    I formati di immagini e video (come image/jpeg, image/png e video/mpeg4) sono quasi sempre già compressi, quindi Cloud CDN non li comprime. La compressione ripetuta di una risposta già compressa riduce raramente le dimensioni del file e i client potrebbero riscontrare comportamenti imprevisti quando ricevono una risposta di questo tipo.

    Quando una risposta non è compressa?

    La compressione dinamica non comprime una risposta quando questa ha una o più delle seguenti caratteristiche:

    • Nessuna intestazione Content-Type corrispondente a un tipo di contenuto comprimibile
    • Nessuna intestazione Content-Length
    • Inferiore a 1 KiB

      Il tempo impiegato per comprimere e decomprimere spesso compensa i vantaggi. Inoltre, sono presenti meno contenuti da comprimere, il che può ridurre l'efficacia della compressione (un rapporto di compressione più basso).

    • Superiore a 10 MiB

    • Un'istruzione Cache-Control: no-transform

    Richieste intervallo

    Quando la compressione dinamica è abilitata su un backend, il supporto per intervalli è disabilitato:

    • Le intestazioni Range e If-Range vengono rimosse da tutte le richieste.
    • Accept-Ranges: bytes intestazioni sono state rimosse da tutte le risposte.

    Ciò impedisce la pubblicazione di contenuti parziali errati nei client perché non esiste un modo per verificare se un client prevede un intervallo di byte dalla forma compressa o non compressa di una risorsa.

    ETag

    Quando la compressione dinamica comprime una risposta, le intestazioni ETag efficaci vengono deboli, come richiesto dalla sezione 2.3 RFC 7232. Ad esempio, ETag: "xyzzy" è sostituito da ETag: W/"xyzzy".

    Intestazione Vary

    Se una risposta ha il potenziale per essere compressa (a seconda della richiesta), viene pubblicata al client con un'intestazione Vary: Accept-Encoding.

    Fatturazione

    Quando una risposta è compressa da Cloud CDN o Cloud Load Balancing, il traffico in uscita dalla cache o il traffico in uscita da Internet pertinente (rispettivamente) viene misurato in base ai byte compressi finali inviati al client.

    La pubblicazione di un numero elevato di risposte comprimibili potrebbe comportare una riduzione delle tariffe mensili di uscita, nonché un aumento delle prestazioni per gli utenti finali.

    Metriche

    Quando la compressione è attiva, la metrica https/response_bytes_count esistente in loadbalancing.googleapis.com riporta le dimensioni della risposta compressa.

    Dovresti aspettarti un calo dei byte totali della risposta (e della velocità effettiva in uscita).

    Se pubblichi una grande quantità di contenuti basati su testo che si comprime bene, ad esempio HTML, CSS, JavaScript o JSON, potresti notare una notevole diminuzione dei byte di risposta.

    Per ulteriori informazioni, consulta la sezione Monitoraggio.

    Passaggi successivi