Twee verschillende problemen

Caching bewaart een kant-en-klaar antwoord zodat de server het niet telkens opnieuw hoeft te berekenen. Een CDN, een content delivery network, brengt dat antwoord dichter bij de bezoeker door het op meerdere plekken ter wereld klaar te zetten in plaats van op een enkele server.

Caching lost dus een reken- en databaseprobleem op, een CDN lost een afstandsprobleem op. Ze werken vaak samen, maar een site kan uitstekend gecachet zijn en toch traag laden voor bezoekers ver van de server, en omgekeerd.

Wat caching precies doet

Zonder caching bouwt een pagina bij elk bezoek het antwoord opnieuw op: de database bevragen, de sjabloon vullen, het resultaat versturen. Met caching wordt dat antwoord na de eerste keer bewaard, zodat een volgend bezoek meteen het kant-en-klare resultaat krijgt in plaats van het hele proces te herhalen.

Er bestaan meerdere lagen: paginacache voor een hele pagina, objectcache voor stukjes data die vaak worden opgevraagd, en browsercache die bestanden op het apparaat van de bezoeker zelf bewaart zodat een tweede bezoek nauwelijks nog iets hoeft te downloaden.

Wat een CDN precies doet

Een CDN is een netwerk van servers verspreid over de wereld die een kopie van je statische bestanden klaarzetten, zoals afbeeldingen, lettertypen en scripts. Een bezoeker uit een ander land krijgt die bestanden dan van een server in de buurt in plaats van helemaal vanaf je eigen server, en dat scheelt reistijd voor elk bestand.

Voor een site met vooral Nederlands publiek en Nederlandse hosting is de winst kleiner dan voor een site met internationaal publiek, waar het verschil tussen wel en geen CDN goed merkbaar is.

Wanneer een CDN echt verschil maakt

Bij internationaal publiek is het verschil het duidelijkst: een bezoeker aan de andere kant van de wereld merkt een CDN direct. Bij een Nederlandse site voor een Nederlands publiek, gehost in Nederland, is de winst beperkter, omdat de afstand die overbrugd moet worden al klein is.

Een CDN helpt ook bij plotselinge drukte, want het verdeelt de belasting over meerdere servers in plaats van alles op een enkele server te laten neerkomen. Dat maakt het waardevol rond een actie of een piekmoment, ook voor een overwegend lokaal publiek.

Waar het misgaat: verouderde content

Het grootste risico van caching is een bezoeker die een verouderde versie van een pagina te zien krijgt: een prijs die al is aangepast, een voorraadstatus die niet meer klopt, een tekst die net is gewijzigd. Dat gebeurt wanneer een systeem niet weet dat er iets is veranderd en de oude cache blijft tonen.

De oplossing is niet minder cachen maar gerichter: een systeem dat de cache van een specifieke pagina wist zodra die pagina wijzigt, in plaats van alles voortdurend te verversen of juist alles te lang te bewaren.

Waar het misgaat: cache die persoonlijke gegevens deelt

Een pagina die voor de een anders is dan voor de ander, zoals een winkelwagen of een ingelogd account, mag niet zomaar gecachet worden voor iedereen. Gebeurt dat toch, dan kan de ene bezoeker de inhoud van een ander te zien krijgen, wat een serieus datalek is.

Een goed ingerichte cache herkent het verschil tussen wat voor iedereen hetzelfde is en wat persoonlijk is, en cachet alleen het eerste. Dat is precies waar generieke instellingen die overal cache aanzetten, gevaarlijk kunnen worden.

Meerdere lagen tegelijk instellen

De grootste storingen ontstaan niet doordat caching ontbreekt maar doordat meerdere lagen elkaar tegenwerken: een paginacache, een objectcache en een CDN die elk denken dat een ander de verversing regelt. Het resultaat is een wijziging die nergens goed doorkomt, of juist een systeem dat elkaar in de weg zit bij het legen van de cache.

Houd het eenvoudig: zo min mogelijk lagen die elkaar overlappen, en een duidelijke afspraak over welke laag verantwoordelijk is voor het verversen na een wijziging. Meer cache is niet automatisch beter; consistente cache wel.

Veelgestelde vragen

Heb ik een CDN nodig als mijn klanten allemaal in Nederland zitten?

De winst is dan kleiner dan bij internationaal publiek, maar niet nul: een CDN helpt ook bij plotselinge drukte, omdat het de belasting over meerdere servers verdeelt in plaats van alles op een punt te laten samenkomen.

Kan caching ervoor zorgen dat bezoekers een oude prijs zien?

Ja, als het systeem niet weet dat de prijs is gewijzigd en de oude cache blijft tonen. De oplossing is een cache die gericht wordt geleegd zodra iets verandert, niet minder cachen.

Is caching gevaarlijk voor persoonlijke gegevens?

Het kan zijn, als een pagina die per bezoeker verschilt, zoals een winkelwagen, per ongeluk voor iedereen wordt gecachet. Een goed ingerichte cache onderscheidt wat voor iedereen hetzelfde is van wat persoonlijk is.

Werken een CDN en caching samen?

Ja, en meestal is dat ook de bedoeling: caching zorgt dat het antwoord snel klaar is, het CDN zorgt dat het snel bij de bezoeker aankomt. Ze lossen wel een ander deel van het probleem op, en het een vervangt het ander niet.