21 Novembre 2022

Varnish e Cache Control, come padroneggiare correttamente la durata della Cache

Cache Control è un’intestazione HTTP che può aiutare ad istruire Cache Server Side come Varnish sulla durata della Cache.

Introduzione

Varnish Cache è un popolare proxy HTTP inverso e acceleratore HTTP. Si trova di fronte ai nostri servizi web/applicativi e utilizza una gamma di tecniche di memorizzazione nella cache, prelettura e compressione per ridurre il carico sui servizi di back-end upstream e fornire tempi di risposta client migliori ai nostri clienti.

Oltre a migliorare le prestazioni, una caratteristica forse meno nota di Varnish è che può essere configurato per proteggere i client da errori e interruzioni a monte. Se un servizio upstream è temporaneamente non disponibile o inizia a restituire errori, Varnish è in grado di eseguire il fallback per fornire risposte obsolete dalla sua cache, a condizione che il periodo di grazia degli oggetti memorizzati nella cache non sia scaduto.

Possiamo ormai dire senza farne segreto che Varnish Cache sia alla base della nostra infrastruttura e dei nostri servizi di Hosting Performance.

Cache Control

Il ruolo cache-controldell’intestazione è istruire le cache a valle (browser e cache proxy come Varnish) su come memorizzare nella cache le risposte. Il valore di s-maxageconsente a Varnish di conoscere il numero di secondi per i quali la risposta può essere memorizzata nella cache, altrimenti noto come tempo di vita (TTL). Il valore di max-ageverrà utilizzato dalle cache del browser (e anche dalle cache proxy nel caso s-maxagenon specificato). Interno a Varnish il valore viene utilizzato per impostare la beresp.ttlvariabile.

Il stale-while-revalidatevalore informa la cache per quanto tempo è accettabile riutilizzare una risposta obsoleta. Nell’esempio precedente, la risposta diventerà obsoleta dopo 10 m (600 s), quindi la cache può riutilizzarla per qualsiasi richiesta effettuata entro i 2 giorni successivi (172800 s). Questo è anche noto come periodo di grazia, interno a Varnish il valore viene utilizzato per impostare la beresp.gracevariabile. La prima risposta recuperata durante il periodo di grace attiverà una richiesta di recupero in background asincrona, rendendo nuovamente aggiornato l’oggetto memorizzato nella cache, senza trasferire il costo di latenza della riconvalida al client.

Inoltre, se il servizio di back-end non è disponibile o risponde lentamente, i client saranno protetti da tali risposte fino alla scadenza del periodo di tolleranza, si spera fornendo al servizio un tempo adeguato al ripristino, o agli ingegneri un tempo adeguato a risolvere un problema, prima che ciò impedisca negativamente sull’esperienza del cliente. Non bisogna trascurare il fatto che si tratta di un compromesso: sebbene fornisca risposte più rapide e maggiore resilienza, aumenta anche le possibilità di fornire risposte obsolete o addirittura per questo motivo errate.

L’impostazione di una stale-while-revalidatedurata elevata è un giudizio e potrebbe non essere appropriato per le risposte contenenti dati di rendering lato server altamente dinamici, in cui l’aggiornamento è fondamentale. Abbiamo cercato di massimizzare l’uso della funzione sulle risposte contenenti dati relativamente statici, come i nostri contenuti editoriali e le pagine di destinazione delle categorie.

Configurazione di Varnish

Per impostazione predefinita, Varnish ripiegherà per fornire una risposta obsoleta durante il periodo di tolleranza se non è possibile connettersi al servizio di backend o se la richiesta scade. Il comportamento può essere esteso agli errori 5xx con il seguente codice insub vcl_backend_response

sub vcl_backend_response {    if (beresp.status >= 500 && bereq.is_bgfetch) { 
        return (abbandono); 
    }    .... 
}

beresp.statuscontiene il codice di stato restituito dal servizio di backend, bereq.is_bgfetchsarà vero se la richiesta di backend è stata inviata in modo asincrono dopo che il client ha ricevuto una risposta memorizzata nella cache e return (abandon)indica a Varnish di abbandonare la richiesta e non fare nulla.

In conclusione

Una risposta memorizzata nella cache non aggiornata, se disponibile, nella maggior parte dei casi fornirà un’esperienza cliente migliore rispetto a una pagina di errore. Laddove il contenuto di rendering lato server è sufficientemente statico da consentire una stale-while-revalidatedurata elevata, ricorrere alla cache può essere uno strumento utile da avere per aumentarne la resilienza.

Hai dei dubbi? Non sai da dove iniziare? Contattaci !

Abbiamo tutte le risposte alle tue domande per aiutarti nella giusta scelta.

Chatta con noi

Chatta direttamente con il nostro supporto prevendita.

0256569681

Contattaci telefonicamente negli orari d’ufficio 9:30 – 19:30

Contattaci online

Apri una richiesta direttamente nell’area dei contatti.

INFORMAZIONI

Managed Server S.r.l. è un player italiano di riferimento nel fornire soluzioni avanzate di sistemistica GNU/Linux orientate all’alta performance. Con un modello di sottoscrizione dai costi contenuti e prevedibili, ci assicuriamo che i nostri clienti abbiano accesso a tecnologie avanzate nel campo dell’hosting, server dedicati e servizi cloud. Oltre a questo, offriamo consulenza sistemistica su sistemi Linux e manutenzione specializzata in DBMS, IT Security, Cloud e molto altro. Ci distinguiamo per l’expertise in hosting di primari CMS Open Source come WordPress, WooCommerce, Drupal, Prestashop, Joomla, OpenCart e Magento, affiancato da un servizio di supporto e consulenza di alto livello adatto per la Pubblica Amministrazione, PMI, ed aziende di qualsiasi dimensione.

Red Hat, Inc. detiene i diritti su Red Hat®, RHEL®, RedHat Linux®, e CentOS®; AlmaLinux™ è un marchio di AlmaLinux OS Foundation; Rocky Linux® è un marchio registrato di Rocky Linux Foundation; SUSE® è un marchio registrato di SUSE LLC; Canonical Ltd. detiene i diritti su Ubuntu®; Software in the Public Interest, Inc. detiene i diritti su Debian®; Linus Torvalds detiene i diritti su Linux®; FreeBSD® è un marchio registrato di The FreeBSD Foundation; NetBSD® è un marchio registrato di The NetBSD Foundation; OpenBSD® è un marchio registrato di Theo de Raadt. Oracle Corporation detiene i diritti su Oracle®, MySQL®, e MyRocks®; Percona® è un marchio registrato di Percona LLC; MariaDB® è un marchio registrato di MariaDB Corporation Ab; REDIS® è un marchio registrato di Redis Labs Ltd. F5 Networks, Inc. detiene i diritti su NGINX® e NGINX Plus®; Varnish® è un marchio registrato di Varnish Software AB. Adobe Inc. detiene i diritti su Magento®; PrestaShop® è un marchio registrato di PrestaShop SA; OpenCart® è un marchio registrato di OpenCart Limited. Automattic Inc. detiene i diritti su WordPress®, WooCommerce®, e JetPack®; Open Source Matters, Inc. detiene i diritti su Joomla®; Dries Buytaert detiene i diritti su Drupal®. Amazon Web Services, Inc. detiene i diritti su AWS®; Google LLC detiene i diritti su Google Cloud™ e Chrome™; Microsoft Corporation detiene i diritti su Microsoft®, Azure®, e Internet Explorer®; Mozilla Foundation detiene i diritti su Firefox®. Apache® è un marchio registrato di The Apache Software Foundation; PHP® è un marchio registrato del PHP Group. CloudFlare® è un marchio registrato di Cloudflare, Inc.; NETSCOUT® è un marchio registrato di NETSCOUT Systems Inc.; ElasticSearch®, LogStash®, e Kibana® sono marchi registrati di Elastic N.V. Hetzner Online GmbH detiene i diritti su Hetzner®; OVHcloud è un marchio registrato di OVH Groupe SAS; cPanel®, L.L.C. detiene i diritti su cPanel®; Plesk® è un marchio registrato di Plesk International GmbH; Facebook, Inc. detiene i diritti su Facebook®. Questo sito non è affiliato, sponsorizzato o altrimenti associato a nessuna delle entità sopra menzionate e non rappresenta nessuna di queste entità in alcun modo. Tutti i diritti sui marchi e sui nomi di prodotto menzionati sono di proprietà dei rispettivi detentori di copyright. Ogni altro marchio citato appartiene ai propri registranti. MANAGED SERVER® è un marchio registrato a livello europeo da MANAGED SERVER SRL, Via Enzo Ferrari, 9, 62012 Civitanova Marche (MC), Italia.

SOLO UN ATTIMO !

Vorresti vedere come gira il tuo WooCommerce sui nostri sistemi senza dover migrare nulla ? 

Inserisci l'indirizzo del tuo sito WooCommerce e otterrai una dimostrazione navigabile, senza dover fare assolutamente nulla e completamente gratis.

No grazie, i miei clienti preferiscono il sito lento.
Torna in alto