Projekat 04 · Marketplace i prihodi
Američki marketplace prebačen s PHP-a na Node bez prekida rada
Preuzeli smo marketplace koji je stalno padao na dijeljenom hostingu i za četiri godine ga u četiri faze izgradili iznova na AWS-u, a ja sam bio tehnički lider.
nula prekida rada
Četiri faze za četiri godine, nula prekida rada: nijedan prekid nije zabilježen u logovima niti prijavljen
60 → 90+
Lighthouse ocjena performansi 60 → 90+ i SEO 30 → 90+ nakon prelaska javnog sajta na Next.js
90% brže
Dvadeset najsporijih upita
Priča u 5 koraka
Stack
- Node.js
- React
- Next.js
- Expo
- MySQL
- OpenSearch
- InfluxDB
- Redis
- AWS
01 · Kontekst
Riječ je o američkom marketplaceu koji povezuje vozače kamiona i vozne parkove sa servisima za popravke, šlepanje i gume.
Riječ je o američkom marketplaceu koji povezuje vozače kamiona i vozne parkove sa servisima za popravke, šlepanje i gume. Kad smo ga preuzeli, radio je na PHP-u, na dijeljenom hostingu koji se nije skalirao, redovno je padao, a SQL injection je stizao do produkcije.
Posao je išao u četiri faze: dva mjeseca stabilizacije, dvije godine ponovne izgradnje, zajednički dizajn sistem i na kraju AI ugrađen u svakodnevni rad tima. Proizvod nije pao ni u jednoj od njih.
Na ovom projektu najviše sam ponosan na analitiku, više nego na samu migraciju. Platforma je primala preko dva miliona upisa dnevno, oglašivači su ih pratili uživo na svom dashboardu, a godišnji izvještaj se i za najveće klijente vraćao za manje od sekunde.
02 · Nije se smjelo mijenjati
Marketplace je radio u produkciji i bio je jedini izvor prihoda klijenta.
Marketplace je radio u produkciji i bio je jedini izvor prihoda klijenta. Oglašivači plaćaju da budu vidljivi, pa je svaki sat prekida rada sat koji su platili uzalud. Ništa nismo smjeli isključiti, a sistem nismo mogli ni prepisivati dok radi.
Mobilne aplikacije uticale su na cijelu ponovnu izgradnju, jer smo web kontrolisali, a telefone nismo. Korisnik weba dobije novu verziju čim ponovo učita stranicu. Korisnik mobilne aplikacije ažurira kad mu se prohtije, a gašenje starog backenda kvari aplikaciju koja je već instalirana na nečijem telefonu.
03 · Šta smo uradili
Faza 1: stabilizacija (2 mjeseca). Postojeću PHP aplikaciju prebacili smo na AWS bez prepisivanja.
Faza 1: stabilizacija (2 mjeseca). Postojeću PHP aplikaciju prebacili smo na AWS bez prepisivanja. Dodali smo firewall i zatvorili naslijeđene sigurnosne propuste. Slike smo prebacili u object storage, a slanje maila na red poruka. Indeksirali smo dvadeset najsporijih upita i tako ih ubrzali za 90%.
Bilo je primamljivo odmah sve prepisati, ali smo prvo stabilizovali ono što je donosilo novac, a prepisivanju posvetili sljedeće dvije godine.
Faza 2: ponovna izgradnja (2 godine). Backend je s PHP-a prešao na Node, a kasnije na tipizirani framework. Dashboardi su prešli na React, javni sajt na Next.js, mobilne aplikacije na Expo, a hosting na kontejnere s autoskaliranjem. MySQL smo namjerno zadržali kao fiksnu tačku, jedino što se nije smjelo pomjeriti. Kad se jezik, framework, hosting i mobilni stack mijenjaju u isto vrijeme, treba vam nešto što ostaje isto, da biste mogli dokazati da se nova verzija ponaša kao stara.
Podatke smo prebacili skriptom koja ih je preslikala na novu šemu, a triggeri su staru i novu bazu duže od godinu dana držali sinhronizovanim u oba smjera. Oglas napravljen u novom sistemu pojavio bi se u starom, i obrnuto. Stari sistem smo ugasili tek kad je analitika pokazala da ga je napustio i posljednji korisnik. Za rollback je bilo dovoljno promijeniti origin na CDN-u, što traje nekoliko sekundi i ne traži deploy.
Kad je javni sajt prešao na Next.js, Lighthouse ocjena performansi porasla je sa 60 na preko 90, a SEO ocjena sa 30 na preko 90. Posjetioci na platformu dolaze preko organske pretrage, pa se te ocjene direktno vide u prihodu. Amazon je 2006. izmjerio da ga je svakih 100 ms dužeg učitavanja koštalo 1% prodaje, a Walmart je utvrdio da je svaka sekunda ubrzanja podigla konverziju za 2%.
Faza 3: dizajn sistem. Napravili smo preko 200 komponenti u monorepou, zajedničkih za dashboarde i mobilnu aplikaciju. Po platformi se razlikuju samo sporedni efekti, pa se web i mobilna verzija ne mogu razići.
Faza 4: AI u procesu (2026). Inženjerske standarde napisali smo kao izvršna pravila, koja su se provjeravala prije svakog commita i ponovo u CI-ju. Svaki codebase dobio je svoj skup pravila, jer bi jedan skup za backend i biblioteku komponenti za jedno bio previše labav, a za drugo previše strog. Claude Code se svakodnevno koristio za komponente, testove i integracije, a dizajn je bio povezan s Figmom.
Analitika u sve četiri faze. Ovaj dio sistema morao je primati preko dva miliona upisa dnevno, svakom oglašivaču držati dashboard ažurnim uživo i za manje od sekunde vratiti izvještaj za cijelu godinu, čak i za klijente s više od 900 oglasa. Malo koja baza ispuni sva tri zahtjeva, jer je baza napravljena za brze upise obično spora na složenim upitima, a godina sirovih podataka pri ovom obimu znači stotine miliona redova.
Posao smo podijelili na dvije baze. Upisi su išli u bazu vremenskih serija, čiji smo indeks namjerno držali malim. Jednom dnevno događaji svakog oglasa sažimali su se u jedan red u MySQL-u, a dashboard i fakture čitali su te redove. Sirovi događaji čuvali su se sedam dana, a zatim su išli u arhivu. Godišnji izvještaj ih uopšte nije čitao: sabirao je 365 dnevnih redova po oglasu.
04 · Rezultat
Četiri faze za četiri godine, nula prekida rada: nijedan prekid nije zabilježen u logovima niti prijavljen
- Četiri faze za četiri godine, nula prekida rada: nijedan prekid nije zabilježen u logovima niti prijavljen
- Lighthouse ocjena performansi 60 → 90+ i SEO 30 → 90+ nakon prelaska javnog sajta na Next.js
- Dvadeset najsporijih upita 90% brže
- Analitika sa 2M+ upisa/dan, prikazom uživo i godišnjim izvještajem za manje od sekunde na 900+ oglasa
- Propusnost tima porasla je za otprilike 50% nakon što je AI ugrađen u proces, prema procjeni na osnovu ciklusa tiketa
- 19 repozitorija, 506 API ruta, 100 modela podataka i 194 migracije, pet vrsta korisnika na jednom codebaseu i četiri baze, svaka izabrana prema namjeni
05 · Šta bismo uradili drugačije
Pustili smo da se sistem razvuče na devetnaest repozitorija bez zajedničkog paketa.
Pustili smo da se sistem razvuče na devetnaest repozitorija bez zajedničkog paketa. Isti helper za red poruka na kraju je kopiran u sedam njih, pa promjena formata poruke znači izmjenu na sedam mjesta. Zajednički interni paket trebali smo napraviti prije petog servisa, a ne tek nakon petnaestog.
Povezane usluge
Usluge koje se oslanjaju na ovaj projekat.
- Web razvojFull-stack web razvojMarketplace u produkciji prešao je s PHP-a na Node.js bez ijednog prekida rada. Lighthouse ocjena porasla je sa 60 na preko 90 nakon prelaska javnog sajta na Next.js.
- Kako možemo sarađivatiDeveloper u vašem timuČetiri godine na američkom marketplaceu istog klijenta, kroz četiri faze rada, od kojih nijedna nije izazvala prekid rada.
- AIRevizija i spašavanje aplikacijeAmerički marketplace koji je redovno padao: PHP na hostingu koji se nije mogao skalirati, a produkcija je bila otvorena za SQL injection. Tokom dva mjeseca stabilizacije, prije nego što je prepisan ijedan red koda, ubrzali smo dvadeset najsporijih upita za 90% i zatvorili sigurnosne propuste. Nova verzija pravila se u naredne dvije godine.
- Kako možemo sarađivatiPreuzimanje aplikacije: dovršetak i lansiranjeNaslijedili smo američki marketplace u produkciji, koji je stalno padao zbog hostinga. Stabilizacija je trajala dva mjeseca, a za četiri godine nije imao nijedan prekid rada.
- Cloud i DevOpsMigracija bez prekida radaAmerički marketplace prešao je s PHP-a na Node.js bez ijednog prekida rada. Dvije baze bile su sinhronizovane u oba smjera više od godinu dana, a povratak nazad bio je promjena origina na CDN-u, gotova za nekoliko sekundi.
- Web razvojMarketplace i logističke platformeIsti marketplace kroz četiri godine i četiri faze rada nijednom nije prestao raditi.
- Web razvojSEO i generisane straniceAmerički marketplace koji zavisi od organske pretrage prebacio je javni sajt na Next.js bez prekida rada, a njegova SEO ocjena porasla je sa 30 na preko 90.
- Web razvojBrzina webaAmerički marketplace na dijeljenom hostingu koji se nije mogao skalirati. U prva dva mjeseca, bez prepisivanja PHP-a, ubrzali smo dvadeset najsporijih upita za 90%. Lighthouse ocjena performansi porasla je sa 60 na preko 90, a SEO ocjena sa 30 na preko 90, nakon što je javni sajt prešao na Next.js.
- Mobilne aplikacijePort sa weba na mobilniNa američkom marketplaceu dashboardi i mobilna aplikacija koriste više od 200 zajedničkih komponenti iz jednog monorepoa. Među platformama se razlikuju samo side effects.
- Backend, podaci i integracijeAPI i backend razvojBackend sa 100 modela podataka i 194 migracije, prebačen s PHP-a na Node.js, a kasnije na tipiziran framework. Proizvod je sve vrijeme bio dostupan, bez ijednog prekida rada.
- Backend, podaci i integracijeOptimizacija SQL-a i data warehouseaKada smo preuzeli marketplace čiji hosting nije mogao pratiti rast, u prva dva mjeseca indeksirali smo njegovih dvadeset najsporijih upita i ubrzali ih za 90%.
- Backend, podaci i integracijeEmail infrastrukturaSlanje pošte na marketplaceu koji je bio u radu prebacili smo u red u prva dva mjeseca stabilizacije, dok se još ništa nije prepisivalo.
- Regulisani i osjetljivi sistemiSigurnosna revizijaPreuzeli smo marketplace u kojem je SQL injection stizao do produkcije. U prva dva mjeseca, prije nego što je išta prepisano, dodali smo firewall i zatvorili naslijeđene sigurnosne rupe.
- Cloud i DevOpsAWS arhitekturaAmerički marketplace prebačen je s dijeljenog hostinga na AWS za dva mjeseca, a kasnije na kontejnere s autoscalingom. Nijednom nije bilo prekida rada.
- Cloud i DevOpsDocker, self-hosting i backupiAmerički marketplace počeo je na dijeljenom hostingu i prešao na kontejnere s autoscalingom, a da proizvod nijednom nije prestao raditi.
- Dizajn sistemiDizajn sistem i biblioteka komponentiViše od 200 komponenti u monorepou američkog marketplacea za usluge kamionima. Napravljene su dok je proizvod radio, a koriste ih i dashboardi i mobilna aplikacija.
- Kako možemo sarađivatiTehničko vođstvoČetiri godine kao tehnički lider na američkom marketplaceu: tim od dvanaest ljudi i puna odgovornost za arhitekturu, roadmap, zapošljavanje i odnos s klijentom. Kroz četiri faze rada sistem nijednom nije prestao raditi.
Povezani tekstovi
Tekstovi nastali iz ovog projekta.
Projekat 04
Radite na sličnom problemu? Odgovaramo u roku od jednog radnog dana.
Prvi poziv traje 30 minuta i ni na šta vas ne obavezuje.