Case study
Migracija iz clouda na on-prem: vise kontrole, bolji TTFB, bez IO zastoja
Slučaj upotrebe

Cloud nije uvek najbolje dugorocno resenje za stabilan sistem srednjeg opterecenja.
U ovom slucaju cilj nije bio auto-skaliranje, vise-regionalni domet ili brzo horizontalno sirenje. Radno opterecenje je bilo stabilno, predvidivo i vec dobro poznato. Vaznije je bilo upravljanje resursima, performanse skladista i operativna predvidivost.
Migracija je premestila produkcioni Laravel monolit i pratece servise sa nekoliko cloud VPS instanci na namenski on-prem server. Rezultat je bio:
- bez downtime-a tokom migracije
- oko 30% bolji TTFB
- vreme generisanja strane smanjeno sa ~800 ms na ~400 ms
- uklanjanje povremenih, ali bolnih IO zastoja
- potpuna kontrola nad racunarskim resursima, skladistem i virtualizacijom
- oko ista ukupna godisnja cena
Ovaj clanak ne opisuje univerzalno pravilo. Opisuje slucaj upotrebe u kome je prelazak sa cloud VPS-a na namenski server bio racionalnija opcija.
Pocetno stanje
Izvorno okruzenje je bilo izgradjeno na vise cloud VDS/VPS instanci jednog provajdera u jednom regionu.
Aplikacioni stack je ukljucivao:
- Laravel monolit
- Elasticsearch 7.16.3
- MySQL 8.0 kao primarnu bazu
- PostgreSQL 15 prisutan kao deo tekuce tranzicije
- Memcached kao primarni cache sloj
- Redis prisutan, ali jos ne u aktivnoj upotrebi
Radno opterecenje je bilo srednje, sa otprilike 800 konkurentnih konekcija koje su stalno bile prisutne na web sloju. Pošto je Memcached imao hit rate iznad 95%, vecina zahteva nikada nije dospela do teske putanje. To znaci da bi sirova konkurentnost sama po sebi preuvelicala pritisak na backend. U praksi, sistem je imao stabilan saobracajni profil sa relativno malim procentom skupih zahteva koji su stizali do baze i search sloja.
Ovo je upravo tip profila kod koga je predvidivost infrastrukture vaznija od elasticnosti.
Zasto se migrirati sa cloud VPS-a
Okidac nisu bili samo troskovi.
Glavni problemi su bili:
- zastareli operativni sistemi na postojecim VPS cvorovima
- retki, ali stvarni CPU steal problemi
- povremena ozbiljna IO konkurencija van kontrole aplikacije
Najgori deo je bilo ponasanje skladišnog sloja pod opterecenjem od suseda. Tokom kratkih perioda povecanog disk IO-a, host provajdera je mogao efektivno da blokira VPS. Kada bi se to desilo bazi podataka, instanca je mogla da postane delimicno ili potpuno neodgovarajuca. Jedini praktican put za oporavak cesto je bio restart.
Ovo se nije desavalo svake nedelje. Dešavalo se otprilike jednom u dva ili tri meseca. Ali svaki incident je bio bolan i skup na pogresan nacin:
- nestabilnost na strani baze
- 7 do 15 minuta downtime-a
- bez stvarne mogucnosti da se uzrok otkloni iznutra, iz VPS-a
- bez garancije da se nece ponoviti
To je vazna tacka. Problem nije bio prosecan performans. Problem je bio gubitak kontrole nad ponasanjem u najgorem slucaju.
Za stabilan sistem koji generise prihod, to je vaznije od teorijske pogodnosti.
Zasto je on-prem ovde imao smisla
Ova migracija je bila dobar izbor za on-prem zato sto:
- radno opterecenje je bilo stabilno
- autoskaliranje nije bilo potrebno
- sistem je vec imao poznat stabilan resursni otisak
- namensko NVMe skladiste bi u potpunosti uklonilo problem deljenja IO-a
- ukupni trosak pravilno dimenzionisanog namenskog servera bio je otprilike isti kao kombinovani VPS otisak
Nova platforma je bila namenski server sa:
- Xeon Gold CPU
- 128 GB RAM
- 2 NVMe diska u RAID1
- redundantno napajanje u data centru
- duplim mreznim konekcijama
- S3 backup-om preko Restic-a
Radna opterecenja su postavljena na libvirt/KVM, uz upravljanje kroz Ansible role.
Ovo nije “zamena za cloud” u opstем smislu. Ovo je pomeranje ka:
- jacim garancijama za skladiste
- boljoj kontroli na nivou hosta
- jednostavnijem planiranju resursa
- manjoj izlozenosti noisy-neighbor ponasanju
Dizajn migracije
flowchart LR
subgraph SRC["Izvorno okruzenje"]
WEB["Web / podaci aplikacije"]
DB["PostgreSQL 15"]
MDB["MySQL 8.0"]
ES["Elasticsearch"]
end
subgraph PHASE1["Faza 1: sinhronizacija fajlova"]
RSYNC1["rsync 1. prolaz"]
end
subgraph PHASE2["Faza 2: migracija baza"]
MDUMP["mysqldump"]
DUMP[pgdump_all]
MRESTORE["mysql restore"]
RESTORE["psql"]
end
subgraph PHASE3["Faza 3: migracija pretrage"]
SNAP["snapshot"]
SNAPREST["snapshot restore"]
end
subgraph DST["Ciljno okruzenje"]
WEBNEW["Podaci sajta, kod, staticki asset-i"]
MDBNEW["MySQL 8.0"]
DBNEW["PostgreSQL 15"]
ESNEW["Elasticsearch"]
end
subgraph PHASE4["Faza 4: ponovna sinhronizacija fajlova"]
RSYNC2["rsync 2. prolaz"]
end
WEB --> RSYNC1 --> WEBNEW
DB --> DUMP --> RESTORE --> DBNEW
MDB --> MDUMP --> MRESTORE --> MDBNEW
ES --> SNAP --> SNAPREST --> ESNEW
RSYNC2 --> WEBNEW
CUT{"Prekid saobracaja"}
PHASE1 --> PHASE2 --> CUT --> PHASE3
CUT --> PHASE4
Migracija je bila osmisljena za nulti downtime.
Prenos podataka je podeljen po tipu radnog opterecenja:
- podaci sajta, kod i staticki asset-i preko
rsyncu dva prolaza - MySQL i PostgreSQL preko
mysqldump/pg_dumpi restore-a - Elasticsearch preko snapshot-a i restore-a
Ovo je konzervativan pristup, ali je za ovaj slucaj bio odgovarajuci. Cilj nije bila otmena replikaciona topologija. Cilj je bio kontrolisan prenos stanja sa predvidivim prebacivanjem.
Zasto dva prolaza rsync-a
Za fajlove aplikacije i staticki sadrzaj, dvoprolazni rsync smanjuje delta pri finalnoj sinhronizaciji:
- prvi prolaz unapred prenosi veci deo podataka
- drugi prolaz hvata poslednje izmene blizu prebacivanja
To cini finalni prelazak manjim i predvidivijim.
Zasto dump/restore za baze

Za ovu migraciju, dump i restore su obezbedili jednostavan i proverljiv put:
- jasno definisane granice prenosa
- jednostavna validacija
- bez dodatne replikacione kompleksnosti tokom prelaska
Ovo dobro radi kada je plan migracije kontrolisan i kada je operativni prozor pazljivo pripremljen.
Zasto snapshot-i za Elasticsearch
Snapshot i restore je prirodan put za migraciju Elasticsearch-a kada su konzistentnost, mogucnost oporavka i ponovljivost vazniji od ad hoc kopiranja.
To se takodje dobro uklapa u siri cilj prebacivanja sistema na fazan i kontrolisan nacin.
Nova ciljna arhitektura
Ciljno okruzenje je konsolidovalo sistem na namenski host sa virtualizacijom.
To je donelo nekoliko prakticnih prednosti:
- cisto odvajanje radnih opterecenja kroz KVM/libvirt
- infrastruktura upravljana preko Ansible role
- bez deljenja skladista sa nepoznatim susedima
- jednostavnije razumevanje performansi
- lakse buduce upravljanje zivotnim ciklusom
Takodje je poboljsalo granice vlasnistva. Umesto iznajmljivanja skupa apstraktnih VPS delova sa neprozirnim ponasanjem hosta, infrastruktura je postala direktno razumljiva na nivou resursa:
- CPU je poznat
- RAM je poznat
- skladiste je poznato
- granice otkaza su jasnije
- ponasanje backup-a je jasnije
Ovakva predvidivost se cesto potcenjuje sve dok se ne dogodi prvi infrastrukturni incident koji ne moze da se debaguje iznutra, iz VPS-a.
Rezultati
Najvidljivije poboljsanje je bila stabilnost vezana za skladiste.
Na namenskom serveru sa NVMe podrskom, IO opterecenje je sada za ovo radno opterecenje prakticno zanemarljivo. Jos vaznije, nema deljenih suseda koji se takmice za isti fizicki disk podsistem. To je uklonilo tacno onu vrstu incidenta koja je ranije izazivala bolan downtime.
Izmerena poboljsanja su ukljucivala:
- ~30% nizi TTFB
- vreme generisanja strane smanjeno sa ~800 ms na ~400 ms
- efektivno uklanjanje rizika od IO blokiranja na strani provajdera
- potpunu kontrolu resursa na hostu
Ovo je korisna podsetnik: dobitak u performansama ne dolazi uvek iz podesavanja aplikacionog koda. Nekada dolazi iz uklanjanja nepredvidivosti na nivou infrastrukture.
Zasto je ovo finansijski uspelo
Migraciji je dodatno pomoglo povoljno formiranje cene servera. Sezonska ponuda za godisnje placanje omogucila je da se dobije otprilike 1.5x vise sirove server kapacitete za otprilike istu cenu kao prethodni kombinovani VPS setup.
To je vazno zato sto se cloud-to-on-prem rasprave cesto previse pojednostavljeno postavljaju:
- cloud = fleksibilan
- on-prem = jeftiniji ali krut
U stvarnosti, pravo poredjenje nije ideologija. To je oblik radnog opterecenja.
Za stabilan sistem sa:
- predvidivim opterecenjem
- bez zahteva za autoskaliranjem
- jakom cache hit stopom
- latencijom osetljivom na infrastrukturu
- bolnom izlozenoscu shared-tenant IO ponasanju
namenski server moze biti bolje inzenjersko i poslovno resenje.
Kada je cloud i dalje bolji izbor
Ovo nije anti-cloud argument.
Cloud i dalje ima vise smisla kada vam treba:
- brzo skaliranje
- burst-heavy radna opterecenja
- kratkotrajna okruzenja
- ceste promene topologije
- mnogo upravljanih servisa usko integrisanih u arhitekturu
Nijedno od toga nije bio primarni zahtev u ovom slucaju.
Radno opterecenje je bilo stabilno. Potrebe za kapacitetom su bile poznate. Glavni cilj je bio da se ukloni skrivena nestabilnost i povrati kontrola.
Sta se promenilo operativno
Najveci dugorocni dobitak nije bio samo nizi TTFB.
Bio je ovo:
infrastruktura je sada razumljiva i kontrolisana od kraja do kraja.
To znaci:
- manje nepoznanica pod opterecenjem
- vece poverenje u ponasanje skladista
- manje zavisnosti od kvaliteta host scheduling-a na strani provajdera
- predvidivije planiranje buducih promena
To je cesto prava vrednost migracije. Ne samo premestanje. Ne samo hardver. Ne samo cena.
Kontrola.
Prakticne lekcije
Nekoliko lekcija iz ove migracije je siroko primenljivo.
1. Retki incidenti i dalje vaze
Problem koji se pojavljuje jednom u dva ili tri meseca i dalje moze opravdati migraciju ako izaziva downtime u produkciji i ne moze da se otkloni sa vase strane.
2. Stabilna radna opterecenja ne profitiraju automatski od clouda
Ako je potraznja predvidiva i kapacitet je lako modelovati, fleksibilni premijum mozda nije vredan placanja.
3. Deljeni IO je stvaran rizik
Prosecni benchmark-ovi mogu sakriti ponasanje u najgorem slucaju. Deljena konkurencija na skladistu je jedan od najtezih problema za razumevanje iznutra, iz VPS-a.
4. Jednostavniji putevi migracije su cesto bolji
rsync, dump/restore i kretanje zasnovano na snapshot-ovima mozda izgledaju manje glamurozno od slozenijih replikacionih strategija, ali su cesto laksi za proveru i oporavak.
5. Kontrola je deo performansi
Niza latencija i bolji TTFB nisu dosli samo od brzeg NVMe skladista, vec i od uklanjanja neizvesnosti infrastrukture.
Vreme isporuke
Migracija je ukupno trajala malo vise od sedam radnih dana.
Raspored
6 radnih dana je potroseno na pripremu i konfiguraciju ciljnog servera:
- podesavanje hosta
- virtualizacija
- skladiste
- integracija backup-a
- osnovna konfiguracija sistema
- provere spremnosti za migraciju
Preostalo vreme je iskorisceno za dva kontrolisana prebacivanja:
- jedna grupa sajtova je migrirana tokom prve noci
- druga grupa je migrirana tokom druge noci
Prebacivanje je namerno podeljeno u dve servisne grupe kako bi se smanjio rizik i izbeglo premestanje svega u jednom koraku.
To je pojednostavilo planiranje rollback-a i smanjilo domet bilo kog neocekivanog problema.
Isporučeni rezultati
- Pregled postojećeg stanja infrastrukture
- Plan migracije sa podelom servisa i pristupom smanjenja rizika
- Priprema ciljnog namenskog servera
- Osnovno podesavanje virtualizacije sa libvirt / KVM
- Konfiguracija hosta upravljana preko Ansible-a
- Podesavanje skladista na RAID1 NVMe
- Integracija backup-a sa Restic i S3
- Prenos koda, statickih asset-a i podataka sajta
- Migracija MySQL i PostgreSQL preko dump-a i restore-a
- Migracija Elasticsearch-a preko snapshot-a i restore-a
- Kontrolisano prebacivanje u dve odvojene talasne faze
- Post-migraciona validacija i stabilizacija
Zavrsna poruka
Ova migracija je uspela zato sto je uskladila infrastrukturu sa realnoscu radnog opterecenja.
Prelazak sa vise cloud VPS instanci na namenski on-prem server doneo je:
- bolju latenciju
- brze generisanje strane
- uklanjanje IO-zastoja
- migraciju bez downtime-a
- potpunu kontrolu nad resursima hosta
- slican ukupni trosak
To je kljucna tacka.
Najbolja migracija nije “ka cloudu” ili “iz clouda”.
Najbolja migracija je ona koja radno opterecenje smesta u okruzenje koje mu zaista odgovara.
Povezane usluge
FAQ
Zasto prelaziti sa clouda na on-prem ako je cena slicna?
Zato sto cena nije bila jedini problem. Vazniji problem je bilo povremeno ponasanje IO-a na strani provajdera koje je izazivalo nestabilnost u produkciji. Slicna cena uz bolju kontrolu i bolje performanse bila je jaca opcija.
Da li je ovo bio sistem sa velikim opterecenjem?
Tacnije je bilo reci da je to bio srednje opterecen sistem sa stabilnim, kontinuiranim saobracajem. Na web sloju je bilo otprilike 800 konkurentnih konekcija, ali je efikasnost cache-a bila visoka, sa Memcached hit stopom iznad 95%.
Zasto to nije reseno nadogradnjom VPS instanci?
To ne bi uklonilo rizik od suseda niti konkurenciju na strani hosta provajdera. Mozda bi poboljsalo prosecne performanse, ali ne i kontrolu nad ponasanjem IO-a u najgorem slucaju.
Da li je downtime bio potreban?
Ne. Migracija je zavrsena bez downtime-a, uz faznu sinhronizaciju i kontrolisane metode prenosa podataka.
Kada je cloud i dalje bolja opcija?
Cloud je obicno bolji izbor kada su radna opterecenja bursty, kada treba autoskaliranje ili kada se snažno koristi od upravljanih platformskih servisa.