Vysvětlení Canary Deployment a jeho role v DevOps

Photo of author

By etechblogcz

Implementace Canary je sofistikovaná technika vývoje a nasazování softwaru. Spočívá v postupném zavádění nových vlastností či aktualizací, a to nejprve pro omezenou skupinu uživatelů, než se změny rozšíří na celou uživatelskou základnu.

Tento metodický přístup zahrnuje vytvoření aktualizované verze softwaru a její zpřístupnění vybrané skupině uživatelů. Mezitím pro ostatní uživatele zůstává aktivní předchozí verze. Vývojový tým následně pečlivě sleduje chování nové verze, aby se ujistil, že je stabilní a plní očekávání.

Pokud se nová verze chová bez problémů, postupně se zpřístupňuje stále většímu počtu uživatelů, až nakonec pokryje celou uživatelskou základnu. Tímto způsobem projektový tým minimalizuje nebezpečí zavedení chyb nebo jiných nežádoucích jevů, které by mohly negativně ovlivnit všechny uživatele najednou.

Hlavním cílem implementace Canary je snížení rizika spojeného se zaváděním nových funkcí do prostředí s velkým počtem uživatelů. Díky postupnému zpřístupňování změn vývojáři mohou sledovat výkon a stabilitu aktualizované verze. Ještě před nasazením pro všechny uživatele mohou provést potřebné úpravy. Přechod na novou verzi je tak výrazně plynulejší.

Klíčové principy a výhody

Zdroj: martinfowler.com

Mezi klíčové principy nasazení Canary patří:

  • Nasazovat novou verzi nejprve pro menší skupinu uživatelů a následně ji postupně rozšiřovat na další.
  • Důkladně monitorovat novou verzi, aby se zajistila její stabilita a správná funkčnost.
  • V případě problémů rychle a efektivně vrátit nasazení k předchozí verzi.
  • Maximálně automatizovat proces nasazování s cílem snížit riziko lidské chyby.

Výhody implementace Canary v rámci DevOps zahrnují:

  • Snížení rizika zavedení chyb či jiných problémů, které by mohly mít dopad na všechny uživatele, díky postupnému zavádění změn.
  • Rychlejší získávání zpětné vazby k nové verzi, což umožňuje vývojářům provést nezbytné úpravy ještě před nasazením pro všechny uživatele.
  • Zajištění, že nová verze splňuje požadované standardy kvality díky monitorování výkonu a stability, a to ještě před nasazením pro celou uživatelskou základnu.
  • Zvýšení důvěry vývojářů i ostatních zainteresovaných stran v proces nasazování, protože minimalizuje riziko zavlečení problémů, které by mohly negativně ovlivnit uživatelský zážitek.

Canary Deployment na základě konceptu a terminologie

Zdroj: cncf.io

Nyní si podrobněji projdeme typický životní cyklus tohoto procesu.

Vše začíná u skupiny Canary, tedy u „prvních uživatelů“ nového systému. Souběžně s ní existuje skupina Baseline, do které patří všichni uživatelé mimo skupinu Canary.

Postupem času, kdy uživatelé Canary aktivně využívají novou verzi, rozšiřuje se implementace Canary na stále širší okruh uživatelů. Tento proces se nazývá Traffic Shifting. Skupina Canary roste, zatímco skupina Baseline se zmenšuje, což vede k postupnému zavádění.

Souběžně s tím proces monitorování zaznamenává veškeré aktivity a výsledky, generuje metriky, které jsou důležité pro vývojáře jako zpětná vazba. Na základě této zpětné vazby vývojáři reagují a opravují případné nedostatky. V případě, že problémy nelze okamžitě vyřešit, se systém může vrátit do stavu Baseline.

Doporučuje se automatizovat veškeré aktivity monitorování a nasazení. Vývojáři se tak mohou plně soustředit na řešení nalezených problémů.

Může se stát, že skupina Canary zjistí, že některé funkce v nové verzi jsou problematické, zatímco jiné jsou bezvadné. V takovém případě vývojáři identifikují a zablokují problematické funkce pro budoucí nasazování.

Vývojáři kontinuálně sledují obě skupiny – Canary a Baseline. Uživatelé generují výsledky A/B testování, které srovnávají chování starého a nového systému za stejných podmínek. Na nové verzi systému také neustále probíhají automatizované testy, aby se zajistila stabilita skupiny Canary.

Jak se liší od tradičních strategií nasazení

Po pochopení základního procesu je rozdíl mezi touto strategií a klasickými přístupy k nasazování zřejmý.

  • Nasazení probíhá postupně s vyšší mírou kontroly, namísto toho, abyste nasadili vše najednou a pak čekali na problémy, které mohou ovlivnit celou produkci.
  • Omezíte riziko chyb nové verze pouze na skupinu Canary, namísto aby se problémy projevily v celém produkčním prostředí.
  • Monitorujete novou verzi ještě před jejím zpřístupněním uživatelům. To je rozdíl oproti situaci, kdy monitorování probíhá až po nasazení a vyžaduje značné investice času a zdrojů ve fázi podpory po vydání.
  • Máte možnost rozhodnout o způsobu vrácení před úplným nasazením do produkce, což se liší od tradičního přístupu, kde je vrácení řešeno až v dalším plánovaném vydání.
  • Nasazení Canary přirozeně podněcuje k investicím do automatizačních nástrojů a procesů, zatímco klasické strategie nasazování často odsouvají automatizaci na vedlejší kolej.

CI/CD potrubí v nasazení na Kanárských ostrovech

Zdroj: aws.amazon.com

V typickém CI/CD potrubí se změny automaticky sestavují, testují a nasazují do testovacího prostředí před tím, než se dostanou do produkce. Toto je ideální scénář pro využití Canary Deployment.

Jakmile změny projdou testováním v testovacím prostředí, CI/CD potrubí automaticky nasadí verzi Canary pro omezenou skupinu uživatelů v produkčním prostředí.

V případě problémů lze rychle spustit jiný kanál pro vrácení nasazení zpět, případně lze označit problematické funkce, aby se v procesu nasazení už nikdy neobjevily. Vše se děje automaticky, bez nutnosti manuálního zásahu.

Verze Canary je vybavena automatizovanými kontrolami stavu, které jsou přirozenou součástí základních funkcí CI/CD potrubí a jsou nezbytné pro každé kvalitní CI/CD potrubí.

Pracovní postup a fáze nasazení Kanárských ostrovů

Shrneme-li všechny informace, jedná se o standardní postup typického nasazení Canary, který můžete využít ve svém projektu.

#1. Plánování a příprava

V této fázi vývojový tým plánuje a připravuje nasazení Canary. To zahrnuje specifikaci změn nebo aktualizací, které mají být provedeny, vytvoření nové verze softwaru a definování metrik a kontrol stavu, které budou použity pro monitorování nové verze. Tým také určí, která skupina uživatelů obdrží novou verzi jako první a stanoví plán postupného zavádění.

#2. Implementace směrování a monitorování provozu

Nová verze softwaru je nasazena pro vybranou skupinu uživatelů, která byla identifikována ve fázi plánování. Je implementováno směrování provozu tak, aby část uživatelského provozu byla směrována na novou verzi, zatímco pro ostatní uživatele zůstane aktivní předchozí verze. Výkon a stabilita nové verze jsou důkladně sledovány pomocí metrik a kontrol stavu, aby se ověřilo, že funguje tak, jak bylo zamýšleno.

#3. Analýza a vyhodnocení výkonu nasazení

Výkon nové verze je analyzován a hodnocen na základě metrik a kontrol stavu definovaných ve fázi plánování. Pokud nová verze funguje dobře, postupně se rozšiřuje na stále více uživatelů. Pokud se s novou verzí objeví problémy, nasazení lze rychle vrátit k předchozí verzi.

#4. Podpora nebo vrácení zpět nasazení

Vývojový tým se rozhodne, zda novou verzi rozšíří na všechny uživatele, nebo se vrátí k předchozí verzi. Pokud je nová verze stabilní a splňuje požadované standardy kvality, je rozšířena na celou uživatelskou základnu. Pokud se u nové verze vyskytnou problémy, nasazení se rychle a efektivně vrátí k předchozí verzi.

Zdroj: aws.amazon.com

Nejlepší postupy a strategie

Při zavádění Canary Deployment definujte jasné cíle a kritéria úspěchu. Zde vám pomohou metriky výkonu, zpětná vazba od uživatelů a dopad na podnikání.

Vytvořte malou skupinu uživatelů, kteří budou testovat novou verzi softwaru (Canary). Velká skupina není na začátku výhodou, jelikož je žádoucí maximální flexibilita.

Jak již bylo zmíněno, sledujte výkon a stabilitu nové verze pomocí metrik a kontrol stavu. Reagujte, kdykoli zaznamenáte podezřelé chování. Při postupném zavádění je lepší reagovat přehnaně než nedostatečně.

Postupem času postupně rozšiřujte nasazení nové verze na další uživatele. To zajišťuje plynulejší přechod na novou verzi.

Pokud je to možné, využívejte automatizační nástroje a procesy pro zefektivnění procesu nasazení a monitorování. Zařaďte je do CI/CD potrubí a automaticky spouštějte procesy plánovaného nasazování. Tím snížíte riziko lidských chyb a zajistíte konzistentní a opakovatelný proces nasazení.

Implementujte příznaky funkcí pro zapnutí nebo vypnutí konkrétních funkcí v softwaru. Tím získáte kontrolu nad budoucím procesem nasazení bez nutnosti ručních úprav nebo aktualizací. Vývojáři se tak mohou soustředit na klíčové oblasti, jako je odstraňování chyb.

Využijte A/B testování ke srovnání výkonu dvou různých verzí softwaru. Náhodně přidělujte uživatele k jedné nebo druhé verzi. Identifikujte, která verze funguje lépe a podle toho reagujte při budoucích rozhodnutích o vývoji.

Zajistěte si možnost rychle a kdykoli vrátit nasazení v případě problémů s novou verzí. Minimalizujete tak dopad případných problémů a umožníte rychlou obnovu.

Výzvy a případové studie

I přes jasné výhody, nasazení Canary má také své problémy.

Jedním z nich je latence sítě, která může ovlivnit výkon nové verze softwaru. K řešení tohoto problému mohou vývojáři využít nástroje pro vyrovnávání zatížení a sítě pro doručování obsahu (CDN), aby zlepšili výkon sítě. Nejde jen o latenci systému z pohledu uživatele, ale i o latenci interních procesů, jako je implementace nebo provádění CI/CD potrubí. Tyto procesy musí být dokončeny co nejrychleji, jinak budete mít spoustu vývojářů, kteří čekají, až se potrubí dokončí.

Další výzvou je zajištění konzistence dat mezi starou a novou verzí softwaru. K řešení tohoto problému lze využít replikaci a synchronizaci databáze, čímž se zajistí, že data budou konzistentní ve všech verzích. Skutečnost, že uživatelé pracují současně se starými i novými verzemi zvyšuje očekávání, že obě verze budou neustále synchronizovány, a uživatelé nepřijdou o žádná data jen proto, že patří do skupiny Canary nebo Baseline. Splnění tohoto očekávání může být náročné, proto je důležité se opřít o robustní procesy v pozadí.

Netflix je známým příkladem společnosti, která využívá Canary Deployment při zavádění změn ve své streamovací službě. Společnost kombinuje automatizované testování, příznaky funkcí a A/B testování k postupnému zavádění změn.

Google je dalším příkladem společnosti, která využívá Canary Deployment pro zavádění změn ve svých cloudových službách. Společnost také využívá automatizované testování, rozdělování provozu a monitorování k postupnému zavádění změn pro malou skupinu uživatelů, než je nasadí pro všechny. Tento přístup pomáhá Googlu zlepšit kvalitu a stabilitu svých služeb.

Závěrečná slova

Stejně jako u všech procesů a strategií, i nasazení Canary není řešením pro všechny problémy. Jsou situace, kdy je obtížné implementovat kvůli omezením prostředí, nedostatku znalostí nebo chybějícímu koncepčnímu porozumění.

Je vhodnější pro moderní projekty, kde je agilní myšlení základem, automatizace je prioritou a zainteresované strany očekávají maximální spolehlivost.

V takovém případě je nasazení Canary dalším krokem agilního vývoje. Může posunout týmy na vyšší úroveň, než jakou dosud projekt dosáhl.

Podívejte se také na škálování a optimalizaci CI/CD.