Kolik preview prostředí skutečně stojí
Náklady na preview prostředí rostou s počtem otevřených pull requestů, ne s velikostí týmu. Zjistěte, kde se náklady skrývají, které části lze sdílet a jak preview prostředí automaticky ukončovat, aby pět otevřených PR neznamenalo pět stacků.
Preview prostředí patří k věcem s největším dopadem, které může tým zapnout. Reviewer klikne na odkaz a změnu si rovnou vyzkouší, místo aby četl diff a představoval si, jak se bude chovat. Design odhalí problémy ještě před mergem. QA přestane být samostatnou fází.
Zároveň jde o položku, která vám nejspíš nenápadně ztrojnásobí účet. Důvodem je jednoduchá aritmetika, kterou v okamžiku zapnutí této funkce nikdo nepočítá.
Matematika
Náklady na preview prostředí rostou s počtem otevřených pull requestů, ne s počtem lidí v týmu ani s počtem mergů.
Čtyřčlenný tým se zdravou review kulturou může mít v libovolném okamžiku otevřených pět až osm PR. Pokud každý z nich vytvoří úplnou kopii vašeho stacku, provozujete vedle produkce dalších pět až osm kopií produkce. Stack, jehož provoz stojí 30 dolarů měsíčně, vás nyní stojí 180–270 dolarů — a nic z toho se neobjevilo v žádném odhadu, protože odhad počítal s jedním prostředím.
A co hůř, otevřené PR korelují s obdobími, kdy si nejméně můžete dovolit překvapení: před releasem, během refaktoringu nebo když je někdo na dovolené a jeho branch zůstane otevřená tři týdny.
Kam peníze skutečně jdou
Ne každá část preview stojí stejně. Právě znalost těchto rozdílů umožňuje náklady udržet pod kontrolou.
Kontejnery aplikace — střední náklady a vyplatí se. To je část, kterou skutečně chcete. Zároveň se dobře škáluje dolů, protože preview nepotřebuje tolik paměti jako produkce.
Databáze — nejdražší část. Dedikovaná databáze pro každé preview je největším přispěvatelem k nákladům a obvykle je nejméně potřebná. Většina review nepotřebuje izolovanou databázi; potřebuje nějakou databázi s věrohodnými daty.
Build minuty — neviditelné a kumulativní. Každý push do otevřeného PR spouští nový build. Branch se čtyřiceti commity během dvou týdnů se buildí čtyřicetkrát. Jde o skutečné náklady, které se nikdy neprojeví jako běžící resource, takže zcela uniknou mentálnímu auditu.
Egress — malé náklady za preview, velké v souhrnu. Preview URL se objevují ve vyhledávání a crawlují se. Crawler, který stahuje vaše assety z osmi preview prostředí, vykonává osmkrát více práce než na produkci — a vy za to všechno platíte.
Čtyři věci, které náklady sníží, aniž byste přišli o výhody
Sdílejte databázi
U většiny změn mohou preview prostředí sdílet jednu databázi naplněnou reprezentativními daty. Izolované databáze si rezervujte pro PR, která je skutečně potřebují — migrace, změny schématu a cokoli destruktivního.
Pravidlo, které se v praxi osvědčuje: izolovaná databáze pouze tehdy, když PR zasahuje do schématu. Všechno ostatní sdílejte.
Zmenšete preview
Preview, které obsluhuje jednoho reviewera, nepotřebuje prostředky jako produkce. Poloviční množství paměti a zlomek CPU reviewera obvykle nijak neomezí, ale náklady výrazně sníží.
dockup resources my-project/my-api --memory 512 --cpu 0.5
Automaticky je ukončujte
Nejvýraznější změna s největším dopadem. Preview by nemělo přežít svůj pull request.
Automatické odstranění po mergi nebo zavření PR je naprostý základ. Týmy zaskočí opuštěné PR — branch, kterou někdo otevřel, přestal řešit a nikdy nezavřel. Tato prostředí pak běží celé měsíce.
Vyplatí se mít maximální dobu existence jako pojistku: každé preview starší například čtrnácti dnů se odstraní bez ohledu na stav PR. Pokud ho někdo potřebuje znovu, stačí jeden příkaz.
Neumožněte jejich indexování
Preview URL se indexují. To je špatně ze dvou důvodů — duplicitní obsah konkuruje vašemu produkčnímu webu a crawlerový provoz na prostředích, která nikdo nepoužívá, platíte ze svého.
dockup noindex my-project/my-api --on
V Dockup jsou PR preview nastavená pro jednotlivé služby a lze je explicitně zapnout nebo vypnout. Nejde o globální nastavení, které byste pouze zdědili:
dockup pr-preview my-project/my-api --on
dockup preview list my-project/my-api --json
dockup preview delete 128 my-project/my-api
Výpis prostředí je část, kterou týmy vynechávají — a později toho litují. Prostředí, která neumíte vypsat, jsou prostředí, za která platíte, aniž byste o tom věděli.
Audit, který se vyplatí dělat jednou měsíčně
Tři otázky, pět minut:
- Kolik preview prostředí běží? Porovnejte to s počtem PR, která jsou skutečně otevřená.
- Jak staré je nejstarší? Cokoli starší než dva týdny je téměř jistě opuštěné.
- Která mají vlastní databázi? Pokud nejde o změnu schématu, vlastní databázi pravděpodobně nepotřebují.
Většina týmů najde alespoň jedno prostředí z PR, které bylo mergnuto před několika měsíci, ale prostředí stále běží a dál generuje náklady.
Jak získat výhody bez nepříjemných překvapení
Nic z toho není argument proti preview prostředím. Jde o to zacházet s nimi jako s infrastrukturou, která má svůj lifecycle, nikoli jako s jedním zaškrtávacím políčkem.
Týmy, které to dělají správně, dodržují tři věci: preview prostředí škálují dolů, automaticky je ukončují a sdílejí vše, co lze bezpečně sdílet. Celkovou stopu preview tak obvykle udrží pod náklady jediného produkčního service — což je cena, při které se jejich používání jednoznačně vyplatí.
Týmy, které náklady zaskočí, jsou ty, které funkci jednou správně zapnuly a už se na seznam nikdy nepodívaly.
Často kladené otázky
Stojí preview prostředí stejně jako produkce? Na jedno prostředí mohou, pokud jsou zřízena identicky. Pokud je zmenšíte a budete sdílet databázi, preview obvykle stojí zlomek produkčních nákladů.
Mělo by mít každé preview vlastní databázi? Pouze tehdy, když změna zasahuje do schématu. Jedna sdílená databáze naplněná testovacími daty pokryje většinu review a odstraní největší nákladovou položku.
Co se stane s preview, když se PR zavře? Mělo by se automaticky odstranit. Pokud se tak nestane, začnou se hromadit prostředí z PR, na která si už nikdo nevzpomíná.
Škodí preview prostředí SEO?
Mohou, pokud se zaindexují — duplicitní obsah pak konkuruje vašim produkčním stránkám. Označte je jako noindex, čímž také zabráníte crawlerům generovat provoz, za který platíte.
