Cache is een systeem dat helpt bij het optimaliseren van de prestaties van je webapplicatie. Het fungeert hierbij als een opslagplaats voor de tijdelijke opslag van veel opgevraagde gegevens. Het systeem voorkomt zo dat content voor een webapplicatie telkens volledig opnieuw hoeft worden ingeladen vanuit bijvoorbeeld achterliggende databases. Deze werkwijze verbetert de prestaties en daarmee de gebruikerservaring.
Wat is distributed cache?
Distributed cache is een vorm van cache die het cacheproces loskoppelt van je reguliere servers en toewijst aan speciale cache-resources. Je synchroniseert continu alle nodes, die hierdoor identieke data bevatten. Dit zorgt er onder meer voor dat je servers altijd dezelfde cache aanspreken, wat diverse voordelen biedt.
Zo maakt de server bij een reguliere vorm van server cache gebruik van een eigen cache, die doorgaans op de server zelf is opgeslagen. Deze cache is alleen beschikbaar voor deze specifieke server. Maak je gebruik van meerdere servers voor het afhandelen van binnenkomende verzoeken van gebruikers? Dan ligt het aan de server die dit verzoek verwerkt of opgevraagde content in de cache beschikbaar is.
Het gebruik van een standaard server cache biedt hierdoor nadelen. Als bijvoorbeeld server A een verzoek van een specifieke gebruiker afwikkelt, zoekt deze server de opgevraagde content op in zijn cache. Doordat het alleen toegang heeft tot zijn eigen cache, kan het zijn dat server B bepaalde content sneller kan inladen dan server A. Alleen kan server A die content niet bereiken. Afhankelijk van de server die het verzoek van de gebruiker afwikkelt, kunnen de prestaties die gebruikers ervaren dan ook verschillen.
Wat zijn de voordelen van distributed cache?
Het gebruik van distributed cache voorkomt dit en levert daarmee belangrijke voordelen op. Bij distributed cache plaats je de cache op aparte resources, die voor alle reguliere servers aanspreekbaar zijn. De cache is verspreid over meerdere nodes in een cluster opgeslagen. Een cluster kan zelfs meerdere datacenters omvatten, wat geografische spreiding mogelijk maakt.
Synchronisatie staat hierbij centraal en zorgt dat alle nodes altijd exact dezelfde gecachte data bevatten. Dit betekent in de praktijk onder meer dat servers één en dezelfde cache gebruiken, ongeacht welke server een verzoek afhandelt of welke node de server aanspreekt voor het raadplegen van de cache. Een terugkerende gebruiker profiteert in alle gevallen van snellere laadtijden; de server die het verzoek afhandelt, is hierop niet van invloed.
Denk echter ook aan cache eviction, een term die het legen van de cache omschrijft als deze volloopt. Je stelt hierbij een zacht quotum in voor de cache. Overschrijdt de cache dit quotum? Dan maakt het cachesysteem automatisch ruimte beschikbaar door het verwijderen van gecachte gegevens. Het gebruik van distributed cache vereenvoudigt cache eviction-strategieën, aangezien je deze toepast op een reeks nodes die je continu synchroniseert. De gecachte data zijn dus overal gelijk, waardoor je één strategie kunt toepassing op het volledige cachesysteem.
Waarom kies je voor distributed cache?
De redenen waarvoor je voor distributed cache kunt kiezen zijn zeer divers. Zo vergroot distributed cache de schaalbaarheid van je cache-methode aanzienlijk. Krijgt je cachesysteem moeite met het afhandelen van het grote aantal verzoeken? Dan kun je de capaciteit eenvoudig uitbreiden door het toevoegen van extra nodes. Zo zorg je dat de prestaties die gebruikers ervaren op peil blijven, ondanks de groei die je webapplicatie doormaakt.
Ook helpt distributed cache bij bewaken van een hoge beschikbaarheid van je webapplicatie. De mogelijkheid tot het uitspreiden van nodes over een cluster en zelfs geografische regio’s biedt op dit vlak grote voordelen. Is een node bijvoorbeeld onbereikbaar? Dan kan je applicatie voor caching altijd terugvallen op andere nodes.
Denk echter ook aan fault tolerance. Hoewel je er uiteraard alles aan doet om fouten te voorkomen, is het maken van fouten menselijk. Gaat er onverhoopt iets mis? Dan kun je dankzij distributed cache altijd terugvallen op andere nodes en blijft je cachesysteem beschikbaar. Dit geef je de tijd en ruimte tot het oplossen van het probleem, zonder directe of grote impact op gebruikers.