Wat zijn implementatiepatronen?

Voltooid

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 geen soepele manier om de functies uit te rollen nadat ze de OK hebben opgegeven. 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 met schrijven op het whiteboard.

Hier volgen de mogelijkheden die we moeten overwegen:

  • Blauwgroene implementatie
  • Canary releases
  • Wisselknoppen voor functies
  • Donkere lanceringen
  • A/B-tests
  • Implementatie van progressieve blootstelling

Laten we kort elk patroon bespreken.

Blauw-groene implementaties

Een blauwgroene implementatie vermindert risico's en downtime door twee identieke omgevingen uit te voeren. Deze omgevingen worden blauw en groen genoemd. 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.

Diagram of a load balancer distributing traffic in a blue-green deployment.

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

Een canary-release is een manier om potentiële problemen vroegtijdig 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.

Diagram of a load balancer sending traffic to a canary version.

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 de canary-release stabiel is, verplaatsen we deze naar de werkelijke productieomgeving.

Wisselknoppen voor functies

Gebruik functieknoppen om tijdens runtime een schakeloptie te spiegelen . 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.

Diagram of a coded if statement for an on-off feature.

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 laten leven voor iedereen.

Maar dit implementatiepatroon kan Mara en mij meer helpen dan iemand anders. Een groot voordeel van het wisselpatroon van de functie is dat het ons helpt te veel vertakking te voorkomen. Het samenvoegen van vertakkingen kan pijnlijk zijn.

Donkere lanceringen

Een donkere lancering is vergelijkbaar met een canary-release of het schakelen tussen een functie-wisselknop. 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.

Diagram of a load balancer sending traffic to the new feature.

Die gebruikers weten niet dat ze de functie voor ons testen. We markeren de nieuwe functie niet eens. 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-tests

A/B-testen vergelijkt twee versies van een webpagina of app om te bepalen welke beter presteert. A/B testen lijkt op een klassiek experiment.

Diagram of two apps and their analytics.

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 met progressieve blootstelling wordt ook wel implementatie op basis van rings 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 het canary stadium. De canary release zelf brengt een fase vrij om het effect te meten. Het toevoegen van een andere ring is in feite hetzelfde idee.

Diagram of a progression of larger groups.

In een ringimplementatie implementeren we eerst wijzigingen in 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 aan het praten?

Tim: Functie-wisselknoppen hebben betrekking op een wijziging in de werking van u en Andy. 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 implementatiesites?

Andy: Omdat we Azure-app Service gebruiken, kunnen we profiteren van implementatiesites. 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 test kunnen we een implementatiesite toevoegen aan onze faseringsomgeving .

In plaats van een load balancer of router in te stellen, kunnen we gewoon een tweede site toevoegen aan het App Service-exemplaar dat we in onze bestaande faseringsomgeving gebruiken. We kunnen de primaire sleuf blauw en de secundaire sleuf groen noemen.

Diagram of applications swapping IP addresses.

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 sites.

Tim: Dat vind ik leuk! U kunt deze variant van een blauw-groene 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

Functievlagmen waren een van de releasefrequentiemethoden 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.

Met functievlagmen, die soms functieknoppen worden genoemd, 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 hoofdvertakking 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.

Kennis testen

1.

Het marketingteam heeft u gevraagd om een banner toe te voegen aan de website van uw bedrijf. Ze hebben twee versies van deze banner. Ze willen weten welke versie meer klikthroughs produceert. Welk implementatiepatroon kunt u gebruiken om het marketingteam te helpen de betere versie te identificeren?

2.

U hebt een nieuwe functie voor uw website en u bent klaar om deze te implementeren. Deze functie is echter riskant omdat deze de manier wijzigt waarop uw gebruikers met de site werken. Welke implementatiepatronen kunt u gebruiken om een kleine groep early adopters die zich hebben aangemeld om nieuwe functies te zien?

3.

U weet niet zeker hoe uw gebruikers reageren op uw nieuwe functie. U wilt uw functie vrijgeven aan een klein, willekeurig voorbeeld van gebruikers om te zien hoe ze reageren. Welk implementatiepatroon kunt u gebruiken?