Projekat 14 · Podaci i infrastruktura
Smanjenje računa za AWS s 24.000 $ na 2.000 $ mjesečno
Račun za AWS jednog nacionalnog tijela za identitet dizala su tri sasvim različita problema, a nijedan nije izbacio grešku. Ništa nije ugašeno.
Mjesečni troškovi: 24.000 $ → 2.000 $
Priča u 5 koraka
Stack
- AWS
- S3
- Node.js
01 · Kontekst
Na projektu sam prvo pročitao račun za AWS: iznosio je 24.000 $ mjesečno.
Na projektu sam prvo pročitao račun za AWS: iznosio je 24.000 $ mjesečno. Šest mjeseci kasnije isti sistem radio je za 2.000 $ mjesečno.
Ništa nije ugašeno, a proizvod je radio isti posao za iste korisnike. Ušteda je došla od tri odvojena problema: sve je bilo predimenzionisano, u sistemu su se vrtjele beskonačne petlje, a uploadi su išli kroz backend. Svaki je druge vrste i svaki se pronalazi na drugačiji način, pa je korisnije znati o kojoj se vrsti radi nego koliki je ukupan iznos.
Istraživanje kompanije Flexera iz 2026. godine, provedeno na 753 organizacije, procjenjuje da se 29% potrošnje na cloud baci, a 85% tih organizacija navodi upravljanje tom potrošnjom kao jedan od glavnih izazova. Na ovom projektu bacalo se daleko više od 29%: račun je bio oko osam puta veći od onoga što je opterećenje tražilo.
02 · Nije se smjelo mijenjati
Ništa u sistemu nije bilo pokvareno tako da bi to iko primijetio.
Ništa u sistemu nije bilo pokvareno tako da bi to iko primijetio.
Višak na računu za cloud teško se uoči i dugo potraje jer ništa ne pokvari. Na spor endpoint neko se požali i job koji pada podigne alarm, ali predimenzionisana instanca, beskonačna petlja ili loše postavljena putanja za upload rade normalno, mjesec za mjesecom, a vi ih plaćate.
Dok se ne postavi alarm na budžet, ovakav višak može se pronaći samo tako da neko namjerno pregleda račun.
03 · Šta sam uradio
Predimenzionisanje. Problem dimenzionisanja našao sam tako što sam uporedio zakupljeni kapacitet sa stvarnom upotrebom.
Predimenzionisanje. Problem dimenzionisanja našao sam tako što sam uporedio zakupljeni kapacitet sa stvarnom upotrebom. Sve je bilo predimenzionisano, i instance i baza. To je rijetko nemar: neko dimenzioniše okruženje pri lansiranju, kad niko ne zna kakvo će biti opterećenje, ostavi veliku rezervu, i to s pravom. Onda opterećenje postane poznato, a niko se tome ne vrati, jer sve radi, a uvijek ima nešto hitnije.
Beskonačne petlje. Kvar sam našao tražeći trošak koji ne prati saobraćaj. Petlje u sistemu neprekidno su trošile procesorsko vrijeme, a neko ih je mjesec za mjesecom plaćao ne znajući da postoje. Bile su to prave beskonačne petlje, a ne hot path ili neefikasan upit. Predimenzionisanje se vidi kao niska iskorištenost, a proces koji se otrgao kontroli kao visoka iskorištenost koju niko ne može povezati ni sa čim što korisnici rade.
Uploadi kroz backend. Arhitektonski uzrok našao sam čitajući kod. Uploadi su do S3 išli preko backenda, iako su mogli ići direktno s klijentske strane. Svaka fotografija, lica ili dokumenta, stizala je na server, zauzimala njegovu memoriju dok traje prenos i tek onda išla dalje. U ovom sistemu svaki podneseni zahtjev je upload, pa je upload bio glavni tok cijelog proizvoda.
Upload kroz backend vezao je memoriju instanci za broj istovremenih uploada, slao svaki bajt dvaput preko mreže i ograničio propusnost na ono što aplikacijski server može podnijeti, iako je S3 napravljen da primi daleko više.
Ovakav uzrok ne vidi se ni na jednom dashboardu, pa se najčešće pronađe posljednji, a obično je i najveći od ta tri.
04 · Rezultat
Mjesečni troškovi: 24.000 $ → 2.000 $
- Mjesečni troškovi: 24.000 $ → 2.000 $
- Račun je bio oko osam puta veći od onoga što je opterećenje stvarno tražilo, a na kraju je pao još niže, sa 24.000 $ na 2.000 $, što je dvanaest puta manje
- Svaki od tri uzroka pronađen je na drugi način, a nijedan se nije pojavio kao greška
05 · Šta bih uradio drugačije
Developer nije trebao biti prvi koji će primijetiti prevelik račun.
Developer nije trebao biti prvi koji će primijetiti prevelik račun. Niko ga nije pratio i ništa nije javilo kad je narastao. Alarm na budžet ne košta ništa i uhvatio bi beskonačne petlje već u prvoj sedmici, a ne u pedesetoj.
Povezane usluge
Usluge koje se oslanjaju na ovaj projekat.
- Cloud i DevOpsPregled troškova cloudaNacionalni sistem identiteta u Zapadnoj Africi imao je sve tri vrste uzroka, a nijedan od njih nije izazvao grešku. Za šest mjeseci mjesečni račun pao je s 24.000 $ na 2.000 $, uz iste korisnike i isti obim posla. U odnosu na ono što je sistemu stvarno trebalo, račun je bio otprilike osam puta veći, a konačno smanjenje je dvanaestostruko.
- Cloud i DevOpsAWS arhitekturaNacionalni sistem identiteta jedne zapadnoafričke države: račun za isti obim posla spustio se s 24.000 $ na 2.000 $ mjesečno, a ništa nije ugašeno.
- Kako možemo sarađivatiTehnički due diligenceNacionalni sistem za identitet u Zapadnoj Africi, s tri uzroka viška troškova: dimenzionisanje, kvar i arhitektura. Nijedan se nije pokazao kao greška, a mjesečni trošak spustio se s 24.000 $ na 2.000 $.
Povezani tekstovi
Tekstovi nastali iz ovog projekta.
- 19 OCT 2026 · 4 minTehnički due diligence: prvo pročitajte račun, pa kodPrije nego što kupite ili finansirate proizvod, račun za cloud pokaže šta sistem stvarno radi. Kako čitam nepoznat sistem i šta procjena sadrži.
- 9 APR 2026 · 4 minAWS račun s 24.000 $ na 2.000 $ mjesečno: tri uzroka koja sam našaoPredimenzionisane instance, beskonačne petlje i upload preko backenda mjesecima nisu javili grešku. Kako ih otkriti i šta prvo provjeriti na računu za AWS.
- 11 MAR 2026 · 3 minUpload direktno na S3 s potpisanim URL-om, umjesto preko backendaPedeset istovremenih uploada od 4 MB preko servera drži 200 MB RAM-a i dvaput prelazi mrežu. Kako potpisati petominutni URL za upload na S3 i provjeriti fajl.
Projekat 14
Radite na sličnom problemu? Odgovaramo u roku od jednog radnog dana.
Prvi poziv traje 30 minuta i ni na šta vas ne obavezuje.