pátek 12. července 2013

Canary Releasing

Existuje několik způsobů, jakými lze doručovat kód do produkce. V tomto článku vám zkusím přiblížit takzvaný Canary Releasing, který umožňuje velmi bezpečné nasazování změn. Podíváme se na jeho charakteristiku a výhody, které přináší.

Slovo Canary není použito pro srandu papouškům, ale symbolizuje paralelu s metodou používanou v těžařském průmyslu. Kanárci se totiž používali jako indikátor škodlivých plynů v nově vyhloubených štolách ještě před tím, než došlo k rozvoji zařízení pro jejich detekci. Do štoly se nejdříve vypustil kanárek a pokud přežil sfárali i horníci. V případě Canary Releasing nám kanárka nahrazuje uživatel resp. jejich vzorek. Pojďme se podívat, jakým způsobem to funguje. Vybral jsem příklad s HTTP serverem, ale obecně to funguje jednoduše prakticky pro jakoukoliv bezestavovou službu.

Představte si, že máte v produkci server, na který byste rádi nasadili novou funkcionalitu nebo záplatu. Zároveň byste ovšem chtěli dosáhnout toho, že to bude bez ztráty kytičky pro uživatele tohoto serveru. Jinými slovy nechcete mít výpadek serveru po dobu nasazování a nebo v případě, že se něco pokazí. Předpokládejme, že se jedná o standardní HTTP server. Před tento server si nasadíte chytřejší HTTP proxy. Pro novou funkcionalitu nebo záplatu nasadíte zbrusu nový server. Na tento server vám bude HTTP proxy automaticky přeposílat požadavky splňující určitá kritéria např. podle uživatele, typu klienta atd. Zbytek požadavků je směřován stále na původní server. Ve chvíli kdy máte otestováno, že nově nasazený kód nic nerozbil, překonfigurujete HTTP proxy, aby směřovala provoz na nový server a za nějaký čas původní server odstavíte.



Canary Releasing má několik výhod

  • Případná chyba, ke které může vždy dojít, má dopad pouze na zanedbatelné množství uživatelů.
  • Před přepnutím provozu můžete spustit smoke testy, které ověří, že je vše korektně zkonfigurované.
  • Lze tímto způsobem otestovat věci, které se těžko simulují na testovacím prostředí například díky rozdílné topologie nebo charakteru zátěže.
  • Jednoduchý rollback. Při klasickém releasu se v případě problému prodlužuje doba odstávky a rollback na systému, kde byly například provedený konfigurační změny, je prakticky nemožný.
  • Můžete provést A/B testování a zjistit, jak na novou funkcionalitu reagují uživatelé.

Určitou nevýhodu je fakt, že pokud tímhle způsobem releasujete větší cluster, musíte mít k dispozici odpovídající hardwarovou kapacitu. Vedlejším efektem je fakt, že Canary Releasing umožňuje jednoduší automatizaci. Nemusíte řešit aktualizaci prostředí, při které může dojít k interferencím, a místo toho řešíte deploy jedné z vody na čisto. Na začátku jsme naťuknul, že se hodí pro všechny bezestavové služby. V případě služeb, které mají sdílený stav (databáze, cache) je to problém pokud dochází k zpětně nekompatibilním změnám. V takovém případě se Canary Releasing nehodí.