Il problema che Varnish risolve
Alla fine degli anni 2000 il traffico web cresce esponenzialmente e la pila tipica — Apache HTTP Server + PHP + MySQL — mostra i suoi limiti di scalabilità. I reverse proxy con caching (Squid, primariamente) sono stati pensati per il forward proxy e si adattano con attrito al caso inverso. Poul-Henning Kamp, committer storico di FreeBSD, ha avviato nel 2006 Varnish Cache per il quotidiano norvegese Verdens Gang (VG), con un obiettivo specifico: un reverse proxy HTTP progettato nativamente per il caching web moderno.
Varnish 2.0 è stato rilasciato a novembre 2008; la serie 2.0.x culminante con 2.0.5 in ottobre 2009 consolida la maturità del progetto. Licenza BSD 2-Clause.
Le idee tecniche
Varnish introduce scelte architetturali distintive:
- Shared memory e mmap — l’intera cache è mappata in memoria condivisa, delegando il kernel la gestione del paging. Il design è esplicitamente “laissons faire au kernel”: Varnish non gestisce esplicitamente la cache in RAM vs. disco, ma si affida al virtual memory subsystem
- Worker thread pool — ogni connessione è gestita da un thread dedicato; scelta differente dall’event-loop single-threaded (Nginx) ma efficace su kernel Linux/FreeBSD moderni con scheduler efficienti
- VCL — Varnish Configuration Language — DSL compilata in C dal varnishd al caricamento; rule set per decidere cosa cacheare, come, per quanto tempo, con quali variazioni
- Sticky backends e directors — bilanciamento verso multipli backend con politiche (round-robin, random, client hash, DNS)
- HTTP/1.1 compliance — gestione conforme di Vary, Cache-Control, Age, If-Modified-Since, conditional GET, ESI (Edge Side Includes)
Un esempio VCL
sub vcl_recv {
if (req.http.host ~ "^(www\.)?example\.com$") {
set req.http.host = "example.com";
}
if (req.url ~ "\.(png|jpg|css|js)$") {
unset req.http.cookie;
}
}
sub vcl_backend_response {
if (bereq.url ~ "\.(png|jpg|css|js)$") {
set beresp.ttl = 1d;
}
}
Il potere espressivo è sufficiente a gestire scenari complessi: autenticazione, A/B testing, rewrite, compressione, ESI. La compilazione a C garantisce prestazioni paragonabili al codice scritto a mano.
Performance
Varnish 2.x su hardware commodity del 2009 gestisce decine di migliaia di richieste al secondo con latenze sotto il millisecondo per HIT. Il throughput è tipicamente limitato dalla rete o dal kernel, non dal processo Varnish.
Il comando varnishlog espone un log dettagliato circolare in shared memory, consumabile da tool come varnishstat, varnishtop, varnishhist per monitoring real-time. Questo modello — circular log in shared memory — è un’altra innovazione tecnica.
Adozione
A fine 2009 Varnish è in produzione in:
- Verdens Gang (quotidiano norvegese che ha commissionato il progetto)
- The New York Times, The Guardian, The Times — editoria internazionale
- Wikipedia (WMF) — layer di cache davanti a Squid e MediaWiki
- Twitter, Flickr, LinkedIn — traffico sociale elevato
- Drupal, WordPress VIP — ecosistemi CMS
L’adozione italiana segue tra 2010-2012 nei portali a traffico elevato, testate online, piattaforme e-commerce.
Varnish Plus / Enterprise
Varnish Software (azienda fondata 2010 per sostenere il progetto) introdurrà progressivamente una versione Enterprise con funzionalità aggiuntive (SSL support nativo — il 2.x pubblico non ha TLS, che va gestito esternamente; PSU persistent storage; supporto commerciale). Il core rimane open source BSD.
Lo stack cloud emergente
Il pattern architetturale tipico alla fine del 2009 per un sito web ad alta scalabilità include Varnish:
[Client] → [Load Balancer] → [Varnish] → [Web Server] → [Application] → [Database]
↓
[Static assets]
Con Varnish davanti, il web server e l’applicazione sono sollevati dalla maggior parte delle richieste: HIT rate tipici del 80-95% per siti content-heavy. Questo pattern si sposterà naturalmente nel decennio successivo verso CDN distribuiti (Akamai, Cloudflare, Fastly — quest’ultimo basato proprio su Varnish) e infine verso architetture serverless con caching integrato.
Riferimenti: Varnish Cache 2.0.5 (ottobre 2009). Poul-Henning Kamp (FreeBSD committer, autore originale). Verdens Gang come commissionario. Licenza BSD 2-Clause. VCL — Varnish Configuration Language. HTTP/1.1 RFC 2616.
