Varnish: il web accelerator per il tuo server.

Varnish e un web accelerator utilizzato per siti web dinamici con funzionalita di caching. Sono stati proprio I suoi creatori a definirlo in questo modo, in quanto il suo scopo principale e quello di velocizzare il front end di un sito web, ottimizzando l'accesso ad esso senza andare a mettere mano sul codice : semplicemente l'utilizzatore di questo prodotto open source non e costretto a modifcare il codice dellla sua applicazione.

Flessibilità, la chiave del successo

Una caratteristica importante di Varnish è la flessibilità: infatti utilizza un suo linguaggio di configurazione, il VCL (Varnish Configuration Language), il quale viene poi tradotto in codice binario che viene eseguito all’arrivo di una richiesta da parte di un client. I vari file VCL sono divisi in subroutines. Quelle che un utente sicuramente utilizzerà saranno due:

  1. vcl_recv: è invocata all’arrivo di ogni richiesta. Il suo scopo è quello di decidere se servire la richiesta o meno, come farlo e quale backend utilizzare.
  2. vcl_fetch: è invocata ogni volta che viene restituito un documento dal backend. In questa subroutine si possono modificare gli header, e gestire I failure sui server di backend.
  3. vcl_hit: chiamata dopo che un lookup (vedi dopo) sulla cache viene eseguito e il documento viene trovato
  4. vcl_miss: chiamata dopo che un lookup (vedi dopo) sulla cache viene eseguito e il documento non viene trovato

In ogni subroutine possono essere intraprese delle azioni, tra le quali:

  • pass: richiesta e risposta passeranno da varnish senza essere salvate in cache
  • lookup: è chiamata solo in vcl_recv e indica che Varnish consegnerà il contenuto della cache, anche se esiste un’azione di pass sulla richiesta
  • pipe: in questo caso Varnish esegue una semplice operazionedi pass-through, senza andare a effettuare il parsing del contenuto
  • deliver: consegna l’oggetto in cache. Di solito viene invocata in vcl_fetch.

Esitono inoltre 3 importanti strutture dati: 

  • req: la richiesta dal client
  • beresp: la risposta dal backend, compresi gli header. In vcl_fetch la maggior parte del lavoro viene dedicao a questa struttura dati.
  • obj: l’oggetto in cache. 

Un’altra importante caratteristica di Varnish è il load balancing: esso può essere realizzato o utilizzando una policy round-robin, oppure in base ai contenuti della richiesta del client ( IP, header HTTP, URL della richiesta…).