Kanari-distribusjon er en metode innen programvareutvikling og -utrulling som innebærer en trinnvis lansering av nye funksjoner eller oppdateringer. Dette gjøres først til en begrenset gruppe brukere før det til slutt rulles ut til hele brukerbasen.
Dette innebærer at en ny versjon av programvaren utvikles og distribueres til en liten gruppe brukere, mens den eksisterende versjonen fortsatt er i bruk for resten. Utviklingsteamet følger nøye med på den nye versjonen for å sikre at den er stabil og fungerer som forventet.
Dersom alt går etter planen, blir den nye versjonen gradvis gjort tilgjengelig for flere brukere, helt til alle brukerne har tilgang. På denne måten reduserer teamet risikoen for å introdusere feil eller andre problemer som kan påvirke alle brukere samtidig.
Hovedmålet med kanari-distribusjon er å minimere risikoen ved å lansere nye funksjoner til en stor brukerbase. Ved å gradvis introdusere endringer, kan utviklerne overvåke ytelsen og stabiliteten til den nye versjonen. De kan også foreta nødvendige justeringer før den distribueres til alle brukere, noe som gjør overgangen til den nye versjonen mye mer smidig.
Grunnleggende prinsipper og fordeler
Kilde: martinfowler.com
De viktigste prinsippene for kanari-distribusjon inkluderer:
- Først distribueres den nye versjonen til en liten gruppe brukere, og deretter gradvis til flere over tid.
- Den nye versjonen overvåkes kontinuerlig for å sikre stabilitet og forventet ytelse.
- Dersom det oppstår problemer, gjøres en rask og enkel tilbakestilling til forrige versjon.
- Distribusjonsprosessen automatiseres så langt det lar seg gjøre, for å redusere risikoen for menneskelige feil.
Fordelene med kanari-distribusjon i DevOps-sammenheng er:
- Risikoen for å introdusere feil eller andre problemer som påvirker alle brukere samtidig reduseres ved gradvis utrulling.
- Utviklere får raskere tilbakemelding på den nye versjonen, og kan foreta nødvendige justeringer før full distribusjon.
- Ved å overvåke ytelse og stabilitet, kan utviklerne forsikre seg om at den nye versjonen møter de nødvendige kvalitetsstandardene før den lanseres for alle.
- Kanari-distribusjon bidrar til å øke tilliten til distribusjonsprosessen hos både utviklere og andre involverte, da risikoen for problemer som påvirker brukeropplevelsen reduseres.
Kanari-distribusjon basert på konsept og terminologi
Kilde: cncf.io
La oss se nærmere på den typiske livssyklusen for denne prosessen.
Det hele starter med «kanarifuglen», altså de «tidlige brukerne» av den nye versjonen. Parallelt eksisterer «baseline»-gruppen. Her finnes alle de andre brukerne som ikke er med i kanari-gruppen.
Etterhvert som kanari-brukerne bruker den nye versjonen, utvides kanari-utrullingen til flere brukere. Dette kalles «trafikkflytting». Kanari-gruppen vokser, mens baseline-gruppen reduseres. Systemet utfører dermed en gradvis utrulling.
Underveis registrerer overvåkingsprosessen all aktivitet og bruk, og genererer data som utviklerne trenger som tilbakemelding. Utviklerne reagerer deretter og fikser det som trengs, eller ruller tilbake til baseline dersom problemer ikke kan løses umiddelbart.
Automatiser alle overvåkings- og distribusjonsaktiviteter. Dette frigjør utviklerne til å fokusere på problemløsning.
Det kan hende at kanari-gruppen oppdager at noen funksjoner i den nye versjonen er dårlige, mens andre er gode. Utviklerne kan da markere de funksjonene som har problemer, og deaktivere dem fra distribusjonsprosessene.
Utviklerne holder øye med begge gruppene samtidig – kanari og baseline. Brukerne genererer A/B-testresultater, som viser ytelsen til det gamle og det nye systemet under de samme forholdene. Det kjøres også automatiske tester kontinuerlig på den nye versjonen for å sikre at kanari-gruppens «helsesjekk» er stabil.
Hvordan det skiller seg fra tradisjonelle distribusjonsstrategier
Etter å ha forstått livssyklusprosessen på et overordnet nivå, blir forskjellene mellom denne og de tradisjonelle distribusjonsprosessene ganske tydelige.
- Du distribuerer gradvis og med bedre kontroll, i stedet for å distribuere alt til alle på en gang og vente på problemer som påvirker hele systemet.
- Du begrenser risikoen for nye versjonsfeil til kun kanari-gruppen, i motsetning til å utsette alle for problemene samtidig.
- Du overvåker den nye versjonen før brukerne får den, i stedet for å overvåke etterpå og bruke tid og ressurser på å løse problemer som har oppstått.
- Du kan bestemme deg for å rulle tilbake før den nye versjonen er fullstendig distribuert til produksjon. Ved tradisjonell distribusjon planlegger man gjerne et nytt utrullingsvindu for å angre en produksjonsutrulling.
- Kanari-distribusjon tvinger deg til å investere i automatiserte verktøy og prosesser. Tradisjonelle strategier derimot nedprioriterer gjerne automatiseringsprosjekter.
CI/CD-pipelines i kanari-distribusjon
Kilde: aws.amazon.com
I en typisk CI/CD-pipeline bygges, testes og distribueres endringer automatisk til et testmiljø for videre testing før de går til produksjon. Dette er også en utmerket måte å implementere kanari-utrulling.
Når endringene er distribuert til testmiljøet og har bestått alle nødvendige tester, vil CI/CD-pipelinen automatisk distribuere kanari-versjonen til en liten gruppe brukere i produksjonsmiljøet.
Dersom noe går galt, kan man enkelt kjøre en ny pipeline for å rulle tilbake. Man kan også flagge problematiske funksjoner som da ikke vises i distribusjonsprosessen. Alt dette skjer automatisk, og du trenger ikke bekymre deg for det.
Siden kanari-versjonen inneholder automatiserte helsesjekktester, er disse integrert i de grunnleggende funksjonene til CI/CD-pipelinen. De er en nødvendig del av enhver god CI/CD-pipeline.
Arbeidsflyt og faser i kanari-distribusjon
Oppsummert er dette den vanlige arbeidsflyten for en typisk kanari-distribusjon:
#1. Planlegging og forberedelse
I denne fasen planlegger og forbereder utviklingsteamet kanari-utrullingen. Dette inkluderer å identifisere endringene eller oppdateringene som skal gjøres, lage en ny versjon av programvaren og definere metrikkene og helsesjekkene som skal brukes til å overvåke ytelsen til den nye versjonen. Teamet identifiserer også undergruppen av brukere som skal motta den nye versjonen først, og definerer utrullingsplanen.
#2. Implementering av trafikkdirigering og overvåking
Den nye versjonen av programvaren distribueres til brukergruppen som er valgt i planleggingsfasen. Trafikkdirigering implementeres for å lede en del av brukertrafikken til den nye versjonen, mens den gamle versjonen fortsatt er i bruk for resten av brukerne. Ytelsen og stabiliteten til den nye versjonen overvåkes nøye ved hjelp av metrikker og helsesjekker for å forsikre seg om at den fungerer som forventet.
#3. Analysere og evaluere implementeringsytelsen
Ytelsen til den nye versjonen analyseres og evalueres basert på metrikkene og helsesjekkene som ble definert i planleggingsfasen. Hvis den nye versjonen fungerer bra, økes utrullingen gradvis til flere brukere over tid. Hvis det oppstår problemer med den nye versjonen, kan utrullingen raskt rulles tilbake til forrige versjon.
#4. Fremme eller rulle tilbake distribusjonen
Utviklingsteamet bestemmer om de skal fremme den nye versjonen til hele brukerbasen, eller rulle tilbake til forrige versjon. Hvis den nye versjonen fungerer godt og oppfyller de nødvendige kvalitetsstandardene, bør den lanseres for alle. Hvis det oppstår problemer med den nye versjonen, gjøres en rask og enkel tilbakestilling til forrige versjon.
Kilde: aws.amazon.com
Anbefalte fremgangsmåter og strategier
Når du implementerer kanari-distribusjon, bør du starte med å definere klare mål og hvordan suksess skal se ut. Dette kan inkludere ytelsesmetrikker, tilbakemeldinger fra brukere og forretningseffekt.
Velg et lite utvalg av brukere for å teste den nye kanari-versjonen. En stor gruppe i starten er ikke gunstig. Du bør være så fleksibel som mulig, spesielt i begynnelsen.
Som nevnt tidligere, overvåk ytelsen og stabiliteten til den nye versjonen ved hjelp av metrikker og helsesjekker. Reager umiddelbart hvis du ser noe mistenkelig. Det er bedre å overreagere enn å underreagere når du ruller ut gradvis.
Øk gradvis utrullingen av den nye versjonen til flere brukere over tid. Dette sikrer en jevnere overgang til den nye versjonen.
Bruk automatiseringsverktøy og -prosesser der det er mulig for å effektivisere distribusjons- og overvåkingsprosessen. Integrer disse i CI/CD-pipeliner og sørg for at de utløser planlagte distribusjonsprosesser automatisk. Dette reduserer risikoen for menneskelige feil og sikrer en konsistent og repeterbar distribusjonsprosess.
Implementer funksjonsflagg for å aktivere eller deaktivere spesifikke funksjoner i programvaren. Dette gir deg kontroll over fremtidige distribusjonsprosesser, uten at det er nødvendig å endre eller oppdatere manuelt. Det gir utviklerne mer fokus på viktige områder, som for eksempel feilretting.
Bruk A/B-testing for å sammenligne ytelsen til to forskjellige versjoner av programvaren. Tildel brukere tilfeldig til den ene eller den andre versjonen. Identifiser hvilken versjon som fungerer best og bruk det i fremtidige utviklingsbeslutninger.
Sørg for at du raskt kan rulle tilbake distribusjonen dersom det oppstår problemer. Dette reduserer virkningen av eventuelle problemer og gir mulighet for rask gjenoppretting.
Utfordringer og case-studier
Det finnes fortsatt noen utfordringer knyttet til kanari-distribusjon, til tross for de klare fordelene.
En utfordring er nettverksforsinkelse, som kan påvirke ytelsen til den nye versjonen. For å håndtere dette kan utviklere bruke verktøy som lastbalansere og innholdsleveringsnettverk for å forbedre nettverksytelsen. Dette gjelder ikke bare latens for systemet ved ekstern bruk, men også for interne prosesser som distribusjoner og CI/CD-pipeline-kjøringer. Disse må fullføres så raskt som mulig, ellers vil utviklere være inaktive mens de venter.
En annen utfordring er å sikre datakonsistens mellom den gamle og nye versjonen. For å løse dette kan utviklere bruke teknikker som databasereplikering og synkronisering, for å sikre at data er konsistente på tvers av alle versjoner. Å ha produksjonsbrukere i både gamle og nye versjoner samtidig øker forventningen om at begge versjoner er synkroniserte. Brukerne skal ikke miste produksjonsdata fordi de tilfeldigvis er en del av kanari- eller baseline-gruppen. Dette kan være vanskelig å oppnå, så gode bakgrunnsprosesser er essensielt.
Netflix er et kjent selskap som bruker kanari-distribusjon for å rulle ut endringer i sin strømmetjeneste. De bruker en kombinasjon av automatisert testing, funksjonsflagg og A/B-testing for å gradvis rulle ut endringer.
Google er et annet eksempel på et selskap som bruker kanari-distribusjon i sine skytjenester. De bruker også automatisert testing, trafikkdeling og overvåking for å gradvis rulle ut endringer til en liten gruppe brukere før de lanseres for alle. Denne tilnærmingen har hjulpet Google med å forbedre kvaliteten og stabiliteten i sine tjenester.
Avsluttende tanker
Som med alle prosesser eller strategier, er ikke kanari-distribusjon en universalløsning. Det er tilfeller der det er vanskelig å implementere, på grunn av miljøbegrensninger, kunnskapsmangel eller manglende forståelse.
Det egner seg best for moderne prosjekter der en smidig tankegang er grunnleggende, automatisering av prosesser er en prioritet og høy pålitelighet er forventet.
I slike tilfeller kan kanari-distribusjon løfte teamet til et nytt nivå. Det er en videreutvikling av smidige utviklingsmetoder.
Etter dette kan du se på skalering og optimalisering av CI/CD.