E’ da tempo che è in corso ormai una guerra di religione su quale sia la migliore cache per webserver. Ci sono i puristi di sempre che consigliano una cache come Varnish Cache ed i novizi che consigliano NGINX FastCGI cache di cui abbiamo parlando in questo articolo, come un metodo più veloce, più semplice e meno complesso di fornire funzionalità di caching HTTP (ed ovviamente HTTPS).
C’è chi come noi sostiene che Varnish abbia maggiori features e consenta grazie al suo Vansh Configuration Language (VLC n.d.r.) di generare setup e configurazioni di caching davvero complesse ed avanzate, e c’è chi sostiene che le stesse cose si possano fare con qualche riga di configurazione in più direttamente in NGINX, senza aggiungere strati di cache come Varnish.
Normalmente in questi confronti, ognuno porta acqua al suo mulino, a quello che abitualmente utilizza, a quello che sa utilizzare maggiormente o trova più comodo. Ad esempio, vuoi mettere la flessibilità di Varnish Cache e la compatibilità con WordPress grazie a plugin standard di mercato come W3 Total Cache, Proxy Cache Purge, WP Fastest Cache o il commercialissimo WP Rocket ?
Oggettivamente quando parliamo di WordPress e performance siamo i primi a sottolineare quanto sia importante per noi avere uno stack basato su Varnish come full page cache. Tuttavia, abbiamo veramente ragione quando asseriamo che la Cache di NGINX sia un “giocattolo” per sistemisti provetti inesperti? E quando alcuni nostri colleghi ci criticano per l’uso di una cache come Varnish che di fatto potrebbe essere risparmiata utilizzando la Cache di NGINX, criticandoci di aver appesantito uno stack software che potrebbe essere più snello, hanno veramente ragione loro?
Insomma, tra Varnish e NGINX quale cache è migliore ?
Per rispondere a questa domanda bisogna fare necessariamente un passo indietro e prendere distanza dalle proprie convinzioni, cercando un approccio di apertura verso ciò che fino ad oggi abbiamo non usato o usato male ed iniziare a capire i modelli di business di Varnish e NGINX e come dalla comprensione delle loro rispettive limitazioni si possano includere e non escludere a vicenda.
Modelli di business di Varnish e NGINX
Varnish e NGINX sono due popolari server proxy utilizzati per migliorare le prestazioni delle applicazioni web e garantire una migliore esperienza utente. Ciò che rende questi software ancora più interessanti è che entrambi sono sviluppati secondo la filosofia open source, il che significa che sono liberamente disponibili per l’uso e la modifica da parte di chiunque.
Tuttavia, esiste anche una versione commerciale di entrambi i software: NGINX Plus e Varnish Enterprise. Queste versioni sono dotate di caratteristiche avanzate e funzionalità aggiuntive, che non sono disponibili nelle versioni gratuite. Tali funzionalità includono supporto ufficiale da parte dell’azienda, garanzie sulla qualità del software e persino strumenti di analisi delle prestazioni.
Ciò che differenzia maggiormente queste versioni commerciali dalle versioni gratuite è il loro prezzo. Entrambe le versioni commerciali hanno costi di licenza di decine di migliaia di dollari annui. Ciò significa che queste licenze sono rivolte principalmente ad aziende che hanno bisogno di funzionalità avanzate e che sono disposte a pagare per il supporto e le garanzie aggiuntive.
Superare le rispettive limitazioni utilizzando sia NGINX che Varnish
Consapevoli che sia NGINX che Varnish hanno nelle loro versioni free delle limitazioni, possiamo comunque superarli utilizzando entrambi i server proxy in combinazione.
Ad esempio, NGINX può essere utilizzato come servizio di microcaching. In questo modo, NGINX viene utilizzato come primo livello di caching, in cui vengono memorizzati i dati che vengono frequentemente richiesti dagli utenti. Quando una richiesta arriva al server, NGINX controlla la sua cache per vedere se la risposta è già presente. Se lo è, NGINX invia immediatamente la risposta al client senza dover passare alla fase successiva di elaborazione.
In combinazione con Varnish, NGINX può essere utilizzato come front-end per il server di cache Varnish. In questo scenario, le richieste dei client sono inizialmente gestite da NGINX. Se i dati richiesti non sono presenti nella cache di NGINX, la richiesta viene passata al server Varnish, che ha una cache più grande e più robusta. Varnish ha la capacità di memorizzare grandi quantità di dati in RAM, rendendolo molto più veloce delle classiche cache come Memcached e Redis.
Quando un client richiede un’informazione, NGINX la cerca nella sua cache. Se la risposta è presente, NGINX la invia direttamente al client. In caso contrario, la richiesta viene inoltrata a Varnish, che a sua volta verifica la propria cache per vedere se la risposta è presente. Se la risposta è presente nella cache di Varnish, questa viene restituita al client attraverso NGINX.
Questa combinazione di caching può migliorare significativamente le prestazioni delle applicazioni web. Inoltre, è possibile personalizzare il comportamento della cache utilizzando le opzioni di configurazione offerte da entrambi i server proxy e con alcune accortezze far in modo che il web server non restituisca mai una MISS come risposta, e garantendo dunque tempi di risposta eccellenti inferiori ai 30ms.