Index denníkaDockup / poznámka z terénu
Note / preview-environment-costs

Koľko preview environmenty v skutočnosti stoja

Náklady na preview environmenty rastú s počtom otvorených pull requestov, nie s veľkosťou tímu. Zistite, kde sa náklady skrývajú, ktoré časti môžete zdieľať a ako preview environmenty automaticky ukončovať, aby päť otvorených PR neznamenalo päť celých stackov.

Preview environmenty patria medzi najefektívnejšie nástroje, ktoré môže tím zapnúť. Reviewer klikne na odkaz a zmenu si vyskúša namiesto toho, aby čítal diff a predstavoval si výsledok. Problémy v dizajne sa odhalia ešte pred merge. QA prestáva byť samostatnou fázou.

Zároveň ide o položku, ktorá vám najľahšie potichu strojnásobí účet — a dôvodom je jednoduchá matematika, ktorú pri zapnutí tejto funkcie nikto neurobí.

Matematika

Náklady na preview environment rastú s počtom otvorených pull requestov, nie s počtom ľudí v tíme ani s počtom merge operácií.

Štvorčlenný tím so zdravou kultúrou review môže mať v ľubovoľnom okamihu otvorených päť až osem PR. Ak každý z nich vytvorí úplnú kópiu vášho stacku, popri produkcii prevádzkujete ďalších päť až osem kópií produkcie. Stack, ktorého prevádzka stojí 30 dolárov mesačne, vás teraz stojí 180 až 270 dolárov — a nič z toho sa neobjavilo v odhade, pretože odhad sa týkal jedného environmentu.

Ešte horšie je, že počet otvorených PR rastie práve v obdobiach, keď si môžete najmenej dovoliť prekvapenia: pred releaseom, počas refaktoringu alebo keď je niekto na dovolenke a jeho branch zostane otvorený tri týždne.

Kam peniaze v skutočnosti idú

Nie každá časť preview environmentu stojí rovnako. Keď viete, ktorá je ktorá, môžete náklady dostať pod kontrolu.

Application containers — mierna položka, ktorá sa oplatí. Toto je časť, ktorú skutočne chcete. Zároveň sa dá dobre zmenšiť, pretože preview nepotrebuje toľko pamäte ako produkcia.

Databases — drahá časť. Samostatná databáza pre každé preview je najväčším prispievateľom k nákladom a zvyčajne je najmenej potrebná. Väčšina review nepotrebuje izolovanú databázu — potrebuje nejakú databázu s realistickými dátami.

Build minutes — neviditeľné a kumulatívne. Každý push do otvoreného PR spúšťa nový build. Branch so štyridsiatimi commitmi za dva týždne sa buildne štyridsaťkrát. Ide o skutočné náklady, ktoré sa nikdy nezobrazia ako bežiaci resource, takže úplne uniknú mentálnej kontrole.

Egress — pri jednom preview malý, v súčte veľký. Preview URL adresy objavujú a crawlujú boty. Crawler, ktorý sťahuje vaše assety z ôsmich preview environmentov, vykonáva osemkrát viac práce než pri produkcii — a vy za to všetko platíte.

Štyri opatrenia, ktoré znížia náklady bez straty hodnoty

Zdieľajte databázu

Pri väčšine zmien môžu preview environmenty zdieľať jednu databázu naplnenú reprezentatívnymi dátami. Izolované databázy si nechajte pre PR, ktoré ich skutočne potrebujú — migrácie, zmeny schémy a čokoľvek deštruktívne.

Pravidlo, ktoré v praxi funguje: izolovaná databáza iba vtedy, keď PR zasahuje do schémy. Všetko ostatné zdieľa databázu.

Zmenšite preview

Preview, ktoré obsluhuje jedného reviewera, nepotrebuje resources produkcie. Polovičná pamäť a zlomok CPU sú pre človeka, ktorý robí review, zvyčajne nepostrehnuteľné, no náklady výrazne znížia.

dockup resources my-project/my-api --memory 512 --cpu 0.5

Automaticky ich ukončujte

Ide o zmenu s najväčším vplyvom. Preview by nemalo prežiť svoj pull request.

Automatické odstránenie po merge alebo zatvorení PR je základ. Tímy však najčastejšie zaskočia opustené PR — branch, ktorý niekto otvoril, prestal riešiť a nikdy nezatvoril. Tieto environmenty bežia celé mesiace.

Oplatí sa nastaviť maximálny vek ako poistku: každé preview staršie než napríklad štrnásť dní sa odstráni bez ohľadu na stav PR. Ak ho niekto potrebuje znova, stačí jeden command.

Zabráňte ich indexovaniu vo vyhľadávaní

Preview URL adresy sa indexujú. To je problém z dvoch dôvodov — duplicitný obsah konkuruje vašej produkčnej stránke a crawlerová prevádzka na environmentoch, ktoré nikto nepoužíva, vás stojí peniaze.

dockup noindex my-project/my-api --on

V Dockup sú PR preview nastavené pre jednotlivé services a môžete ich explicitne zapnúť alebo vypnúť. Nejde o globálne nastavenie, ktoré by ste automaticky zdedili:

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 je časť, ktorú tímy vynechávajú — a potom to ľutujú. Environmenty, ktoré nedokážete vypísať, sú environmenty, za ktoré platíte bez toho, aby ste o nich vedeli.

Audit, ktorý sa oplatí robiť raz mesačne

Tri otázky, päť minút:

  1. Koľko preview environmentov beží? Porovnajte to s počtom PR, ktoré sú skutočne otvorené.
  2. Ako starý je najstarší? Čokoľvek staršie než dva týždne je takmer určite opustené.
  3. Ktoré majú vlastnú databázu? Ak nejde o zmenu schémy, vlastnú databázu pravdepodobne nepotrebujú.

Väčšina tímov nájde aspoň jeden environment z PR, ktoré bolo merge-nuté pred niekoľkými mesiacmi — a ktorý stále beží a stále sa účtuje.

Ako získať výhody bez nepríjemných prekvapení

Nič z toho nie je argument proti preview environmentom. Je to argument za ich chápanie ako infraštruktúry so životným cyklom, nie ako jedného checkboxu.

Tímy, ktoré to robia správne, dodržiavajú tri zásady: preview environmenty zmenšujú, automaticky ukončujú a bezpečne zdieľajú všetko, čo sa zdieľať dá. Vďaka tomu sa celý footprint preview zvyčajne udrží pod nákladmi jedinej produkčnej služby — teda na úrovni, pri ktorej je jeho hodnota úplne zrejmá.

Tímy, ktoré nepríjemne prekvapia náklady, sú tie, ktoré túto funkciu raz správne zapli a potom už nikdy nepozreli zoznam environmentov.

Často kladené otázky

Stoja preview environmenty toľko ako produkcia? Na jeden environment môžu stáť rovnako, ak ich vytvoríte s identickou konfiguráciou. Ak ich zmenšíte a budú zdieľať databázu, preview zvyčajne stojí len zlomok ceny produkcie.

Malo by mať každé preview vlastnú databázu? Iba vtedy, keď sa zmena týka schémy. Jedna zdieľaná databáza s pripravenými dátami pokryje väčšinu review a odstráni najväčšiu nákladovú položku.

Čo sa stane s preview, keď sa PR zatvorí? Malo by sa automaticky odstrániť. Ak sa tak nestane, začnú sa hromadiť environmenty z PR, na ktoré si už nikto nespomína.

Škodia preview environmenty SEO? Môžu, ak sa zaindexujú — duplicitný obsah začne konkurovať vašim produkčným stránkam. Označte ich ako noindex, čím zároveň zabránite crawlerom generovať prevádzku, za ktorú platíte.