
„Rub je jedino mjesto gdje se arhitektura stvarno testira.“
Upisi, živo čitanje i godina istorije — izaberi troje
Dva miliona upisa dnevno, čitano živo u kontrolnoj ploči klijenta, sa godišnjim izvještajem koji se vraća ispod sekunde — za naloge sa devet stotina oglasa.
Projektovali smo i izgradili analitički sloj za oglasni marketplace. Primao je preko dva miliona upisa dnevno, hranio kontrolnu ploču koja se osvježavala živo, i odgovarao na punu godinu istorije u manje od sekunde.
Te tri osobine se inače međusobno isključuju. Baza brza u primanju upisa spora je na složenim upitima. Godina sirovih podataka pri tom tempu su stotine miliona redova. Rješenje nije bila brža baza — bilo je odbijanje da jedna baza radi sva tri posla.
Problem
Ograničenje
Šta smo uradili
Vremenska baza za upise, namjerno sa malim indeksom
Identifikatori — oglas, korisnik, uređaj — išli su u polja, ne u tagove. U vremenskoj bazi tagovi su indeksirani a polja nisu; stavljanje ID-a oglasa u tag znači da svaki novi oglas stvara novu seriju i indeks se na kraju uguši. To je najčešći način na koji ove instalacije umiru.
Cijena: nema grupisanja po oglasuDnevni rollup u relacijsku bazu
Sirovi događaji žive sedam dana, sa dnevnim izvozom u objektno skladište kao arhivom. Dnevni sažetak po oglasu slijeće u relacijsku bazu, i to je ono što kontrolna ploča i fakture pitaju. Godišnji izvještaj zato nikad ne dira sirovi red.
365 redova po oglasuMjereno na najgorem slučaju, ne na prosjeku
Ispod sekunde drži za naloge sa preko 900 oglasa — godina dnevnih sažetaka za devet stotina oglasa je oko 330.000 redova agregiranih u jednom upitu. „Ispod sekunde“ ne znači ništa ako nalog ima tri oglasa; rub je jedino mjesto gdje se arhitektura stvarno testira.
330.000 redova u jednom upituUkupne i jedinstvene brojke u odvojenim kantama
Jedinstveni pregledi ključevani po sesiji i po URL-u stranice, da neko ko traži u dva grada ne bude prebrojan kao jedan pregled — tražio je dvije različite stvari. Ukupne su veća brojka i bolje izgledaju; jedinstvene su ono što oglašivaču stvarno kaže koliko ga je različitih ljudi vidjelo. Držanje obje znači da nema šta skrivati.
Nema šta skrivatiBotovi filtrirani na tri sloja
Firewall, poznate adrese, user agent. Na oglasnoj platformi naduta brojka pregleda nije problem tačnosti, nego problem povjerenja. Oglašivač koji vidi pet stotina pregleda i nijedan poziv prestane vjerovati brojci, a onda prestane vjerovati i fakturi.
Povjerenje, ne tačnost
Dva miliona upisa dnevno traži bazu projektovanu za upis. Cijena je što je spora na složenim upitima, pa se posao čitanja ne smije ostaviti njoj. Identifikatori idu u polja a ne tagove: tag po oglasu znači nova serija po oglasu, i indeks se na kraju uguši.
Rezultat
- Preko 2 miliona upisa dnevno
- Živo čitanje u kontrolnoj ploči oglašivača
- Godišnji izvještaj ispod sekunde na 900+ oglasa
- Isti podaci hrane godišnji izvještaj koji ide pred obnovu
Nielsenovi pragovi odziva, nepromijenjeni od 1993. Ispod sekunde nije proizvoljna meta — to je granica ispod koje korisnik ne izgubi nit.
Šta bismo uradili drugačije
Sedam dana zadržavanja sirovih podataka izabrano je rano i nikad revidirano. Skoro sigurno je bilo ispravno, ali nikad nismo provjerili šta smo time izgubili — je li ikome trebalo ponovno obraditi prozor duži od sedmice, i šta bi koštalo zadržati trideset dana. Izabrali smo broj i krenuli dalje.
- InfluxDB
- MySQL
- WebSockets
- Node.js
- AWS