Wat zijn implementatiepatronen?
Een implementatiepatroon is een geautomatiseerde manier om nieuwe toepassingsfuncties soepel uit te rollen voor uw gebruikers. Met een geschikt implementatiepatroon kunt u downtime minimaliseren. Met sommige patronen kunt u ook geleidelijk nieuwe functies implementeren. Op die manier kunt u nieuwe functies valideren met bepaalde gebruikers voordat u deze functies beschikbaar maakt voor iedereen.
In deze sectie leert u meer over enkele algemene implementatiepatronen. U leert ook hoe Azure App Service helpt bij het implementeren van het patroon dat het Tailspin-team kiest.
Ochtendvergadering
Het Tailspin-team voelt zich goed. Hun pijplijn heeft hun proces versneld. Het team heeft een ontwikkelomgeving waar ze de web-app kunnen integreren met een database. Zowel Tim als Amita hebben graag geautomatiseerde tests die hun werk vereenvoudigen. Over het algemeen zien ze minder vertragingen en minder bugs.
Maar er is, zoals altijd, een probleem. Laten we invallen bij de teamvergadering, waar Tim praat.
Tim: Het is zo moeilijk om iedereen gelukkig te houden. Irwin denkt dat het te lang duurt om nieuwe functies vrij te geven. Ik kan niets doen totdat het management de release goedkeurt. Op dit moment is er momenteel geen soepele manier om de functies uit te rollen nadat ze hun akkoord hebben gegeven. Het proces is niet alleen lang, maar rommelig. Het is handmatig en er is downtime. Het hele proces kan vijf dagen duren. Ik weet dat dat te lang is, maar wat moet ik doen? Misschien als ik gewoon meer koffie drink, komt de oplossing naar me toe.
Andy: Koffie is essentieel voor effectieve probleemoplossing, ongetwijfeld.
Ik denk dat de oplossing die we nodig hebben een goed implementatiepatroon is. Een implementatiepatroon is een geautomatiseerde manier om de cutover uit te voeren. Zo verplaatsen we de software van de laatste preproductiefase naar live productie.
Het kiezen van het juiste patroon helpt u zeker door downtime te minimaliseren. Een ander voordeel van een implementatiepatroon is dat het ons de kans biedt om tests uit te voeren die echt in productie moeten plaatsvinden.
Andy begint te schrijven op het whiteboard.
Hier volgen de mogelijkheden die we moeten overwegen:
- Blauwgroene implementatie
- Kanaarversies
- Wisselknoppen voor functies
- Donkere lanceringen
- A/B-testen
- Implementatie van progressieve blootstelling
Laten we kort elk patroon bespreken.
Blauwgroene implementaties
Een blauwgroene implementatie vermindert risico's en downtime door twee identieke omgevingen uit te voeren. Deze omgevingen worden blauwe en groenegenoemd. Op elk moment is slechts één van de omgevingen live. Een blauwgroene implementatie omvat doorgaans een router of load balancer waarmee u de verkeersstroom kunt beheren.
Stel dat blauw live is. Als we een nieuwe release voorbereiden, doen we onze laatste tests in de groene omgeving. Nadat de software in de groene omgeving werkt, schakelen we de router zo over dat alle binnenkomende aanvragen naar de groene omgeving gaan.
Blauwgroene implementatie biedt ons ook een snelle manier om een terugdraaiactie uit te voeren. Als er iets misgaat in de groene omgeving, schakelen we de router terug naar de blauwe omgeving.
Canary-releases (gefaseerde uitrol)
Een canary release is een manier om potentiële problemen vroeg te identificeren zonder alle gebruikers bloot te stellen aan het probleem. Het idee is dat we een nieuwe functie beschikbaar maken voor slechts een kleine subset van gebruikers voordat we deze beschikbaar maken voor iedereen.
In een canary-release controleren we wat er gebeurt wanneer we de functie vrijgeven. Als de release problemen heeft, passen we een oplossing toe. Nadat bekend is dat de canary-release stabiel is, verplaatsen we deze naar de werkelijke productieomgeving.
Wisselknoppen voor functies
Gebruik feature toggles om tijdens uitvoeringstijd een schakelaar om te zetten. We kunnen nieuwe software implementeren zonder dat er andere nieuwe of gewijzigde functionaliteit beschikbaar is voor onze gebruikers.
In dit implementatiepatroon bouwen Mara en ik nieuwe functies achter een wisselknop. Wanneer er een release plaatsvindt, is de functie 'uitgeschakeld' zodat deze geen invloed heeft op de productiesoftware. Afhankelijk van hoe we de wisselknop configureren, kunnen we de schakelaar omdraaien naar 'aan' en de functie weergeven zoals we dat willen.
We kunnen de functie bijvoorbeeld eerst beschikbaar maken voor een paar gebruikers om te zien hoe ze reageren. Dit willekeurige voorbeeld van gebruikers ziet de functie. Of we kunnen de functie gewoon voor iedereen activeren.
Maar dit implementatiepatroon kan Mara en mij meer helpen dan iemand anders. Een groot voordeel van het functie-toggles-patroon is dat het ons helpt om te veel aftakkingen te voorkomen. Het samenvoegen van branches kan pijnlijk zijn.
Donkere lanceringen
Een dark launch lijkt op een canary release of het schakelen van een feature toggle. In plaats van een nieuwe functie beschikbaar te maken voor iedereen, brengen we in een donkere lancering de functie vrij aan een kleine groep gebruikers.
Die gebruikers weten niet dat ze de functie voor ons testen. We benadrukken de nieuwe functie niet eens aan hen. Daarom wordt het een donkere lancering genoemd. De software wordt geleidelijk of onopvallend vrijgegeven aan gebruikers, zodat we feedback kunnen krijgen en de prestaties kunnen testen.
A/B-testen
A/B test vergelijkt twee versies van een webpagina of app om te bepalen welke beter presteert. A/B testen lijkt op een klassiek experiment.
In A/B-tests laten we gebruikers willekeurig twee of meer variaties van een pagina zien. Vervolgens gebruiken we statistische analyse om te bepalen welke variatie beter presteert voor onze doelen.
Implementatie van progressieve blootstelling
implementatie progressieve blootstelling wordt ook wel ringimplementatie genoemd. Het is een andere manier om te beperken hoe wijzigingen van invloed zijn op gebruikers terwijl u ervoor zorgt dat deze wijzigingen geldig zijn in een productieomgeving.
Ringen zijn in feite een uitbreiding van de canary-fase. De canary release zelf brengt een fase vrij om het effect te meten. Het toevoegen van een andere ring is in feite hetzelfde idee.
In een ringgebaseerde implementatie, implementeren we eerst wijzigingen naar risicotolerante klanten. Vervolgens implementeren we geleidelijk aan een grotere groep klanten.
De blauwgroene implementatie implementeren
Andy kijkt naar Tim.
Andy: Dat is veel, weet ik. Wil je er even over nadenken? Of jij en ik kunnen ...
Tim: Blauwgroen.
Iedereen in de kamer lacht.
Mara: Is dat de koffie die praat?
Tim: Functie-wisselknoppen brengen een verandering met zich mee in hoe u en Andy werken. Laten we één ding tegelijk doen. Voor de methoden die een functie geleidelijk beschikbaar maken, zijn statistische analyses of functieknoppen vereist.
Een blauwgroene implementatie is iets wat ik kan beheren. Het schakelen tussen een router is eenvoudig. Het is eenvoudig en klinkt veilig. En in een blauwgroene implementatie heeft het beheer een omgeving om te evalueren. Wanneer ze de OK geven, kunnen we eenvoudig overschakelen. Laten we beginnen.
Dus de vraag is, hoe implementeren we een blauwgroene implementatie in onze pijplijn?
Wat zijn implementatiesleuven?
Andy: Omdat we Azure App Service gebruiken, kunnen we profiteren van implementatieslots. Implementatiesites voeren apps uit die hun eigen hostnamen hebben.
Ik weet dat we nog niet klaar zijn om de Space Game website te implementeren in productie als onderdeel van de geautomatiseerde pijplijn. Maar als een test kunnen we een implementatieslot toevoegen aan onze faseringsomgeving.
In plaats van een load balancer of router in te stellen, kunnen we gewoon een tweede slot toevoegen aan de App Service-exemplaar dat we gebruiken in onze bestaande stagingomgeving. We kunnen de primaire sleuf als blauw en de secundaire sleuf als groennoemen.
Op deze manier kunnen we nieuwe functies implementeren zonder uitvaltijd. We wisselen een toepassing en de configuratie tussen de twee implementatiesites. In principe wisselen we de IP-adressen van de twee sleuven.
Tim: ik vind dat leuk! U kunt deze variatie van een blauwgroene implementatie een implementatie zonder downtime noemen.
Andy: Geweldig! Tim en ik werken aan het implementeren van dit implementatiepatroon. We kunnen allemaal later vergaderen om de resultaten te bekijken.
Aanbevelingen voor het gebruik van functievlagmen
Feature flags waren een van de methoden met betrekking tot de releasefrequentie die door het team werden overwogen. Het team heeft besloten geen functievlagmen te gebruiken, maar veel mensen hebben ze nuttig gevonden. Deze sectie bevat meer informatie over functievlagmen.
functievlagmen, soms functie in-/uitgeschakeld, kunt u wijzigen hoe een systeem werkt zonder de code te wijzigen. Met deze vlaggen kunt u nieuwe code naar uw centrale ontwikkelingsbranch pushen en de code laten implementeren, maar niet noodzakelijkerwijs functioneel. De vlaggen worden meestal geïmplementeerd als de waarde van variabelen die voorwaardelijke logica beheren.
Stel dat uw team werkt in de centrale ontwikkelingsbranch van een banktoepassing. U hebt besloten om al het werk in de hoofdtak te doen om rommelige samenvoegbewerkingen later te voorkomen. Maar je hebt een probleem. U wijzigt de renteberekeningen aanzienlijk en mensen zijn elke dag afhankelijk van die code. Erger nog, het duurt weken voordat de wijzigingen zijn voltooid. U kunt de hoofdcode zo lang niet laten breken.
In dit scenario kan een functievlag een goede oplossing zijn. U kunt de code wijzigen zodat gebruikers die niet over de functievlag beschikken, de oorspronkelijke renteberekeningscode kunnen blijven gebruiken. Ondertussen heeft uw team de functievlag ingesteld, zodat ze de code kunnen zien die ze wijzigen.
Een ander type functievlag is een releasevlag. Stel dat u, nadat u het werk aan de renteberekeningscode hebt voltooid, deze wilt uitproberen voordat u het openbaar vrijgeeft. U hebt een groep gebruikers die goed in staat zijn om met nieuwe code en mogelijke problemen om te gaan. U laat ze eerst de functie uitproberen. U wijzigt de configuratie zodat ze ook de functievlag hebben ingesteld en de nieuwe code kunnen testen. Als er problemen optreden, kunt u de vlag snel uitschakelen.