Canary Deployment och dess roll i DevOps förklaras

By rik

Gradvis utrullning med Canary-distribution

Canary-distribution, en metod inom mjukvaruutveckling, innebär att nya funktioner eller uppdateringar stegvis lanseras. Istället för att direkt implementera en ny version för alla användare, introduceras den först till en begränsad grupp.

Denna strategi innebär att en ny mjukvaruversion skapas och distribueras till en utvald användargrupp medan den tidigare versionen fortfarande är aktiv för majoriteten. Utvecklingsteamet granskar noggrant den nya versionen för att säkerställa dess stabilitet och korrekta funktion.

Om den nya versionen fungerar som förväntat, utökas distributionen gradvis till fler användare tills den slutligen når hela användarbasen. Detta tillvägagångssätt minskar risken för att introducera fel eller andra problem som kan påverka alla användare på en gång.

Syftet med Canary-distribution är att minimera riskerna vid introduktion av nya funktioner. Genom att införa ändringar stegvis kan utvecklare kontinuerligt övervaka den nya versionens prestanda och stabilitet och göra eventuella nödvändiga justeringar innan utrullningen till alla. På så vis blir övergången till den nya versionen smidigare.

Grundprinciper och Fördelar

Källa: martinfowler.com

Här följer några viktiga principer för Canary-distribution:

  • Den nya versionen implementeras först för en liten del av användarna, därefter rullas den ut stegvis till fler.
  • Noggrann övervakning av den nya versionen säkerställer stabilitet och korrekt funktion.
  • Snabb återgång till den tidigare versionen om problem uppstår.
  • Automatisering av distributionsprocessen minskar risken för fel.

Fördelar med Canary-distribution inom DevOps:

  • Riskminimering genom gradvis utrullning av ändringar.
  • Snabbare feedback gör det möjligt för utvecklare att justera den nya versionen innan den når alla användare.
  • Övervakning säkerställer att den nya versionen uppfyller kvalitetskrav innan utrullningen.
  • Ökat förtroende för distributionsprocessen, då riskerna minimeras.

Koncept och Terminologi för Canary-utbyggnad

Källa: cncf.io

Låt oss granska en typisk livscykel för processen.

Det hela startar med ”Canary”, det vill säga de första användarna av den nya versionen. Parallellt finns ”Baseline”-gruppen, som består av alla användare som inte ingår i Canary-gruppen.

I takt med att Canary-användarna nyttjar den nya versionen, utökas Canary-utbyggnaden till fler och fler användare. Det här kallas ”Traffic Shifting”. Canary-gruppen växer medan Baseline-gruppen minskar, vilket innebär en gradvis utrullning.

Samtidigt loggar övervakningen alla aktiviteter och genererar data som utvecklarna behöver för återkoppling. Utvecklarna agerar sedan och åtgärdar problem. Eller så återgår de till baslinjen om det inte går att lösa problemen omedelbart.

Automatisera all övervakning och distribution. Då kan utvecklarna fokusera på problemlösning.

Det kan hända att Canary-gruppen upptäcker att vissa funktioner i den nya versionen fungerar dåligt. Utvecklarna kan då markera problemfunktioner och inaktivera dem i distributionsprocessen.

Utvecklarna övervakar båda grupperna – Canary och Baseline. Användarna genererar resultat från A/B-tester, som visar skillnaderna mellan det gamla och det nya systemets beteende under samma förhållanden. Dessutom körs kontinuerligt automatiska tester på den nya versionen för att säkerställa stabiliteten hos Canary-gruppens hälsokontroller.

Skillnaden mot traditionella strategier

Skillnaderna mellan Canary-distribution och traditionella strategier blir tydliga när man förstår den övergripande livscykeln.

  • Istället för att distribuera allt till alla på en gång, distribuerar du stegvis och med bättre kontroll, vilket minskar risken för problem som påverkar hela produktionen.
  • Risken för buggar begränsas till Canary-gruppen, snarare än att utsätta alla användare för dem.
  • Den nya versionen övervakas innan den når majoriteten av användarna, vilket minskar behovet av omfattande eftervård.
  • Återställning är möjligt innan hela produktionen uppdateras. Vid traditionell implementering behövs det ett nytt release-fönster för att återställa produktionen.
  • Canary-distribution kräver automatisering, medan traditionella strategier ofta nedprioriterar automatisering.

CI/CD-pipelines i Canary-utbyggnad

Källa: aws.amazon.com

I en typisk CI/CD-pipeline byggs, testas och distribueras ändringar automatiskt till en testmiljö innan de når produktion. Det här är en bra miljö för att implementera Canary-utbyggnad.

Efter att ändringarna har testats i stagingmiljön kommer CI/CD-pipelinen automatiskt att distribuera en canary-version till en mindre grupp användare i produktionsmiljön.

Vid problem, initiera en annan pipeline för återställning eller markera problematiska funktioner för att undvika dem i framtida distributioner. Allt sker automatiskt.

Canary-versionen har automatiska hälsokontrolltester som är en del av CI/CD-pipelinen.

Arbetsflöde och Faser i Canary-utbyggnad

Sammanfattningsvis är detta det typiska arbetsflödet för en Canary-utbyggnad:

1. Planering och Förberedelse

Här planerar och förbereder utvecklingsteamet utbyggnaden. Det innefattar att identifiera vilka ändringar eller uppdateringar som ska göras, skapa den nya versionen och definiera mätvärden och hälsokontroller för att övervaka prestanda. Teamet bestämmer även vilka användare som först ska få den nya versionen och fastställer utbyggnadsplanen.

2. Implementering av Trafikdirigering och Övervakning

Den nya versionen distribueras till den utvalda gruppen användare. Trafikdirigering styr en del av användartrafiken till den nya versionen, medan den gamla versionen fortfarande körs för övriga användare. Den nya versionens prestanda övervakas med mätvärden och hälsokontroller.

3. Analys och Utvärdering av Implementeringsprestanda

Den nya versionens prestanda analyseras baserat på de mätvärden som definierats. Om den fungerar bra, utökas lanseringen gradvis. Om det uppstår problem, återställs distributionen snabbt till den tidigare versionen.

4. Främja eller Återställa Implementeringen

Utvecklingsteamet beslutar om den nya versionen ska rullas ut till alla eller om man ska återgå till den tidigare versionen. Om den nya versionen uppfyller alla krav, rullas den ut till alla användare. Vid problem återställs distributionen snabbt.

Källa: aws.amazon.com

Bästa Praxis och Strategier

När du implementerar Canary-utbyggnad, definiera tydliga mål och hur framgång ska mätas. Använd resultatmätning, feedback och analys av affärseffekter.

Starta med en liten testgrupp för den nya versionen. Större grupper i starten är inte alltid en fördel. Flexibilitet är viktigt, särskilt i början.

Övervaka prestanda och stabilitet med mätvärden och hälsokontroller. Reagera snabbt om något verkar misstänkt. Det är bättre att överreagera än att inte reagera alls.

Öka utrullningen gradvis. Detta ger en smidig övergång till den nya versionen.

Automatisera distributions- och övervakningsprocesserna. Använd CI/CD-pipelines och se till att distributionsprocesser schemaläggs och startas automatiskt. Det minskar risken för fel och säkerställer konsekventa resultat.

Använd funktionsflaggor för att aktivera eller inaktivera specifika funktioner. Det ger kontroll över distribution utan manuella ändringar. Utvecklarna kan fokusera på viktigare saker.

Använd A/B-testning för att jämföra prestanda mellan två olika versioner. Tilldela användare slumpmässigt till en av versionerna. Identifiera vilken version som presterar bäst och agera utifrån det i framtida beslut.

Se till att det går att återställa distributionen snabbt om problem uppstår. Det minskar påverkan av eventuella problem och möjliggör en snabb återhämtning.

Utmaningar och Fallstudier

Trots sina fördelar finns det utmaningar med Canary-distribution.

Nätverkslatens kan påverka prestandan. Använd lastbalanserare och CDN för att förbättra nätverkets prestanda. Latens kan också påverka interna processer som distribution eller CI/CD-körningar. De måste slutföras snabbt, annars kan utvecklarna tvingas vänta.

Datakonsistens mellan den gamla och nya versionen är en annan utmaning. Använd databasreplikering och synkronisering för att säkerställa att data är konsekventa i alla versioner. Produktionsanvändare kan arbeta i både gamla och nya versioner samtidigt, vilket ökar kraven på synkronisering. Detta kan vara svårt att uppfylla, så ha backup-processer.

Netflix använder Canary-distribution för sin streamingtjänst. Företaget använder automatiserad testning, funktionsflaggor och A/B-testning för att implementera ändringar gradvis.

Google använder Canary-distribution för sina molntjänster. De använder automatiserad testning, trafikuppdelning och övervakning för att implementera ändringar till en mindre grupp användare först. Det här har bidragit till att förbättra kvaliteten och stabiliteten i deras tjänster.

Slutord

Canary-utbyggnad är inte en universallösning. Det finns fall där det är svårt eller omöjligt att implementera på grund av restriktioner, kunskapsbrist eller förståelse.

Den passar bättre för moderna projekt med ett agilt tankesätt, automatisering som prioritet och höga krav på tillförlitlighet.

I dessa fall kan Canary-utbyggnad lyfta teamen till en ny nivå av agilitet.

Läs vidare om skalning och optimering av CI/CD.