Indeks dnevnikaDockup / bilješka s terena
Note / preview-environment-costs

Koliko preview okruženja zapravo koštaju

Trošak preview okruženja raste s brojem otvorenih pull requestova, a ne s veličinom tima. Saznajte gdje se kriju troškovi, koje dijelove možete dijeliti i kako automatski ukloniti preview okruženja da pet otvorenih PR-ova ne znači pet stackova.

Preview okruženja jedna su od najkorisnijih stvari koje tim može uključiti. Reviewer klikne poveznicu i koristi promjenu umjesto da čita diff i zamišlja kako ona izgleda. Problemi u dizajnu otkrivaju se prije mergea. QA više nije zasebna faza.

Istovremeno, to je stavka koja vam najlakše neprimjetno utrostruči račun, a razlog je jednostavna računica koju nitko ne napravi u trenutku kad uključi tu značajku.

Računica

Trošak preview okruženja raste s brojem otvorenih pull requestova, a ne s brojem ljudi u timu ili brojem mergeova.

Tim od četiri osobe sa zdravom kulturom code reviewa u svakom trenutku može imati otvoreno pet do osam PR-ova. Ako se za svaki od njih pokrene potpuna kopija stacka, uz produkciju pokrećete još pet do osam kopija produkcije. Stack čiji je mjesečni trošak $30 sada košta $180–$270, a ništa od toga nije bilo uključeno u ničiju procjenu jer se procjena odnosila na jedno okruženje.

Još je gore to što se otvoreni PR-ovi najčešće gomilaju upravo u trenucima kada si najmanje možete priuštiti iznenađenja: prije izdanja, tijekom refactoringa, kada je netko na godišnjem, a njegova grana ostane otvorena tri tjedna.

Gdje novac zapravo odlazi

Ne košta svaki dio previewa jednako, a mogućnost kontrole troškova ovisi upravo o tome da znate koji dijelovi koliko koštaju.

Application containeri — umjeren trošak koji se isplati. To je dio koji vam je doista potreban. Ujedno se dobro skalira prema dolje jer previewu nije potrebna količina memorije kao produkciji.

Baze podataka — skupi dio. Zasebna baza podataka za svaki preview najveći je pojedinačni doprinos trošku i obično je najmanje potrebna. Većini reviewa nije potrebna izolirana baza; potrebna im je neka baza s vjerodostojnim podacima.

Build minute — nevidljive i kumulativne. Svaki push na otvoreni PR pokreće novi build. Grana s četrdeset commita tijekom dva tjedna builda se četrdeset puta. To je stvarni trošak koji se nikad ne prikazuje kao resurs koji radi, pa u potpunosti izmiče mentalnoj provjeri.

Egress — malen po previewu, velik u ukupnom iznosu. Preview URL-ovi se otkrivaju i craw­laju. Crawler koji dohvaća vaše assete iz osam preview okruženja radi osam puta više nego na produkciji, a sve to plaćate.

Četiri načina da smanjite trošak bez gubitka vrijednosti

Dijelite bazu podataka

Za većinu promjena previewi mogu dijeliti jednu bazu podataka napunjenu reprezentativnim podacima. Izolirane baze rezervirajte za PR-ove kojima su doista potrebne — migracije, promjene sheme i sve destruktivne operacije.

Pravilo koje u praksi funkcionira: izolirana baza podataka samo kada PR mijenja shemu. Sve ostalo dijeli bazu.

Smanjite preview

Preview koji koristi jedan reviewer ne treba resurse kao produkcija. Pola memorije i djelić CPU-a osobi koja radi review obično neće biti primjetni, a trošak će biti osjetno manji.

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

Automatski ih uklanjajte

Najutjecajnija pojedinačna promjena. Preview ne bi smio nadživjeti svoj pull request.

Automatsko uklanjanje nakon mergea ili zatvaranja PR-a osnovna je funkcionalnost. Ono što timove često iznenadi jest napušteni PR — grana koju je netko otvorio, zatim prestao koristiti i nikad nije zatvorio. Ta okruženja rade mjesecima.

Maksimalna starost važna je zaštitna mjera: svaki preview stariji od, primjerice, četrnaest dana uklanja se neovisno o stanju PR-a. Ako vam ponovno zatreba, možete ga vratiti jednom naredbom.

Uklonite ih iz rezultata pretraživanja

Preview URL-ovi se indeksiraju. To je loše iz dva razloga — duplicirani sadržaj natječe se s vašom produkcijskom web-stranicom, a promet crawlera plaćate na okruženjima koja nitko ne koristi.

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

Na Dockupu se PR previewi konfiguriraju po servisu i mogu se eksplicitno uključiti ili isključiti, umjesto da to bude globalna postavka koju nasljeđujete:

dockup pr-preview my-project/my-api --on
dockup preview list my-project/my-api --json
dockup preview delete 128 my-project/my-api

Popis previewa dio je koji timovi preskaču, a zatim zbog toga požale. Okruženja koja ne možete izlistati ona su za koja plaćate, a da toga niste svjesni.

Provjera koju vrijedi napraviti jednom mjesečno

Tri pitanja, pet minuta:

  1. Koliko je previewa pokrenuto? Usporedite taj broj s brojem PR-ova koji su stvarno otvoreni.
  2. Koliko je star najstariji? Sve starije od dva tjedna gotovo je sigurno napušteno.
  3. Koji previewi imaju vlastitu bazu podataka? Sve što nije promjena sheme vjerojatno je ne treba.

Većina timova pronađe barem jedno okruženje iz PR-a koji je mergean prije nekoliko mjeseci, a koje i dalje radi i i dalje generira trošak.

Iskoristite vrijednost bez neugodnih iznenađenja

Ništa od ovoga nije argument protiv preview okruženja. Riječ je o tome da ih treba tretirati kao infrastrukturu sa životnim ciklusom, a ne kao potvrdni okvir.

Timovi koji ovo rade kako treba imaju tri pravila: previewi se smanjuju, previewi se automatski uklanjaju, a previewi dijele sve što se može sigurno dijeliti. Tako se ukupni footprint preview okruženja obično zadržava ispod troška jednog produkcijskog servisa — a na toj je razini jasno da se isplati.

Timovi koje troškovi iznenade jesu oni koji su značajku jednom uključili, ispravno je konfigurirali i nakon toga više nikad nisu pogledali popis.

Često postavljana pitanja

Koštaju li preview okruženja koliko i produkcija? Po okruženju mogu koštati jednako, ako su pokrenuta s identičnom konfiguracijom. Kada su smanjena i dijele bazu podataka, preview obično košta tek djelić produkcije.

Treba li svaki preview imati vlastitu bazu podataka? Samo kada promjena utječe na shemu. Jedna zajednička baza napunjena testnim podacima pokriva većinu reviewa i uklanja najveći trošak.

Što se događa s previewom kada se PR zatvori? Trebao bi se automatski uništiti. Ako se to ne dogodi, gomilat ćete okruženja iz PR-ova kojih se nitko više ne sjeća.

Štete li preview okruženja SEO-u? Mogu štetiti ako budu indeksirana — duplicirani sadržaj natječe se s vašim produkcijskim stranicama. Označite ih kao noindex, čime ćete zaustaviti i crawlere koji generiraju promet koji plaćate.