Zero downtime deployment
Het is van cruciaal belang dat jouw webshop te allen tijde goed functioneert. Gedurende de ontwikkeling aan een shop, lopen er altijd wel kleine technische zaken anders dan verwacht. Want waar mensen werken, worden wel eens fouten gemaakt. Vooral cruciale functionaliteiten en processen die rechtstreeks impact kunnen hebben op de prestaties van je webshop, mogen geen (kleine) technische gebreken kennen. Een voorbeeld van zo’n cruciaal proces is de deployment.
Middels een deployment wordt de ontwikkelde code van het team op de productieomgeving geïmplementeerd. Als de deployment niet goed is ingericht, kan het inhouden dat je shop tijdelijk downtime ervaart. Downtime houdt in dat je webshop offline is en geen (eind)klant er meer bij kan. Dit wil je dus koste wat het kost vermijden, want bij downtime kun je de klok erop gelijk zetten dat je veel (verschillende vormen van) schade oploopt. Om dit te voorkomen zorgt Emico voor een Zero downtime deployment.
Wat is Zero downtime deployment?
Zero downtime deployment is het live zetten van een nieuwe versie van je webshop zonder downtime. Je kunt de nieuwste versie van je webshop live zetten zonder dat de bezoeker daarvan last heeft. Het deployment proces moet hiervoor echter wel goed ingericht worden. Heb je dit niet goed op orde dan loop je als organisatie serieuze risico’s en schaadt eventuele downtime je organisatie enorm.
- Downtime heeft directe impact op de omzet. Klanten kunnen niet meer bestellen of hun bestelling afmaken.
- Downtime gaat ten koste van de betrouwbaarheid van je webshop. De kans bestaat dat klanten de producten hierdoor liever elders bestellen.
- Google stelt downtime niet echt op prijs, aangezien ze de pagina’s dan niet kunnen indexeren en daardoor bestaat de kans op lagere rankings.
- Er is onvoldoende controle op de omgeving, je weet daarom dus niet precies hoe lang je webshop offline zal zijn.
Met Zero downtime deployment zorg je ervoor dat je in staat bent Continuous Integration (CI) en Continuous Delivery (CD) toe te passen. Dit houdt in dat je tijdens de sprint meerdere keren een deployment naar de productieomgeving kunt uitvoeren, zonder dat de (eind)klant hier hinder van ondervindt. Op deze manier zie je rechtstreeks de impact van de uitgevoerde werkzaamheden van onze volgevreten vedettes.
Hoe zorgt Emico voor Zero downtime deployment?
Er zijn een aantal zaken die wij doen om te voorkomen dat er onverhoopt downtime ontstaat tijdens deployments. Het is zeker niet volledig, maar hieronder sommen we wel een aantal onderdelen voor je op:
- Bij wijzigingen in GraphQL schema en andere API’s houden we, zover als het kan, rekening met backwards compatibiliteit. Velden die eventueel moeten verdwijnen markeren we deprecated en verwijderen we pas in toekomstige versie. Hierbij biedt de backend de frontend dus een upgrade pad en gaan er bij clients (die het oude GraphQL schema gebruiken) geen zaken stuk na een deployment.
- Door onze uitzonderlijk uitgebreide CI/CD straat worden alle aanpassingen automatisch gedeployed zonder handmatige acties.
- Tijdens deployments worden geautomatiseerde tests gedraaid. Dit voorkomt regressie en eventuele downtime die daaruit voortvloeit en ook zo waarborgen we dat we geen downtime hebben, omdat de meest essentiële onderdelen van te voren uitvoerig getest zijn.
- We controleren altijd de configuraties voordat we NginX herstarten. Als we NginX dan herstarten zorgen we ervoor dat we alle actieve requests eerst netjes afhandelen alvorens de service herstart wordt. Dit noem je ook wel een NginX graceful reload.
- Als er geen breaking changes binnen de Magento 2 modules zijn gedaan serveren we tijdens de deployment nog steeds een werkende variant van de Magento 2 webshop uit, hierdoor ondersteunen we blue/green deployments.
- Bij breaking changes zullen wij wel downtime hebben, maar voor ieder zijn beeldvorming 99% van de deploys bevatten geen breaking changes, alleen bij bepaalde database mutaties.
- Na iedere deployment bouwt Magento on the fly het GraphQL schema opnieuw op. Dit zorgt voor zeer trage initiële responses, en voor locks als meerdere gebruikers dit gelijktijdig gaan initiëren. Emico heeft hiervoor een module ontwikkeld zodat het volledige gecompileerde GraphQL schema in een aparte cache (ook wel Second Level Cache) wordt weggeschreven. Na een deploy wordt via een achtergrondproces het schema opnieuw gegenereerd en in deze Second Level Cache overschreven. Alle requests, dus normale gebruikers, halen het schema altijd uit deze Second Level Cache, waardoor deze geen hinder en vertraging ondervinden.
Veel vakjargon, maar het komt erop neer dat je de nieuwste versie van je webshop live kunt zetten zonder dat de bezoeker daarvan last heeft. Het deployment proces moet hiervoor echter wel goed ingericht worden. Heb je dit niet goed op orde dan loop je als organisatie serieuze risico’s en schaadt eventuele downtime jouw organisatie enorm.
Gelukkig is er geen reden om deze stress te ervaren als je shop is ontwikkeld door Emico, aangezien wij Zero downtime deployment volledig hebben omarmd.