Een nog snellere WordPress website in de cloud
In mijn vorige artikel in deze reeks heb ik je laten zien hoe je als ‘PowerUser’ een snellere WordPress of WooCommerce website kan hebben door deze in de cloud te hosten. Toch kan het zo zijn dat zelfs indien je je site in de cloud hebt gehost, deze onvoldoende snel is door de grote hoeveelheden verkeer die je krijgt. Load balancing is dan een mogelijke oplossing.
Mooi, maar wat is dan load balancing… en hoe krijg ik dat voor elkaar?
Wanneer ik op een rustige dag boodschappen doe bij Plus of Albert Heijn, dan zie ik een hele rij kassa’s staan, waarvan er soms maar één of twee in gebruik zijn. En dat spreekt natuurlijk voor zich. In een rustige periode laat je geen dure kassières achter de kassa zitten, terwijl er niemand is om iets te kopen. Dat doe je alleen in de spits.
Op jouw website heb je waarschijnlijk ook perioden dat het drukker zal zijn, en andere perioden waarvan je al weet, dat het stukken rustiger is. Wanneer je bijvoorbeeld een goed lopende webwinkel hebt, dan schat ik zo in, dat in december het bezoek aan je website minimaal een factor 3 of 4 groter zal zijn, dan in de rest van de maanden van het jaar. Ik heb zelfs klanten, die in december evenveel bezoek hebben als in de overige maanden.
Om je klanten niet teleur te stellen -en vooral om geen omzet mis te lopen- zou dan eigenlijk de capaciteit voor je webserver af moeten stemmen op het te verwachten sitebezoek in december. Maar dat is een groot kapitaalverlies. Dat moet anders kunnen.
‘Slapende servers wakker maken’.
Het mooie van Amazon web services is dat je ‘instanties’ (virtuele servers) kan hebben waarvoor je zolang ze niet actief zijn ook niet voor hoeft te betalen. Heb je ineens extra capaciteit nodig, dan schakel je er gewoon een server bij. Of meerdere natuurlijk.
Dat klinkt natuurlijk allemaal mooi en aardig. Maar wat nu indien jij op ‘mijngeweldigewebwinkel.nl’ je producten verkoopt en je schakelt er een server bij? Daar komt natuurlijk niemand terecht. Of wel?
Load balancing… nummertjes trekken bij de bakker…
Wanneer je gebruik maakt van load balancing, dan stuur je mensen eigenlijk niet naar je server toe, maar naar een aparte host die niets anders doet, dan controleren welke servers er op dat moment vrij zijn. En ‘vrij’ moet je ruim zien, het is niet zo, dat die server zijn virtuele duimen staat te draaien, maar die server heeft op dat moment minder te doen dan de andere servers.
Doordat de ‘last’ evenredig verdeeld wordt over meerdere servers doen één server maar een fractie van wat hij anders zou moeten doen. Je kan op deze manier door bijvoorbeeld 4 servers in te zetten er voor zorgen, dat de bezettingsgraad van je server tot 25% daalt. Dit kan een enorme verbetering van je capaciteit zijn.
Maar laten we voor we al te vrolijk worden eerst eens kijken naar de nadelen.
Geïsoleerde winkeltjes…
Het makkelijkste voorbeeld om te laten zien waar dit fout gaat, is denk ik wel het voorbeeld van de webwinkel. Stel je voor. Ik heb in jouw winkel pas een product gekocht. Jouw load balancer heeft mij verteld, dat winkel 1 tijd voor mij had. De volgende dag kom ik terug en nu heeft winkel 2 tijd voor mij. Ik probeer in te loggen. Tot mijn grote schrik kent winkel 2 mij niet. Logisch natuurlijk, want alleen winkel 1 heeft mijn gegevens geregistreerd.
Het probleem waar we hier tegen aan lopen, is dat iedere kopie van de webwinkel zijn eigen database heeft. Wat we moeten doen is ervoor zorgen, dat alle instanties van de webwinkel verwijzen naar dezelfde database. Dit gaat prima wanneer je een WordPress webwinkel gebruikt, gebruik je andere webwinkelsoftware, dan zal je mogelijk het één en ander eerst moeten onderzoeken.
Enkele scenario’s
In het voorbeeld hierboven hebben we een heel duidelijk scenario besproken. Omdat je periodiek pieken in je dataverkeer hebt wil je deze pieken zo goed mogelijk opvangen. Er zijn zo echter diverse scenario’s denkbaar die -al dan niet gecombineerd- goede redenen kunnen zijn om aan load balancing te willen doen.
Verdelen van de werklast
Het eerste voorbeeld is natuurlijk het verdelen van de werklast. Veel mensen denken dat het ‘bijprikken’ van meer geheugen of het gebruik van snellere disks of processors de oplossing is voor een traag functionerende server. Dit kan een goede oplossing zijn, vooral wanneer met slechts een paar bezoekers je site al niet vooruit te branden is. PHP en daarmee WordPress heeft een bepaald minimum geheugen nodig om fatsoenlijk te kunnen functioneren. En aangezien WordPress erg disk-intensief is (Eén WordPress pagina is het gevolg van vele lees acties in de database), is een SSD disk tegenwoordig beslist geen overbodige luxe.
Maar op een gegeven moment wordt het upgraden van je hardware duurder dan het bijplaatsen van een tweede server. Bij een hoog (periodiek) bezoekersaantal kan het verdelen van het verkeer betere resultaten opleveren, dan het bijprikken van duurdere hardware. En vaak is het nog goedkoper ook.
Het verkeer geografisch regelen
Heb je een website die door bezoekers over de hele wereld wordt bezocht, dan kan je enorme performance verbeteringen krijgen, indien je je verkeer ‘regionaal regelt’. Laten we eerst eens naar een kinderlijk eenvoudig voorbeeld kijken. Ik heb een website met bezoekers uit de USA, Europa en Australië. Hoe dan ook, wanneer ik mijn server in één van die landen heb staan, zullen de bitjes en de bijtjes op de andere continenten door relatief trage onder-oceaanse kabels moeten kruipen. En dat gaat trager.
Een oplossing is om op ieder continent minimaal één instantie van mijn WordPress site te plaatsen. Wanneer ik bovendien CloudFront gebruik om mijn media te distribueren, heb ik een aardige oplossing voor mijn intercontinentaal performance probleem te pakken.
Verkeerspieken in bepaalde perioden
En een derde reden om met load balancing te werken is om dat het je toestaat periodiek meer capaciteit bij te schakelen. Heb je in december net zoveel bezoekers als in de andere maanden bij elkaar? Niets let je om 12 instanties van je website aan te maken, waarvan er 11 gedurende 11 maanden per jaar in diepe rust verkeren. Pas wanneer je verwacht dat deze extra capaciteit extra omzet op zal leveren, gaat dit je ook extra kosten. Klinkt goed nietwaar?
Combineren
Natuurlijk kan je allerlei combinaties van bovengenoemde scenario’s bedenken. Heb je niet genoeg aan je regionale instanties, dan kan je al naar gelang je meer verkeer hebt, in bepaalde regio’s extra instanties plaatsen. Bijvoorbeeld 4 voor de USA, 2 voor Europa en 1 voor Australië. Of heb je in de USA met ‘Black Friday’ een enorme verkeerspiek, maar nergens anders? Wat let je om het aantal instanties in de USA te verdubbelen?
Single point of failure
In de hierboven besproken opzet heb je één probleem opgelost. Dat van de performance. Een andere reden waarom load balancers vaak worden ingezet blijft bestaan. Drie (of meer) instanties van WordPress verwijzen naar één en dezelfde database. Valt om de één of andere reden één instantie uit, dan zal de load balancer het verkeer over de overgebleven instanties verdelen. Maar valt de database uit, dan heb je een serieuzer probleem. Hier heb je er maar één van.
Gelukkig is het ook mogelijk de database in een ‘fault tolerant’ configuratie op te zetten. Je kan bij Amazon RDS, de database services die Amazon Web Services biedt, namelijk kiezen voor een zogenaamde ‘Multi AZ’ database. Jouw database is dan niet één, maar minimaal twee databases, die in verschillende Availability Zones staan opgesteld.
Ten slotte
Klikt load balancing je al mooi in de oren? Dan moet je zeker het volgende artikel over ‘Automatic scaling’ ook lezen. We gaan dan kijken, hoe je WordPress website zelf gaat bepalen hoeveel capaciteit hij op dat moment nodig heeft.
Bovendien gaan we ook eens kijken, hoe we het één en ander het voordeligst kunnen implementeren. Mis dit artikel niet!
Hulp nodig bij het opzetten? Via de WordXPression Support Strippenkaart krijg je alle ondersteuning die je nodig hebt.
Dit blogartikel geeft een antwoord op de volgende vragen:
- Hoe krijg ik een high performance WordPress website?
- Hoe maak ik WordPress sneller?
- Op welke manier maak ik mijn WooCommerce webwinkel sneller?
- Kan ik WordPress gebruiken met load balancing?