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
oapplication/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
eIf-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
- Per capire come le modalità cache facilitano la memorizzazione dei contenuti nella cache, consulta la sezione Utilizzare le modalità cache.
- Per attivare Cloud CDN per le istanze e i bucket di archiviazione bilanciati con carico HTTP(S), vedi Utilizzo di Cloud CDN.
- Per informazioni sull'annullamento della convalida delle cache, consulta la panoramica sulla invalidamento della cache.
- Per trovare i punti di presenza GFE, vedi Posizione della cache.