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í:
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ů:
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.