Caching
Il caching è essenziale per la scalabilità di un sito web dinamico. A seconda della complessità del sito è sempre più difficile fornire buone prestazioni per le richieste che arrivano ad essere gestite da PHP. In generale, ci sono ordini di grandezza di differenza tra la latenza di una risposta che arriva dalla cache e una che arriva dal backend. Inoltre, un meccanismo di caching può essere necessario per mitigare attacchi denial of service.
Il Web Accelerator combina dei moduli di configurazione di Varnish sviluppati e affinati in anni di esperienza con le personalizzazioni necessarie al sito del cliente per ottenere la massima efficienza possibile. È un prodotto interamente gestito dal personale di Seeweb, senza bisogno che il cliente debba configurarlo personalmente.
Modalità di caching
È necessario decidere una politica di caching: l'obiettivo è fare caching di più risposte possibile (per aumentare l'efficienza), ma non farlo mai quando non è permesso (per non rompere funzioni del sito).
Nella modalità predefinita il Web Accelerator segue la normale semantica di HTTP. Questa modalità di solito non è utile, almeno senza una configurazione personalizzata, perché HTTP vieta il caching delle risposte che ricevono o emettono cookie e in genere tutte le richieste ne hanno.
Caching "standard": come evoluzione della precedente, si possono ignorare i cookie per gli oggetti che si presume siano statici, e quindi forzarne il caching: immagini, CSS, Javascript, font, eccetera... Una configurazione di questo tipo funziona senza bisogno di personalizzazioni, però non fa caching delle pagine dinamiche e di conseguenza non permette di avere le migliori prestazioni.
Caching "forzato": si fa caching di tutti gli oggetti tranne quelli esplicitamente esclusi, come per esempio l'area amministrativa del sito o il carrello degli acquisti. Richiede di conoscere in dettaglio il funzionamento del CMS o dello specifico sito, però una configurazione accurata permette un livello di caching ottimale. Il Web Accelerator gestisce automaticamente i casi più comuni grazie a una libreria di moduli di configurazione già pronti per i più diffusi CMS come Wordpress, Joomla e Magento.
È anche possibile usare criteri più complessi dell'URL per escludere qualcosa dal caching: per esempio il Web Accelerator può esaminare i cookie per sapere se una richiesta è stata fatta da un utente autenticato, che quindi deve ricevere una pagina personalizzata.
In più, si possono usare le informazioni contenute nei cookie per partizionare la cache e avere più copie della stessa pagina personalizzate secondo caratteristiche come la lingua, la valuta o anche ciascun utente autenticato.
Caching delle risposte
TTL degli oggetti in cache
Il Web Accelerator tiene in cache gli oggetti per il tempo prescritto dagli header Cache-Control
restituiti dal backend, fino a una durata massima (predefinita: 1 giorno).
In mancanza dell'header allora è applicato un TTL predefinito in base all'estensione del file nell'URL: per gli oggetti presunti statici (immagini, CSS, Javascript, font, eccetera...) questo valore è di 1 ora, mentre per le pagine presunte dinamiche (cioè tutto il resto) è di 5 minuti. Errori come 403 e 404 invece sono tenuti in cache per 1 minuto.
Se non è possibile che il backend invii degli header Cache-Control
appropriati è comunque possibile configurare sul Web Accelerator delle politiche personalizzate con la massima granularità. Il nostro personale è a disposizione per valutare le impostazioni migliori per ciascun sito.
In caso il backend sia guasto e quindi non sia possibile aggiornare la cache, il Web Accelerator risponde con gli oggetti scaduti fino a un'ora prima.
Si sottolinea quindi che se il backend invia oggetti con header tipo Cache-Control: no-cache
ne impedirà il caching: in questo caso, se non è possibile correggerne il funzionamento, si può configurare il Web Accelerator per ignorarli completamente.
Invalidazione della cache
Sono disponibili tre diverse API per invalidare il contenuto della cache:
- richieste di specifici oggetti con il metodo HTTP
PURGE
. - oggetti corrispondenti a una regular expression richiesta con il metdodo HTTP
PURGE
, aggiungendo un headerX-Purge-Method: regex
. - l'API di invalidazione di Drupal, senza bisogno di impostare
X-Varnish-Secret
.
Per gestire automaticamente l'invalidazione in Wordpress è possibile installare un plugin che implementi una di queste interfacce, per esempio Proxy Cache Purge.
È disponibile un file di esempio test_purge.php
che mostra come
invalidare un oggetto con PHP e libcurl.
Disattivazione temporanea del caching
Durante attività di sviluppo che coinvolgano direttamente il sito in
produzione è possibile disattivare il caching per la sessione in corso
nel browser accedendo a https://<dominio>/seeweb-wa/cache-bypass
.
Alta affidabilità
Locale: si possono attivare nello stesso data center due istanze in modalità attiva/passiva.
Geografica anycast: si possono attivare in diversi data center delle istanze che gestiscono ciascuna una parte del traffico, e che in caso di guasto o manutenzione possono essere una il backup dell'altra.
Seeweb ha data center a Milano e Frosinone con connettività e peering indipendenti, e questo permette di servire con bassa latenza i visitatori locali.
Per siti ad altissimo traffico è anche possibile attivare in varie configurazioni più istanze nello stesso data center in modalità attiva/attiva, ma è molto raro che questo sia necessario.
Caching di emergenza
A volte capita che il sito di un cliente riceva improvvisamente una quantità inattesa di traffico, legittimo oppure parte di un attacco Denial of Service.
Il personale di Seeweb può attivare in pochi minuti un Web Accelerator di emergenza, deviando con flowspec il traffico HTTP e HTTPS che normalmente sarebbe diretto al backend. In questo modo non è necessario cambiare l'IP del sito nel DNS e attendere che tutti i client vedano il nuovo.
La cache di emergenza è un Web Accelerator quasi standard. È in grado di inviare direttamente al backend il traffico per i siti che non è configurato per gestire, quindi è necessario installare solo i certificati per i siti di cui è effettivamente necessario fare caching.
Statistiche in tempo reale
https://<dominio>/seeweb-wa/statistics
mostra in tempo reale delle
statistiche sul traffico dell'intero Web Accelerator. Le credenziali
sono fornite al momento dell'attivazione.