Vysvětlení modro-zeleného nasazení a jeho role v DevOps

Zavedené postupy vývoje softwaru, které spoléhají na jednorázové rozsáhlé aktualizace, se neslučují s požadavky na vysokou flexibilitu, agilní přístup a kontinuální implementaci, jež jsou typické pro moderní cloudové a DevOps platformy.

Pouhý kontrolní seznam ručně prováděných úkonů při uvádění produkční verze už dnes nestačí. S takovým postupem nelze hovořit o agilitě, ani o správném DevOps.

Modro-zelené nasazení: Stručný přehled

Modro-zelené nasazení představuje strategii pro implementaci softwaru, která minimalizuje výpadky a rizika spojená s novými verzemi. Toho se dosahuje vytvořením dvou identických prostředí: aktivního (modrého) a neaktivního (zeleného).

V aktivním prostředí běží aktuální verze softwaru, kterou uživatelé běžně využívají. Do neaktivního prostředí se nasazuje a testuje nová verze.

Po otestování a připravení nové verze se provoz přesměruje z aktivního do neaktivního prostředí, které se tím stává novým aktivním prostředím. Tento cyklus lze dle potřeby opakovat.

Zdroj: docs.aws.amazon.com

Kontext DevOps

Modro-zelené nasazení se skvěle začleňuje do filozofie a postupů DevOps, protože podporuje nepřetržité dodávání a nasazování softwaru, minimalizuje prostoje pro uživatele v produkčním prostředí a eliminuje riziko neúspěšného uvedení nové verze.

Dvě identická prostředí umožňují testovat a implementovat nové verze softwaru bez narušení stávajícího produkčního prostředí. Tím se dosahuje rychlejšího a častějšího uvádění nových verzí, což je zásadní aspekt DevOps.

Schopnost pohotově přepínat provoz mezi prostředími je navíc klíčová pro rychlé obnovení provozu v případě potíží, což je v prostředí DevOps rovněž velmi důležité.

Základní principy modro-zeleného nasazení

#1. Dvě identická prostředí

Modro-zelené nasazení vyžaduje existenci dvou naprosto stejných prostředí. To znamená, že musí být identické z hlediska dat i procesů. Jedno prostředí je aktivní (modré) a druhé neaktivní (zelené).

V modrém prostředí probíhají každodenní operace produkčních uživatelů. Zelené prostředí je vždy synchronizované s modrým, ale slouží testerům pro provádění testů. Ačkoli se nejedná o produkční prostředí, testy probíhají v reálných podmínkách, protože prostředí je identické s produkčním.

#2. Přesměrování provozu

Po otestování a připravení nové verze softwaru se provoz přesměruje z aktivního do neaktivního prostředí, čímž se z něj stává nové aktivní prostředí.

Přesměrování je okamžité. Celá implementace je provedena předem. Nedochází k žádným prostojům. Uživatelé se do nového prostředí dostanou automaticky a současně, aniž by museli provádět jakékoli akce.

Zdroj: aws.amazon.com

#3. Rychlé vrácení zpět

Možnost rychle přepínat provoz mezi prostředími také umožňuje rychlé obnovení předchozí verze v případě problémů. Díky tomu jsou prostoje minimalizovány a aplikace zůstává vysoce dostupná.

Pokud se se zeleným prostředím něco pokazí, jsou všichni uživatelé okamžitě přesměrováni zpět do stabilního modrého prostředí bez jakýchkoliv komplikací.

#4. Automatizované testování

Automatizované testování je klíčové pro úspěšné modro-zelené nasazení. Zajišťuje, že nová verze softwaru je před implementací do aktivního prostředí důkladně otestována.

Pokud nemáte významnou část testů automatizovanou (včetně unit testů, funkčních testů a alespoň regresních testů), pravděpodobně nemá smysl o modro-zeleném nasazení uvažovat.

Chybějící automatické testy vás výrazně zpomalí. Doba potřebná k otestování nového (zeleného) prostředí se tak prodlouží, že nová verze bude z hlediska životního cyklu vývoje softwaru zastaralá ještě předtím, než bude možné přejít do zeleného prostředí.

#5. Kontinuální dodávání

Modro-zelené nasazení je nedílnou součástí kontinuálního dodavatelského řetězce, což v konečném důsledku urychluje a zvyšuje frekvenci uvádění softwaru do produkce.

Přechod můžete provést, jakmile jste připraveni otestovat novou verzi softwaru v zeleném prostředí. Vzhledem k tomu, že implementace již proběhla a stačí pouze přepnout provoz, je celý proces tak rychlý, že jej můžete provádět klidně i každý den. To samozřejmě platí za předpokladu, že i v testovacích aktivitách jste dostatečně rychlí.

Typický životní cyklus

Platforma, která využívá modro-zelené nasazení, má svůj specifický cyklus kroků a procesů. Obvykle se skládá z následujících fází:

  • Vytvoření nové verze softwaru. To zahrnuje kompilaci kódu, spuštění automatických testů a vytvoření implementovatelného artefaktu.
  • Následně se nová verze softwaru nasadí do neaktivního (zeleného) prostředí. To zahrnuje konfiguraci prostředí, implementaci artefaktu a veškerá další nezbytná nastavení.
  • Po implementaci nové verze softwaru do zeleného prostředí probíhají automatické testy, které ověřují správnou funkci nové verze. Testují se funkční, regresní a integrační aspekty, a pokud je to možné, i výkon.
  • Poté je přesměrován provoz z aktivního (modrého) prostředí do neaktivního (zeleného) prostředí. K tomu dochází aktualizací nastavení nástroje pro vyrovnávání zatížení nebo nastavení DNS, aby provoz směřoval do zeleného prostředí. Samozřejmě je žádoucí provést tuto aktualizaci automatizovaně.
  • Po přesměrování provozu se monitoruje aplikace, aby se zajistilo, že funguje správně. To zahrnuje sledování chyb, problémů s výkonem a dalších potíží.
  • Tento krok je volitelný a neměl by se provádět příliš často. Pokud se však objeví závažné problémy, provoz se okamžitě přepne zpět do modrého prostředí, aby se předešlo jakýmkoli výpadkům nebo narušením produkčních uživatelů. K přesměrování provozu zpět do modrého prostředí stačí aktualizovat nastavení nástroje pro vyrovnávání zatížení nebo DNS.
  • Po vyřešení problémů a opětovné připravenosti na implementaci nové verze se provoz přepne zpět do zeleného prostředí. K tomu stačí opět aktualizovat nastavení nástroje pro vyrovnávání zatížení nebo DNS.
  • Nakonec, jakmile je nová verze softwaru stabilní a funguje správně, vyřadí se z provozu stará verze softwaru běžící v modrém prostředí. Bude potřeba pro vytvoření další nové verze systému.
  • Implementace CI/CD potrubí

    Implementace modro-zeleného nasazení do DevOps CI/CD kanálu je logický krok.

    Předpokladem je, že dvě identická prostředí jsou již připravená. Vzhledem k automatizovanému procesu lze využít nástroje pro infrastrukturu jako kód, jako je AWS CloudFormation nebo dokonce cloudově nezávislé Terraform skripty, které dokážou automatizovaně vytvořit, znovu vytvořit nebo aktualizovat prostředí.

    Jakmile je toto nastaveno, vytvoření plně automatizovaného procesu nasazení je už relativně snadný krok. Opětovně použijete existující kanály pro vytvoření modrého a zeleného prostředí, tentokrát však do kanálu zahrnete i testovací procesy.

    Proces přesměrování provozu lze automatizovat pomocí nástrojů, jako je AWS Elastic Load Balancer nebo NGINX. To zahrnuje aktualizaci nastavení nástroje pro vyrovnávání zatížení nebo DNS, aby provoz směřoval do zeleného prostředí, jakmile je nová verze softwaru otestována a připravena.

    Dalším důležitým aspektem je monitorování. K tomu lze použít nástroje, jako je AWS CloudWatch, New Relic nebo Datadog.

    Nakonec je potřeba opětovně využít stávající kanál i pro vyřazení starého modrého prostředí. Můžete nejprve zničit všechny služby a komponenty, než je znovu vytvoříte od začátku, nebo pouze aktualizovat skripty pro každou službu v řetězci. Bezpečnější je zničit a znovu vytvořit, protože aktualizace zahrnuje více výjimek.

    Doporučené postupy modro-zeleného nasazení

    Chcete z modro-zeleného nasazení vytěžit maximum? Zde je několik praktických tipů.

    Pevná strategie migrace databáze

    Při implementaci nové verze softwaru je nezbytné zajistit správnou aktualizaci schématu databáze. Ke správě změn schématu databáze použijte strategii migrace databáze, jako je například Flyway nebo Liquibase.

    Nástroj pro kanárskou analýzu

    I když je kanárské nasazení alternativní přístup, můžete některé jeho techniky využít k vylepšení svého modro-zeleného nasazení.

    Použijte nástroj pro kanárskou analýzu, jako je Kayenta nebo Spinnaker, k analýze výkonu nové verze softwaru v reálném prostředí. To zahrnuje porovnání výkonu nové verze softwaru se starou verzí.

    Použijte framework pro přepínání funkcí, jako je Togglz, k aktivaci nebo deaktivaci funkcí v nové verzi softwaru. To umožňuje postupné zavádění nových funkcí a v případě potřeby i rychlé vrácení zpět.

    Load Balancer s kontrolami stavu

    Používejte nástroj pro vyrovnávání zatížení, jako je AWS Elastic Load Balancer nebo NGINX, s kontrolami stavu. Zajistíte tak, že provoz bude směrován pouze do funkčních instancí. To zajišťuje vysokou dostupnost aplikace a minimalizuje prostoje.

    Plán vrácení s automatickým vrácením zpět

    Mějte připravený plán vrácení pro případ problémů a automatizujte proces vrácení pomocí nástroje, jako je AWS CodeDeploy nebo Octopus Deploy. Tím se minimalizují prostoje a aplikace zůstane vysoce dostupná.

    To platí především pro zelené prostředí, kde se s novou verzí mohou objevit neočekávané problémy.

    Pro modré prostředí není potřeba plán vrácení, protože po přepnutí zůstává nedotčené a můžete se do něj okamžitě a kdykoli vrátit.

    Úskalí modro-zeleného nasazení

    Implementace modro-zeleného nasazení může pro vývojové týmy představovat určitá úskalí. Zde je několik typických problémů:

  • Nastavení a správa dvou identických prostředí může být složité a časově náročné. Vyžaduje odborné znalosti v oblasti infrastruktury jako kódu, jako je Terraform nebo CloudFormation. Je potřeba mít zkušený vývojový tým, který je schopen se s těmito technickými problémy vyrovnat.
  • Při nasazování nové verze softwaru je nezbytné zajistit správnou aktualizaci schématu databáze. To může být náročné, zejména pokud je schéma databáze složité. Potřebujete spolehlivé procesy nasazení databáze, které dokážou aktualizaci schématu provádět automaticky a spolehlivě.
  • Analýza výkonu nové verze softwaru v reálném prostředí může být náročná. Vyžaduje odborné znalosti v oblasti nástrojů pro kanárskou analýzu, jako je Kayenta nebo Spinnaker.
  • Implementace přepínání funkcí může být náročná, zejména pokud má aplikace mnoho funkcí. To vyžaduje pečlivé plánování a koordinaci mezi vývojovými týmy.
  • Testování nové verze softwaru v reálném prostředí může být náročné, zejména pokud má aplikace mnoho uživatelů nebo serverů. Musíte mít co nejvíce automatizovaných testovacích případů. A vaše běžné procesy budou zahrnovat hodně koordinace mezi vývojovými a testovacími týmy.
  • Dobře zavedené řešení monitorování je velmi ojedinělé, ale pro správné operace DevOps je nezbytné. Investujte čas do budování tohoto řešení s využitím osvědčených služeb (AWS CloudWatch, New Relic, Datadog).
  • Rozdíl mezi modro-zeleným a kanárským nasazením

    Zatímco rozdíl oproti tradičním procesům nasazení je zřejmý (v tradičních procesech neexistují dvě paralelní prostředí s různými verzemi softwaru), rozdíl oproti kanárskému nasazení může být zajímavější.

    Modro-zelené nasazení pracuje se dvěma prostředími (modrým a zeleným). Obě prostředí jsou ale neustále synchronizována z hlediska dat. Po otestování nové verze a její připravenosti k implementaci se provoz přesměruje z aktivního do neaktivního prostředí, které se stane novým aktivním prostředím. S implementací nového kódu se neztrácí čas a nedochází k žádným prostojům v produkci. Všichni produkční uživatelé pracují v aktivním prostředí, aniž by si přepnutí všimli.

    Kanárské nasazení spočívá v implementaci nové verze softwaru pro malou skupinu uživatelů, zatímco většina uživatelů nebo serverů nadále používá stávající verzi. Jedná se spíše o postupné nasazování než o úplný přechod. Testery jsou v tomto případě přímo produkční uživatelé, ačkoli jde pouze o jejich definovanou podmnožinu. Tato skupina aktivně testuje novou verzi s produkčními procesy, a až je konečně stabilní, je nová verze rozšířena mezi ostatní uživatele.

    Který je tedy lepší?

    Odpověď „záleží na tom“ je zde nejvhodnější, i když to může znít vyhýbavě.

    Pokud je pro váš systém prioritou především vysoká dostupnost, modro-zelené nasazení je tou správnou volbou.

    Pokud je pro vás důležitější rychlejší zpětná vazba a kontrolovanější (i když pomalejší) zavádění nové verze systému, pak má kanárské nasazení oproti modro-zelenému nasazení výhody.

    Důležité je, že oba přístupy jsou dostatečně agilní, aby byly vhodné pro seriózní DevOps.

    Případové studie

    Společnost Netflix využívá modro-zelené nasazení k implementaci nových verzí své streamovací služby. Díky modro-zelenému nasazení dokáže Netflix implementovat nové verze služby bez jakéhokoli narušení uživatelské zkušenosti. Netflix navíc paralelně využívá i kanárské nasazení pro jiné případy, takže není neobvyklé kombinovat různé přístupy k DevOps pod jednou střechou.

    Společnosti Amazon a Etsy rovněž využívají modro-zelené nasazení k implementaci nových verzí své platformy elektronického obchodu.

    Dalším příkladem je LinkedIn, který využívá modro-zelené nasazení k implementaci nových verzí své platformy sociálních sítí.

    V neposlední řadě společnost IBM používá modro-zelené nasazení k implementaci nových verzí své cloudové platformy.

    Tyto společnosti úspěšně implementovaly modro-zelené nasazení do svých infrastruktur a jsou skvělým příkladem pro ostatní.

    Závěrečná slova

    Stejně jako kanárské nasazení, i modro-zelené nasazení se snaží co nejlépe optimalizovat stávající agilní procesy a metodiky tak, aby dodávání nového softwaru probíhalo hladce a bez jakýchkoli negativních dopadů. To je konečný cíl těchto přístupů. Dodáváte neustále a velmi často, ale nikdo si toho nevšimne a nikoho to netrápí.

    Pro vývojový tým může být frustrující, když se o jejich nejnovějších implementacích v podniku nemluví. Nicméně je to právě ta nejlepší služba, kterou mohou poskytnout. Nikdo o tom nemluví, ale všichni to každý den používají.

    V další části si můžete prohlédnout často kladené otázky a odpovědi z pohovorů s DevOps.