Funksjonsflagg kontra blågrønne implementeringer: Mindre risiko og mer kontroll

26. okt. 2020

Som utvikler lurer du kanskje på fordelene ved å bruke funksjonsflagg kontra blågrønne distribusjoner, og lurer på når du skal bruke hvilket verktøy.

En rask innføring: blågrønne distribusjoner innebærer å omdirigere brukertrafikk til et annet sett med servere som er vert for den oppdaterte applikasjonen din. Funksjonsflagg er derimot kodebaserte og lar brukere se en ny oppdatering ved å gjøre endringer på applikasjonsnivå.

Dette blogginnlegget vil gi en oversikt over hvordan funksjonsflagg løser lignende utfordringer som blågrønne distribusjoner, men med mer kontroll og samtidig som de krever mindre ingeniørtid. La oss ta en titt:

Et sløvt verktøy: Blågrønne distribusjoner

I en blågrønn distribusjon utpeker du en del av serverne dine til å være vert for en ny versjon av applikasjonen din og en annen del av serverne dine til å være vert for den forrige versjonen av applikasjonen din. I diagrammet nedenfor har den blå gruppen med servere din nåværende versjon, mens den grønne gruppen er vert for den nye versjonen. For å eksponere brukere for oppdateringen må du koordinere med driftsteamet for å flytte trafikk via lastfordeleren (også kjent som trafikkruteren).

Hvis du lager en utgivelse som oppdaterer flere funksjoner og du oppdager en feil i en av dem, kan du enkelt gå tilbake til den forrige versjonen ved å flytte trafikken tilbake til den forrige versjonen eller den «blå gruppen» av servere. Blågrønne distribusjoner er imidlertid en sløv løsning på denne måten fordi de ikke gir kontroll på funksjonsnivå. Du må rulle tilbake hele oppdateringen for å slå av bare én funksjon.

Fordeler og ulemper med blågrønne distribusjoner

  • Fordel: Tilbakestiller enkelt en utgivelse ved å rulle tilbake trafikk til et blått miljø
  • Fordel: Krever ikke ekstra kode lagt til applikasjonen din
  • Ulemper: Ruller tilbake hele utgivelsen i stedet for bare den buggy-funksjonen
  • Ulemper: Muliggjør ikke granularitet på funksjonsnivå, kun endringer på utgivelsesnivå
  • Ulemper: Splitter trafikken på servernivå og gjør det vanskelig å gi eller begrense tilgang til bestemte brukere.
  • Ulemper:Krever ofte at utviklere og drift koordinerer tilgang til infrastruktur
  • Ulemper: Kan være tregere å bytte over ettersom lastbalansering krever at alle tilkoblinger tømmes

En presis løsning: Implementering av funksjonsflagg

Med funksjonsflagg (også kjent som funksjonsvekslere) har hver funksjon i programvareoppdateringen sitt eget flagg, eller veksler, som kan kontrolleres uavhengig fra den fullstendige utgivelsen. Med en funksjonsflaggtjeneste som Optimizely Rollouts, kan du opprette flaggene i funksjonsflaggplattformens brukergrensesnitt, og deretter pakke inn nye funksjoner eller kodebaner i funksjonsflaggkoden.

Hvis du oppdager en feil i en av funksjonene dine denne gangen, trenger du ikke å rulle tilbake hele utgivelsen. Du kan ganske enkelt slå av den feilaktige funksjonen ved å slå av funksjonen i dashbordet for funksjonsadministrasjon uten en kodedistribusjon. På denne måten gir funksjonsflagg mer kontroll, er mer responsive og bidrar til å spare ingeniørtid kontra blågrønne distribusjoner, som krever samarbeid på tvers av team og vedlikehold av flere settversjoner på tvers av serverne dine.

Fordeler og ulemper med funksjonsflaggdistribusjoner

  • Fordel:Slår enkelt av en enkelt feilfunksjon
  • Fordel: Muliggjør granularitet på funksjonsnivå
  • Fordel: Kan enkelt gi tilgang til funksjoner til individuelle brukere, bestemte målgrupper eller prosentandeler av brukerne dine.
  • Fordel:Programvareingeniører kan gjøre endringer uten å involvere IT/DevOps
  • Ulemper: Krever tilleggskode i applikasjonen din og kan skape teknisk gjeld hvis du ikke har en god praksis for å fjerne eksisterende flagg

Utrulling av en oppdatering til bare et delsett av brukere

Kraften ved å bruke funksjonsflagg for å lansere funksjoner blir enda tydeligere når man tenker på canary-utgivelser eller utgivelsesfunksjoner til et minimalt delsett av brukerbasen din før du ruller dem ut til alle. Når du ruller ut en ny utgivelse med funksjonsoppdateringer, vil du sannsynligvis prøvekjøre endringene med en liten gruppe for å sikre at alt fungerer som det skal. I programvareutvikling kalles dette canary-testing/distribusjoner eller trinnvise/fasede utrullinger.

Canary-tester tillater at ny kode eller funksjoner lanseres til et lite utvalg av brukere for å bekrefte eventuelle problemer med koden før den lanseres til et større publikum. Ved å begrense utgivelsen til et utvalgt publikum kan du minimere lanseringsradiusen for nye utgivelser, og team kan validere funksjonalitet og ytelse før de rulles ut til alle brukere. Denne tilnærmingen bidrar også til å oppdage problemer som bare ble synlige da de ble flyttet fra utviklings- eller stagingmiljøer til produksjon.

Det er mulig å utføre canary-tester gjennom både blågrønne distribusjoner og funksjonsflagging, selv om de samme utfordringene eksisterer med å dirigere trafikk på servernivå.

Canary-tester gjennom blågrønne distribusjoner: I stedet for å dirigere all trafikken din fra den blå gruppen med servere som er vert for den nåværende versjonen av applikasjonen din til den grønne gruppen med servere, kan du bare flytte en prosentandel til den nye versjonen. Du har imidlertid fortsatt ikke kontroll på funksjonsnivå og må rulle tilbake hele utgivelsen hvis én funksjon er ødelagt. Hvis du vil ha mer kontroll over hvilke kunder som får tilgang til en funksjon, er det også komplisert å definere regler på servernivå.

Kanari-tester gjennom funksjonsflagg-distribusjoner: Med funksjonsflagg kan du utføre en kanari-test med hver funksjon som har en av/på-bryter ved å velge den delen av trafikken du vil eksponere for en gitt funksjon. Hvis en bestemt funksjon har en feil, kan du ganske enkelt slå den av i stedet for å gå tilbake til forrige versjon. Du kan også bruke målgruppemålretting for å aktivere funksjoner for bestemte kunder eller kundesegmenter (f.eks. bare kunder på gratisnivået).

Oppsummering

  • Funksjonsflagg gir en mer detaljert og brukervennlig løsning for å redusere risiko ved utgivelse av nye funksjoner.
  • Funksjonsflagg gir programvareutviklingsteam mulighet til å administrere utgivelsene sine og redusere behovet for driftsstøtte
  • Funksjonsflagg kan brukes til å kjøre kanarietester på brukernivå, noe som gir mer kontroll enn på servernivå.

Hvis du ønsker å komme i gang med funksjonsflagg, kan du sjekke ut vår gratis løsning: Optimaliser utrullinger.