Cache is King

Niemand doet graag steeds maar weer hetzelfde werk. Gelukkig hebben de servers die uw webshop hosten hiervan geen last. Die serveren de miljoenste bezoeker alsof het de eerste was. Toch kan het lonend zijn om uw servers dit leed te besparen, door te cachen. Uw shop zal hiervan sneller worden, en servers kunnen meer aan. Dat levert op meerdere vlakken voordelen op!
cache-is-king-blog

Cachen voor snelheid, en schaalbaarheid

Als u 20 jaar geleden een dynamische website had, dan was u behoorlijk hip bezig. uw website bestond niet uit platte HTML, maar was een echte (CGI) webapplicatie, met wellicht zelfs een database erbij voor de opslag van al die content. Prachtige vooruitgang natuurlijk, vergeleken bij het bewerken van HTML in nodepad.exe (uche) en het uploaden van de bijbehorende plaatjes via FTP.

Tegenwoordig verwachten we natuurlijk niets anders meer, en na die 20 jaar gaat het veel verder dan dat. Websites laten persoonlijke pagina’s zien aan de hand van profielen, klikgedrag, cookies, of u mobiel bent, koppelingen met social media – noem het maar op. Heel wat data gevoerd aan programmatuur geschreven in scripttalen produceren uiteindelijk een stuk code tussen de bekende tags, die uw browser ophaalt van de server, en dat uiteindelijk tot een mooie website rendert.

U hoeft geen techneut te zijn om te begrijpen dat de situatie van 20 jaar geleden, zelfs voor de techniek van 20 jaar geleden, veel makkelijker was om te ‘serveren’ dan de webapplicaties van tegenwoordig. HTML bestanden lezen van disk, in TCP/IP packets opdelen en het netwerk op gooien is een peulenschil. Simpele I/O. Webserver krijgt request van client, dat zich op disk vertaalt naar die file. In die file worden nog wat plaatjes gesourcet, die haalt de client ook een voor een op en klaar is kees. Een pagina van toen zorgde voor enkele requests naar de disks van de server.

20 Jaar vooruit. Websites vormen (tien)duizenden regels code, verdeeld over honderden of soms wel duizenden (Magento bijvoorbeeld) bestanden, waar meerdere programmeurs weken, of zelfs wel maanden lang aan hebben gewerkt. Voor ieder request van een bezoeker moeten al die regels code (of een flink deel ervan) ingelezen worden, verwerkt/gecompileerd, alle variabelen gevoerd, uiteindelijk uitgevoerd, data (content) wordt opgehaald van diverse bronnen (database, disk, externe requests), statistieken worden bijgehouden, en de client wordt een pagina geserveerd. En wel graag binnen 0,5sec, want anders zijn we verveeld, en klikken we verder naar een andere site.

Internet is ook steeds mondialer, gewoner, en zelfs onmisbaar geworden. Meer een meer gebeurt online. Dus als het u met slim programmeren gelukt is om die ene bezoeker binnen die 0,5sec te serveren, en uw site gaat ‘viral’, en staan uw servers alsnog te roken en mist u een hoop bezoekers.

Tegenwoordig kunt u echt niet meer iedere bezoeker een vers gegenereerde pagina serveren. Dat kost te veel hardware. Als u iedere seconde ongeveer een bezoeker hebt wel, maar als het met een factor paar honderd of duizend van dat op uw servers afkomt, moet u het slimmer aan gaan pakken. Dan moet u gaan cachen. Cachen op meerdere niveau’s. Overal cachen. Waar het maar kan!

Wat is cachen?

Cachen is een mechanisme om data op te slaan, zodat toekomstige verzoeken voor die(zelfde) data (veel) sneller geserveerd kan worden. De data die in een cache opgeslagen is is eerder berekend (dynamisch), maar het kan ook een kopie (statisch) van een (een deel) data zijn die elders is opgeslagen. In alle gevallen komt die data vanaf een bron die veel langzamer is (dus meer tijd nodig heeft) dan de cache (of veel meer resources nodig heeft) om die data te genereren en te serveren. Het doel van een cache is immers het versnellen van het serveren van de (in dit geval) website(content). Cachen gebeurt in computerland bijna overal. De CPU (Centrale Processor Unit) zelf heeft zelfs meerdere lagen van caches (die met elkaar ‘praten’) voor data en bepaalde instructies/berekeningen, die als ze vaak herhaald worden, veel sneller uitgevoerd kunnen worden. Zonder cache zouden de meeste CPU’s flink wat langzamer hun werk doen, en veel meer energie verbruiken.

In de context van dit blog artikel wordt de data in de cache gevormd door onderdelen van een website die bezocht wordt door een bezoeker. Grofweg text (HTML, CSS, Javascript) en binaire data (plaatjes, fonts en dergelijke). Alle onderdelen kunnen in principe dynamisch gegenereerd worden, maar meestal is het een combinatie van gegenereerde content (bijvoorbeeld PHP/Ruby/Python/Perl die HTML genereert) en statische content (plaatjes, CSS, javascript). In de meeste gevallen komt deze data van een harddisk af in de server die de website serveert. Die harddisk (of meerdere harddisken die een RAID set vormen) is traditioneel het traagste component van een server, maar ook het meest storingsgevoelig, en bovendien onderhevig aan slijtage (er zitten bewegende onderdelen in). We kunnen dat wel dramatisch verbeteren door middel van SSD’s (Solid State Drive – wat betekent dat hier geen bewegende onderdelen zijn, maar flash-geheugen) – maar dat is dan nog steeds het traagste hardware component van de server.

Als we dus in een server gaan cachen, willen we het het liefst dat we die harddisk zo min mogelijk gaan aanspreken. Het traagste onderdeel zal ook als eerste een bottelneck vormen als we meer bezoekers op onze website krijgen. We zouden dat het liefste willen verschuiven naar een van de snelste onderdelen van een server waarin we (flink wat) data kunnen opslaan: het geheugen. Waarom?

Een harddisk heeft responstijden in de orde van enkele tientallen millisecondes (ms). Ter vergelijking: RAM geheugen in een server heeft responstijden van enkele tientallen nanosecondes (ns). Daar zitten nog microsecondes (μs) tussen, dus we hebben het hier over een factor miljoen (1000×1000, of 1000^2) maal sneller. Dat wil niet zeggen dat als u uw website vanuit het geheugen van een server kunt serveren die een miljoen maal sneller wordt, maar het process van het serveren is in ieder geval totaal geen significante vertragende factor meer. Als we dit optimaal weten aan te pakken op de server zal de CPU en het geheugen in de server eerder een bottelneck gaan vormen. Hierop kunnen we over het algemeen prima schalen. Meer CPU’s en geheugen erin, en uw besturingssysteem zal dat automatisch voor u gaan gebruiken. Als dit een virtuele server in onze cloud is, kan dit zelfs online (dus geen reboot, geen downtime) gebeuren!

Hoe moet u cache gebruiken?

U kunt cache toepassen op bijna alle lagen van uw website of applicatie. De frontend, database en ook de gebruikerskant kan versneld worden door goed te cachen. Zoals u al eerder hebt gelezen kan slechts één seconde snelheidswinst al tot een enorme stijging in conversie van uw webshop resulteren.

Maar hoe moet u dat nu inregelen en waar moet u op letten? Neem vrijblijvend contact op met onze hostingprofessionals en laat u adviseren!

  • Dit veld is bedoeld voor validatiedoeleinden en moet niet worden gewijzigd.