Tradisjonelle «big bang»-tilnærminger til programvareutvikling er inkompatible med den høye fleksibiliteten, smidigheten og kontinuerlige utrullingskravene til dagens sky- og DevOps-programvareplattformer.
Det er bare ikke nok å utarbeide en sjekkliste over manuelle trinn som skal utføres under distribusjon av produksjonsutgivelsen. Hvis du gjør det, er du ikke veldig smidig, og du er heller ikke en skikkelig DevOps.
Innholdsfortegnelse
Blue-Green Deployment: En oversikt
Blue-Green-distribusjon er en tilnærming til programvaredistribusjon som reduserer nedetid og risiko for nye programvareversjoner ved å lage to identiske miljøer: aktiv (blå) og inaktiv (grønn).
Det aktive miljøet er der den gjeldende versjonen av programvaren kjører, og brukerne genererer produksjonstrafikk. Det inaktive miljøet er der den nye versjonen av programvaren distribueres og testes.
Når den nye versjonen er testet og klar, byttes trafikken fra det aktive miljøet til det inaktive miljøet, noe som gjør det til det nye aktive miljøet. Du kan gjenta denne prosessen etter behov.
Kilde: docs.aws.amazon.com
DevOps-kontekst
Blue-Green-distribusjon passer godt med DevOps-tankegangen og -prosessene fordi den støtter kontinuerlig levering og distribusjon av programvare samtidig som den minimerer nedetid for produksjonsbrukere og eliminerer risikoen for feil i produksjonsutgivelsen.
Å ha to identiske miljøer gjør det mulig å teste og distribuere nye versjoner av programvare uten å påvirke gjeldende produksjonsmiljø. Dette betyr raskere og hyppigere utgivelser, som er et sentralt aspekt ved DevOps.
I tillegg er muligheten til å bytte trafikk mellom miljøer raskt en primær forutsetning for rask tilbakerulling ved problemer, noe som også er viktig i et DevOps-miljø.
Nøkkelprinsipper for blågrønn distribusjon
#1. To identiske miljøer
Blue-Green-distribusjon krever at du oppretter to identiske miljøer. Det betyr identisk fra data- og prosesssynspunkt. Den ene er aktiv (blå), og den andre er inaktiv (grønn).
Det blå miljøet er der produksjonsbrukere kjører sine daglige prosesser. Det grønne miljøet er alltid synkronisert med det blå, men testerne kjører testsakene sine der. Selv om dette miljøet ikke er produksjonen, kjører du testene under virkelige forhold ettersom det er et produksjonslignende miljø.
#2. Trafikkbryter
Når den nye versjonen av programvaren er testet og klar, byttes trafikken fra det aktive miljøet til det inaktive miljøet, noe som gjør det til det nye aktive miljøet.
Bryteren er øyeblikkelig. All utplasseringen er nå en saga blott. Det er ikke noe nedetidsvindu. Brukere trenger ikke å gjøre noe for å nå det nye miljøet. De omdirigeres automatisk, og alle samtidig.
Kilde: aws.amazon.com
#3. Rask tilbakerulling
Muligheten til å bytte trafikk mellom miljøer raskt betyr også rask tilbakerulling ved problemer. Dette sikrer minimal nedetid, og applikasjonen forblir svært tilgjengelig.
Hvis noe går galt med det grønne miljøet, vil alle brukere umiddelbart bytte tilbake til det stabile originale blå miljøet uten uklarhet.
#4. Automatisert testing
Automatisert testing er et nøkkelaspekt ved Blue-Green-distribusjon. Den sikrer at den nye versjonen av programvaren blir grundig testet før den distribueres til det aktive miljøet.
Hvis du ikke har en betydelig mengde av testene automatisert i systemene dine (inkludert i det minste enhetstester, funksjonstester og regresjonstester), så har det sannsynligvis ikke engang mye mening å tenke på å implementere Blue-Green-implementering.
Mangelen på automatiserte tester vil bremse deg dramatisk. Tiden som kreves for å teste det nye (grønne) miljøet vil være så lang at når du vil være i stand til å bytte til det grønne miljøet, vil det allerede være «for gammelt» sett fra programvareutviklingens livssyklus.
#5. Kontinuerlig levering
Blue-Green distribusjon er en del av en kontinuerlig leveringspipeline, som til syvende og sist betyr raskere og hyppigere utgivelser av programvare i produksjon.
Du kan bytte så snart du er klar til å teste ny programvareversjon på det grønne miljøet. Siden distribusjonen allerede var ferdig og du bare trenger å gjøre selve trafikkbyttet, er det så raskt at du kan gjøre dette hver dag. Forutsatt at du er rask også i testaktiviteter, selvsagt.
Typisk livssyklus
Plattformen som kjører Blue-Green-distribusjon har sin egen spesifikke livssyklus av trinn og prosesser som skal kjøres. Dette er hva det vanligvis består av:
Implementering av CI/CD pipelines
Implementering av Blue-Green-distribusjon i en DevOps CI/CD-pipeline skal være en naturlig prosess.
En sterk forutsetning er at du allerede har de to identiske miljøene på plass. Siden dette skal være en automatisert prosess, kan du bruke infrastruktur som et kodeverktøy som f.eks AWS CloudFormation eller til og med skyagnostiker Terraform skript for å lage/gjenskape/oppdatere miljøene for deg innenfor automatiserte pipelines.
Når du har dette, er det et relativt enkelt skritt mot å lage en helautomatisert distribusjonsprosess. Du gjenbruker bare de allerede eksisterende rørledningene for å skape det blå og grønne miljøet. Denne gangen må du imidlertid inkludere testprosesser i pipelinen.
Trafikkbytteprosessen kan du automatisere med verktøy som AWS Elastic Load Balancer eller NGINX. Dette innebærer å oppdatere lastbalanseren eller DNS-innstillingene for å dirigere trafikk til det grønne miljøet når den nye versjonen av programvaren er testet og klar.
Den neste brikken i puslespillet er overvåking. For det, bruk verktøy som AWS CloudWatch, New Relikvieeller Datadog.
Til slutt, gjenbruk eksisterende rørledninger selv for dekommisjonering av det gamle blå miljøet. Det er opp til deg om du først kjører destroy for alle tjenestene og komponentene før du gjenskaper dem fra bunnen av, eller alternativt kan du bare oppdatere skript for hver tjeneste i kjeden. Vanligvis er ødelegge og gjenskape et tryggere alternativ, ettersom med oppdateringen har du mye flere hjørnesaker å vurdere.
Beste praksis for blågrønn distribusjon
Nysgjerrig på hvordan du kan utnytte Blue-Green distribusjon best mulig? Her er noen av tipsene som kommer fra praksisen.
Ha en solid databasemigreringsstrategi
Når du distribuerer en ny versjon av programvaren, er det viktig å sørge for at databaseskjemaet er riktig oppdatert. Bruk en databasemigreringsstrategi som Flyvei eller Liquibase for å administrere databaseskjemaendringer.
Bruk et kanariøyeanalyseverktøy
Selv om Canary-distribusjon er en alternativ tilnærming, kan du fortsatt bruke noen av teknikkene for å perfeksjonere din Blue-Green-distribusjon.
Bruk et kanari-analyseverktøy som f.eks Kayenta eller Spinnaker å analysere ytelsen til den nye versjonen av programvaren i et virkelig miljø. Dette innebærer å sammenligne ytelsen til den nye versjonen av programvaren med ytelsen til den gamle versjonen av programvaren.
Bruk en funksjonsvekslerramme som f.eks Togglz for å aktivere eller deaktivere funksjoner i den nye versjonen av programvaren. Dette gir mulighet for en gradvis utrulling av nye funksjoner og muliggjør rask tilbakerulling om nødvendig.
Bruk en belastningsbalanser med helsesjekker
Bruk en belastningsbalanser som AWS Elastic Load Balancer eller NGINX med helsesjekker for å sikre at trafikken kun ledes til sunne tilfeller. Dette sikrer at applikasjonen forblir svært tilgjengelig og at nedetiden minimeres.
Bruk en tilbakeføringsplan med automatisk tilbakeføring
Ha en tilbakeføringsplan på plass i tilfelle problemer, og automatiser tilbakerullingsprosessen ved å bruke et verktøy som AWS CodeDeploy eller Octopus Deploy. Dette sikrer at nedetid minimeres og at applikasjonen forblir svært tilgjengelig.
Dette gjelder for det meste det grønne miljøet når du oppdager et betydelig problem med den nye versjonen.
Du trenger ikke en tilbakestillingsplan for det blå miljøet, siden denne forblir uberørt av bryteren, og du kan gå tilbake til dette stabile miljøet når det trengs og umiddelbart.
Utfordringer med Blue-Green Deployment
Implementering av Blue-Green-distribusjon kan by på noen utfordringer for utviklingsteam. Her er noen typiske utfordringer:
Forskjellen mellom Blue-Green og Canary Deployment
Mens forskjellen til tradisjonelle distribusjonsprosesser er ganske åpenbar (det er ikke to parallelle miljøer som kjører med forskjellige programvareversjoner i tradisjonelle distribusjonsprosesser), kan forskjellen til Canary-distribusjon være litt mer interessant.
Blå-grønn utplassering betyr to miljøer (blått og grønt). Men samtidig er de to miljøene hele tiden synkroniserte når det gjelder data. Når den nye versjonen er testet og ansett som klar, byttes trafikken fra det aktive miljøet til det inaktive miljøet, noe som gjør det til det nye aktive miljøet. Du bruker ikke tid på å distribuere ny kode, og det er ingen produksjonsstans involvert. Alle produksjonsbrukere jobber hele tiden på det aktive miljøet, og de legger ikke engang merke til bryteren.
Canary-distribusjon innebærer distribusjon av en ny versjon av programvaren til et lite undersett av brukere mens flertallet av brukere eller servere fortsetter å bruke den gjeldende versjonen. Dette er en gradvis distribusjon i stedet for en full bytte. Testere er, i dette tilfellet, direkte produksjonsbrukere, selv om bare en definert undergruppe av dem. Denne gruppen tester aktivt den nye versjonen med produksjonsprosesser, og når den endelig er stabil, vil den nye versjonen spre seg til resten av brukerne.
Så hvilken er bedre?
En konsulents svar «det kommer an på» passer best her, så slemt som det kan høres ut.
Hvis systemets prioritet er høy tilgjengelighet fremfor alt, vil blå-grønn distribusjon være ditt valg.
Hvis din sterke preferanse er ganske raskere tilbakemeldinger og en mer kontrollert (men tregere) utrulling av den nye systemversjonen, så har Canary-distribusjon fordeler fremfor blågrønn.
Det viktige er at begge er smidige nok til å anse seg selv som gode nok for seriøs DevOps-systemoppretting.
Kasusstudier
Netflix bruker Blue-Green-distribusjon for å distribuere nye versjoner av strømmetjenesten. Ved å bruke Blue-Green-distribusjon, kan Netflix distribuere nye versjoner av tjenesten uten å påvirke brukeropplevelsen. Faktisk bruker Netflix også Canary-distribusjon parallelt for andre tilfeller, så det er ikke urealistisk å kombinere ulike tilnærminger til DevOps-distribusjon under samme tak.
Amazon og Etsy bruker også Blue-Green-distribusjon for å distribuere nye versjoner av deres e-handelsplattform.
En annen sak er LinkedIn som bruker Blue-Green-distribusjon til å distribuere nye versjoner av sin sosiale nettverksplattform.
Sist, men ikke minst, bruker IBM Blue-Green-distribusjon til å distribuere nye versjoner av sin skyplattform.
Disse selskapene har vellykket implementert Blue-Green-distribusjon til plattforminfrastrukturen deres og fungerer som et godt eksempel for andre.
Siste ord
I likhet med Canary, streber Blue-Green-distribusjonen etter den beste optimaliseringen av dine allerede eksisterende smidige prosesser og metoder for å levere ny programvare jevnt på en slik måte at ingen noensinne vil legge merke til det i det hele tatt. Dette er det endelige målet for slike tilnærminger. Du leverer konstant og veldig ofte, men ingen vet om det, ingen legger merke til det, og til slutt er det ingen som bryr seg.
Det kan være litt frustrerende for utviklingsteamet at det ikke er noe sladder rundt selskapet om deres siste utgivelser. Men spør du meg, er dette akkurat den beste tjenesten du kan levere. Ingen snakker om det, men alle bruker det dag til dag.
Deretter kan du sjekke ut ofte stilte DevOps-intervjuspørsmål og svar.