Varnish Cache

Een betere performance voor dynamische webprojecten

Dynamische webprojecten gaan qua performance achteruit, naarmate de complexiteit en het aantal bezoekers toenemen. Om de webserver te ontlasten en het verlies van snelheid tegen te gaan, kun je een reverse proxy (omgekeerde proxy) gebruiken, die de aanvragen voor de webserver plaatsvervangend beantwoordt. Daarvoor slaat hij het opgevraagde materiaal (zowel statische inhoud, zoals afbeeldingen, als resultaten van regelmatig opgeroepen, dynamische pagina’s) eerst op in zijn cache. Een erg populaire cache-software is Varnish. In tegenstelling tot veel concurrenten is de gratis software volledig ontwikkeld als HTTP-accelerator. Het gebruik van Varnish Cache vereist een webserver met geïnstalleerd Unix-besturingssysteem en beheerdersrechten voor de installatie en configuratie.


Zo werkt Varnish Cache

Varnish wordt, als omgekeerde proxy, direct voor de webserver die de website-inhoud bevat, geïnstalleerd. Als er nu een pagina wordt opgeroepen, wordt deze eerst nog door de oorspronkelijke server verwerkt, maar de Varnish Cache proxy slaat de aanvraag en de vereiste inhoud op. Als de pagina nu opnieuw wordt opgeroepen, kunnen de gegevens direct uit de Varnish cache worden geladen. De software slaat daarbij alle gegevens op in het interne geheugen en laat het besturingssysteem kiezen wat naar de harde schijf van de server moet worden verplaatst. Zo wordt voorkomen dat het systeem tegelijkertijd gegevens in de cache en op de harde schijf opslaat.

Varnish fungeert daarnaast als load balancer. Volgens de round-robin-methode worden de binnenkomende aanvragen van de client telkens als aparte ‘werkthreads’ beschouwd, die achtereenvolgens door de Varnish cache worden afgehandeld. Een vastgelegde limiet bepaalt hoeveel actieve threads tegelijkertijd kunnen worden verwerkt. Als deze limiet is bereikt, komen alle andere aanvragen in een wachtrij terecht. Pas als ook de limiet van de wachtrij is bereikt, worden ingaande verbindingen geblokkeerd.

De configuratie van de Varnish reverse proxy wordt hoofdzakelijk gestuurd via de Varnish Configuration Language (VCL). Hiermee is het mogelijk om hooks (interfaces) te schrijven, waarmee externe codes in de toepassing kunnen worden geïntegreerd. Als zo’n VCL-script laadt, wordt het vertaald in de programmeertaal C en gecompileerd in een programmabibliotheek; de VCL-instructies worden aan de Varnish cache gekoppeld. Als het gebruikte CMS, de gebruikte webwinkel-software of de achterliggende webapplicatie de opmaaktaal ESI (Edge Side Includes) ondersteunt, kan Varnish bovendien volledig opgeslagen pagina’s aanleveren. In de HTML-bestanden van de pagina’s genereert de opmaaktaal zogenaamde ESI-tags, die dynamische inhoud kenmerken. Bij een client-aanvraag herkent de Varnish cache deze tags en wordt de desbetreffende inhoud geladen.


Voor- en nadelen van Varnish-hosting

Het optimaliseren van je eigen hostingoplossing met Varnish Cache, kan in veel gevallen het antwoord zijn op de toenemende complexiteit van je project en het stijgende aantal bezoekers. Het gebruik van de software is echter niet aan te bevelen voor alle websites. Om een beter overzicht te bieden, hebben we de voor- en nadelen van Varnish-hosting voor je samengevat:

Voordelen Nadelen
+ Kortere laadtijden dankzij content in het geheugen - Voor systemen die ESI niet beheersen, biedt Varnish Cache niet veel verbetering
+ Minder belasting van de webserver - Verhoogde complexiteit en foutgevoeligheid
+ ESI-ondersteuning - Geen ondersteuning van TLS/SSL of HTTPS
+ Besturingssysteem verplaatst de content naar de harde schijf van de server - Instelling en configuratie zijn zeer gecompliceerd en vereisen speciale kennis
+ Lastverdeling dankzij de round-robin-methode - Alleen voor Unix-besturingssystemen
+ Flexibele configuratiemogelijkheden dankzij VCL

Het bovenstaande overzicht maakt duidelijk dat Varnish-hosting alleen een goed alternatief voor de bestaande cache-functies van clients en webservers is, als je met een webapplicatie werkt die de opmaaktaal ESI beheerst. Verder kost de installatie en configuratie van Varnish Cache, inclusief de ESI-tags, veel moeite. Omdat Varnish geen TLS-/SSL-verbindingen ondersteunt, heb je een tweede proxyserver nodig voor een veilige overdracht.

Een goed geconfigureerde Varnish-cache, inclusief ESI-tags, kan je webproject echter wel een stuk sneller maken dan gangbare caching-methoden. De Varnish-cache vermindert de laadtijden voor je bezoekers enorm en kan daarom op lange termijn tot een aanzienlijk hogere conversation rate leiden. Daarnaast profiteer je automatisch van een betere zoekmachine-ranking en ontlast je de webserver, die niet meer alleen verantwoordelijk is voor het verwerken van ingaande verbindingen. Met name onder eigenaars van webshops en websites met veel content is Varnish-hosting daarom erg populair.


Varnish Cache installeren

Om Varnis Cache te installeren, zijn beheerdersrechten voor het gebruikte UNIX-systeem een basisvoorwaarde. Verder moet de webserver waarop Varnish Cache moet worden geïnstalleerd, al ingericht zijn. In onderstaande handleiding lees je welke stappen moeten worden uitgevoerd om Varnish te installeren en configureren. Als voorbeeld zijn Ubuntu als besturingssysteem en Apache als webserver gebruikt:

  1. Het pakketbeheer van Ubuntu bevat Varnish standaard, maar niet altijd in de actuele versie. Varnish Software biedt daarom bij de installatie toegang tot de eigen online directory. Zo open je de directory en voeg je deze als bron toe:
    sudo apt-get install apt-transport-https
    sudo curl https://repo.varnish-cache.org/GPG-key.txt | apt-key add -
    sudo echo "deb https://repo.varnish-cache.org/ubuntu/ trusty varnish-4.1"
    >> /etc/apt/sources.list.d/varnish-cache.list
  2. Vervolgens laad je de pakketlijsten opnieuw en installeer je Varnish:
    sudo apt-get update
    sudo apt-get install varnish
  3. Nu moet je het Varnish-bestand zodanig configureren dat de software weet waar de webcontent te vinden is. Daarvoor open je eerst het bestand:
    sudo nano /etc/default/varnish

    Daar wijzig je de gegevens onder ‘DAEMON_OPTS’ als volgt:
    DAEMON_OPTS="-a :80 \
     -T localhost:6082 \
     -f /etc/varnish/default.vcl \
     -S /etc/varnish/secret \
     -s malloc,256m"
  4. Sla de wijzigingen op en open het bestand default.vlc:
    sudo nano /etc/varnish/default.vlc
    Voer poort 8080 in als bron voor de door Varnish toegevoegde content:
    backend default {
     .host = "127.0.0.1";
     .port = "8080";
    }
  5. Tot slot stel je ook voor Apache de poort 8080 (standaard 80) in. Open daarvoor het configuratiebestand voor de Apache-poort:
    sudo nano /etc/apache2/ports.conf

    Wijzig het poortnummer voor de vermeldingen ‘NameVirtualHost’ en ‘Listen’:
    NameVirtualHost 127.0.0.1:8080
    Listen 127.0.0.1:8080
  6. Pas in het default-bestand (etc/apache2/sites-available/default) de VirtualHost-vermelding op dezelfde manier aan.

  7. Start de server en Varnish vervolgens opnieuw op om de installatie en configuratie te voltooien:
    sudo service apache2 restart
    sudo service varnish restart

Handleidingen voor de installatie van Varnish op andere Unix-besturingssystemen vind je, evenals de programmacode van de software, in de downloadsectie van de officiële website varnish-cache.org.