
„Trošak se ne primjećuje. Njemu se ide u pregled.“
Račun je bio osam puta veći nego što je trebalo
Tri uzroka, tri različite vrste, i nijedan nije prijavio grešku.
Prvo što smo uradili na tom projektu bilo je da pročitamo račun za oblak. Iznosio je 24.000 dolara mjesečno. Šest mjeseci kasnije isti sistem radio je za 2.000.
Ništa nije ugašeno. Proizvod je služio iste korisnike koji su radili isti posao. Razlika su bila tri odvojena problema — jedan dimenzioniranja, jedan neispravnosti, jedan arhitekture — i ta razlika je važnija od brojke, jer se svaka vrsta pronalazi drugačije.
Problem
Ograničenje
Šta smo uradili
Problem dimenzioniranja našli smo poređenjem zakupljenog kapaciteta sa stvarnom upotrebom
Sve je bilo predimenzionirano — instance, baza, sve. To je rijetko nemar: neko dimenzionira okruženje na lansiranju kad niko ne zna opterećenje, izabere velikodušno, i to je tada ispravno. Onda opterećenje postane poznato i niko se ne vrati, jer ništa nije u redu a nešto drugo je uvijek prešnije.
Signal: niska iskorištenostNeispravnost smo našli tražeći trošak koji ne prati saobraćaj
U sistemu su radile beskonačne petlje — ne vruća putanja, ne neefikasan upit, nego stvarne petlje koje neprekidno troše resurse i koje je neko plaćao mjesec za mjesecom ne znajući da postoje. Prekomjerno dimenzioniranje se vidi kao niska iskorištenost. Odbjegli proces se vidi kao visoka iskorištenost koju niko ne može pripisati ničemu što korisnik radi.
Signal: ravna kriva noćuArhitektonski uzrok našli smo čitajući kod
Uploadi su išli kroz backend umjesto direktno sa klijenta u objektno skladište. Svaka fotografija — lica, dokumenta — dolazila je na server, zauzimala njegovu memoriju za trajanje zahtjeva, i onda bila poslana dalje. U sistemu gdje je svaki zahtjev za dokument jedan upload, to nije neefikasnost na rubu. To je glavna putanja.
Signal: nijedan — samo kod
Uporedi zakupljeni kapacitet sa iskorištenošću kroz mjesec. Ako baza drži 8% procesora i nikad ne prelazi 25%, to nije rezerva nego odluka koju niko nije revidirao. Trajno je jer se predimenzioniran sistem ponaša besprijekorno: nema simptoma, nema alarma, nema korisnika koji se žali. Jedini signal je faktura, a fakturu niko ne čita.
Rezultat
Ovaj račun nije bio 29% prevelik.
Šta bismo uradili drugačije
Račun nije trebao biti developerovo otkriće. Niko ga nije gledao i ništa nije javilo kad je narastao. Alarm na budžet ne košta ništa i uhvatio bi beskonačne petlje u prvoj sedmici, a ne u pedesetoj.
- AWS
- S3
- Node.js