TikTok inženjerski tim pronašao je način da uštedi više od 300.000 dolara godišnje optimizacijom sopstvenog backend sistema. Umesto da kompletno prepišu servis, odlučili su da samo ključne Go API-je zamene Rust kodom, što je donelo drastično bolje performanse i manju potrošnju resursa.
Kada su TikTok API servisi za plaćanja počeli da obrađuju više od 100.000 zahteva u sekundi, Go runtime se našao pod ozbiljnim opterećenjem. CPU je postao usko grlo sistema, a dodatna optimizacija Go koda više nije davala rezultate. Najveći problemi bili su intenzivna serijalizacija i deserijalizacija podataka, pauze zbog garbage collectiona i neefikasna alokacija memorije.
Zbog toga je tim odlučio da testira Rust, poznat po performansama i kontroli memorije bez garbage collectora. Ispostavilo se da je to bio pun pogodak jer je Rust implementacija značajno smanjila opterećenje sistema i ubrzala rad API-ja.
Rust pokazao jasnu prednost u performansama
Rezultati su bili izuzetni. Nakon što su prepisali samo najopterećenije API-je, CPU upotreba pala je za 33%, memorijska potrošnja smanjena za 72%, a p99 latencija skraćena za 76%. Brojevi jasno pokazuju koliko Rust može biti efikasniji u realnim produkcionim uslovima.
Prednost Rust jezika leži u njegovoj arhitekturi. Ne koristi garbage collector, već ima determinističko vlasništvo i poznat životni ciklus objekata. Pored toga, koristi Copy-on-Write strukture koje sprečavaju nepotrebno kopiranje podataka i omogućava zero-cost apstrakcije koje eliminišu dodatni runtime trošak.
Delimična migracija kao idealno rešenje
TikTok inženjeri su odlučili da samo CPU-intenzivne delove sistema prepišu u Rust, dok je ostatak ostao u Go jeziku. Novi servisi su najpre pokrenuti u tzv. shadow režimu, gde su rezultati testirani paralelno bez uticaja na korisnike, sve dok nije potvrđena 100% tačnost i stabilnost.
Ovakav pristup pokazao se kao idealan balans između performansi i održavanja. TikTok je na taj način zadržao jednostavnost Go jezika, a istovremeno iskoristio brzinu i efikasnost Rust implementacije.