See the engineering behind real-time personalization at Tripadvisor’s massive (and rapidly growing) scale Tripadvisor pokušava da proceni ovo čim se uključite na stranicu, a zatim vam nudi sve relevantnije informacije na svakom kliku – u roku od nekoliko milisekundi. U ovom članku, Dean Poulin (Tripadvisor Data Engineering Lead na AI servisima i proizvodima tim) pruža pogled na to kako oni jačaju ovu personalizaciju. To je zasnovano na sljedećem AWS re:Invent govoru: Orijentacija pre putovanja U Deanovim rečima... Osnovan 2000. godine, TripAdvisor je postao globalni lider u oblasti putovanja i gostoljubivosti, pomažući stotinama miliona putnika da planiraju savršena putovanja. TripAdvisor generira više od 1,8 milijardi dolara prihoda i javno je trgovačko društvo na NASDAQ burzi. Danas imamo talentovan tim od preko 2.800 zaposlenih koji pokreću inovacije, a naša platforma služi zapanjujućim 400 miliona jedinstvenih posjetitelja mesečno – broj koji stalno raste. U svakom danu, naš sistem obrađuje više od 2 milijarde zahtjeva od 25 do 50 miliona korisnika. Svaki klik koji napravite na TripAdvisor se obrađuje u realnom vremenu. Iza toga, koristimo modele strojnog učenja da bismo vam dostavili personalizovane preporuke – što vas približava tom savršenom putovanju. U srcu ovog motora personaliziranja je ScyllaDB koji radi na AWS-u. To nam omogućuje da isporučimo milisekundnu latenciju na skali koju malo organizacija može dostići. . 425K operations per second on ScyllaDB with P99 latencies for reads and writes around 1-3 milliseconds Podijelit ćemo kako TripAdvisor iskoristi moć ScyllaDB-a, AWS-a i strojnog učenja u realnom vremenu kako bi pružio personalizovane preporuke za svakog korisnika. Istražit ćemo kako pomažemo putnicima da otkriju sve što im je potrebno kako bi planirali svoje savršeno putovanje: bilo da se radi o otkrivanju skrivenih dragulja, atrakcija koje treba vidjeti, nezaboravnih iskustava ili najboljih mjesta za boravak i večeru. Lično planiranje putovanja Zamislite da planirate putovanje. čim stignete na Tripadvisor stranicu, Tripadvisor već zna da li ste foodie, avanturista ili ljubitelj plaže – i vidite preporuke na licu mesta koje izgledaju personalizovane za vaše interese. Kako pretražujete TripAdvisor, počinjemo da personaliziramo ono što vidite pomoću modela Machine Learning koji izračunavaju ocjene na osnovu vaše trenutne i prethodne aktivnosti pretraživanja. Preporučujemo hotele i iskustva u kojima mislimo da biste bili zainteresovani. Sortiramo hotele na osnovu vaših ličnih preferencija. Preporučujemo popularne točke interesa u blizini hotela koji pretražujete. Sve su to prilagođene na osnovu vaših osobnih preferencija i prethodne aktivnosti pretraživanja. Tripadvisor model koji služi arhitekturi Tripadvisor radi na stotinama nezavisno skalabilnih mikroslužbi u Kubernetes on-prem i u Amazon EKS. Naša ML Model Serving Platforma je izložena kroz jednu od tih mikroslužbi. Ova usluga vrata izvlači preko 100 ML modela iz usluga klijenata – što nam omogućuje da pokrenemo A/B testove kako bismo pronašli najbolje modele pomoću naše eksperimentalne platforme. ML modele uglavnom razvijaju naši naučnici podataka i inženjeri za strojno učenje koristeći Jupyter beležnice na Kubeflow-u. Oni su upravljani i obučeni pomoću ML Flow-a, a mi ih raspoređujemo na Seldon Core u Kubernetes-u. Custom Feature prodavnica Trgovina funkcijama prvenstveno služi korisničkim funkcijama i statskim funkcijama. Statske funkcije se skladište u Redisu jer se ne mijenjaju često. Svakodnevno pokrećemo podatkovne pipeline kako bismo učitali podatke iz našeg skladišta podataka van mreže u našu Trgovinu funkcijama kao Statske funkcije. Funkcije korisnika pružaju se u realnom vremenu putem platforme koja se zove Platforma posetilaca. Mi izvršavamo dinamičke CQL upite protiv ScyllaDB-a, i . we do not need a caching layer because ScyllaDB is so fast Naša Trgovina funkcijama pruža do 5 miliona statskih funkcija u sekundi i pola miliona korisničkih funkcija u sekundi. Što je ML karakteristika? Funkcije su ulazne varijable za ML Modele koje se koriste za predviđanje. Neki primjeri Static Features su nagrade koje je restoran osvojio ili pogodnosti koje nudi hotel (kao što su besplatan Wi-Fi, kućni ljubimci ili fitness centar). Funkcije korisnika se prikupljaju u realnom vremenu dok korisnici pregledavaju stranicu. Mi ih pohranjujemo u ScyllaDB-u kako bismo mogli da dobijemo brze upite. Neki primjeri funkcija korisnika uključuju hotele pregledane u poslednjih 30 minuta, restorane pregledane u posljednjih 24 sata ili recenzije podnesene u posljednjih 30 dana. Tehnologije koje omogućuju platformu za posetioce ScyllaDB je u srži Platforme posjetitelja. Koristimo Java-based Spring Boot microservices kako bismo izložili platformu našim klijentima. Ovo se implementira na AWS ECS Fargate. Mi pokrećemo Apache Spark na Kubernetes za naše dnevne poslove zadržavanja podataka, naše offline na online poslove. Zatim koristimo te poslove za učitavanje podataka iz našeg offline skladišta podataka u ScyllaDB tako da su dostupni na live lokaciji. Mi takođe koristimo Amazon Kinesis za obradu streaming događaja praćenja korisnika. Promet podataka posetilaca platforme Sljedeći grafikon pokazuje kako se podaci kreću kroz našu platformu u četiri faze: proizvodi, unosi, organizuje i aktivira. Podaci su proizvedeni od strane naše web stranice i naših mobilnih aplikacija. Neki od tih podataka uključuju naš Cross-Device User Identity Graph, Behavior Tracking događanja (kao što su pogledi stranica i klikovi) i streaming događanja koji prolaze kroz Kinesis. Microservices Visitor Platform se koriste za ubrizgavanje i organizovanje ovih podataka. podaci u ScyllaDB se pohranjuju u dva ključna prostora: Ključni prostor posetilaca koji sadrži grafikon identiteta posetilaca Visitor Metric keyspace, koji sadrži činjenice i Metrike (stvari koje su ljudi radili dok su pregledavali stranicu) Mi svakodnevno koristimo ETL procese za održavanje i čišćenje podataka na platformi. Mi proizvode proizvode podataka, štampane svakodnevno, u našem skladištu podataka van mreže – gde su dostupne za druge integracije i druge podatkovne kanale za upotrebu u njihovoj obradi. Evo pogleda na platformi posetilaca po brojevima: Zašto dvije baze podataka? ScyllaDB ispunjava ovu ulogu pružanjem vrlo niskih latencija i visokog prometa. Koristimo kratkoročne TTL-ove da sprečimo da podaci u online bazi podataka rastu na neodređeno vrijeme, a naši poslovi za zadržavanje podataka osiguravaju da čuvamo podatke o aktivnosti korisnika samo za stvarne posjetitelje. Tripadvisor.com dobija mnogo prometa botova, a mi ne želimo da pohranjujemo njihove podatke i pokušavamo da personalizujemo botove – tako da brišemo i očistimo sve te podatke. Naš skladište podataka izvan mreže čuva povijesne podatke koji se koriste za izvještavanje, stvaranje drugih proizvoda podataka i obuku naših modela ML. Ne želimo da veliki procesi podataka izvan mreže utiču na performanse našeg live sajta, pa imamo dvije odvojene baze podataka koje se koriste za dvije različite svrhe. Posjetiteljske platforme Microservices Koristimo 5 mikroservisa za Vizitorsku platformu: Visitor Core upravlja grafom identiteta korisnika između uređaja na osnovu kolačića i ID-ova uređaja. Vizitor Metric je naš motor upita, i to nam pruža mogućnost za izlaganje činjenice i metrikama za određene posetioce. Koristimo domen specifičan jezik zvan jezik upita posjetitelja, ili VQL. Ovaj primer VQL vam omogućuje da vidite najnovije komercijalne činjenice klikova u protekla tri sata. Vizitor Publisher i Visitor Saver upravljaju putom pisanja, pišući podatke u platformu. Pored čuvanja podataka u ScyllaDB-u, mi takođe prenosimo podatke u skladište podataka izvan mreže. Visitor Composite pojednostavljuje objavljivanje podataka u poslovima partijske obrade. Abstrahuje Visitor Saver i Visitor Core kako bi identifikovao posetioce i objavio činjenice i metrike u jednom API pozivu. Roundtrip Microservice latentnost Ovaj grafikon pokazuje kako naše latencije mikroslužbi ostaju stabilne tijekom vremena. Prosječna latencija je samo 2,5 milisekundi, a naš P999 je ispod 12,5 milisekundi. Naši klijenti mikroslužbi imaju stroge zahtjeve za latentnošću. 95% poziva mora biti završeno u 12 milisekundi ili manje. ScyllaDB latentnost Ovo je snimak performansi ScyllaDB-a u tri dana. Na vrhuncu, ScyllaDB obrađuje 340.000 operacija u sekundi (uključujući pisanje i čitanje i brisanje), a CPU se kreće na samo 21%. ScyllaDB isporučuje microsecond piše i milisecond čita za nas. Ovaj nivo blazing brz performanse je upravo zašto smo izabrali ScyllaDB. Prijenos podataka u ScyllaDB Ova slika pokazuje kako podeliti podatke u ScyllaDB. Vizitor Metric Keyspace ima dvije tabele: Fact i Raw Metrics. Primarni ključ na tabeli Fact je Visitor GUID, Fact Type, i Created At Date. Kompozitni ključ za particiju je Visitor GUID i Fact Type. Ključ za klupiranje je Created At Date, što nam omogućava da podatke razvrstamo u particije po datumu. Kolona atributa sadrži JSON objekt koji predstavlja događaj koji se tamo dogodio. Neki primjeri činjenica su Search Terms, Page Views i Bookings. Koristimo ScyllaDB-ovu strategiju nivonog kompaktacije jer: Optimizovana je za upite o rasponu Odlično se nosi s visokim kardinalizmom Bolje je za radna opterećenja teška za čitanje, a imamo oko 2-3X više čitanja nego pisanja Zašto ScyllaDB? Naše rešenje je izvorno izgrađeno pomoću Cassandra on-prem. Ali kako je veličina porasla, tako je i operativno opterećenje. Potrebna je namijenjena podrška za operacije kako bismo mogli upravljati nadogradnjama baze podataka, rezervama itd. Također, naše rešenje zahtijeva vrlo niske latencije za osnovne komponente. Naš sistem za upravljanje korisničkim identitetom mora identificirati korisnika u roku od 30 milisekundi – a za najbolju personalizaciju zahtijevamo da naša platforma za praćenje događaja odgovori u roku od 40 milisekundi. Važno je da naše rješenje ne blokira rendering stranice pa su naši SLA-i vrlo niski. Mi smo pokrenuli Proof of Concept sa ScyllaDB-om i pronašli smo da je prozor mnogo bolji od Cassandre i da je operativno opterećenje eliminirano. Želeli smo potpuno upravljanu opciju, pa smo migrirali iz Cassandre u ScyllaDB Cloud, slijedeći strategiju dvostrukog pisanja. To nam je omogućilo da migriramo sa nultom prekidom pri obradi 40.000 operacija ili zahteva po sekundi. Kasnije smo migrirali iz ScyllaDB Cloud-a u ScyllaDB-ov model „Provedi svoj račun“, gde možete da ScyllaDB tim raspoređuje bazu podataka ScyllaDB-a u svoj AWS račun. Ovaj diagram pokazuje kako izgleda implementacija BYOA za ScyllaDB. U sredini dijagram, možete videti ScyllaDB klaster od 6 čvorova koji radi na EC2. ScyllaDB Monitor nam daje Grafana ploče, kao i Prometheus metrikama. ScyllaDB Manager brine o automatizaciji infrastrukture kao što je pokretanje rezervnih kopija i popravaka. Uz ovu implementaciju, ScyllaDB bi mogao biti ko-lokalizovan vrlo blizu naših mikroservisa kako bi nam dao još niže latencije, kao i mnogo veći protok i performanse. Ukratko, nadam se da sada imate bolje razumijevanje naše arhitekture, tehnologija koje pokreću platformu i kako ScyllaDB igra ključnu ulogu u omogućavanju nam da se nosimo s izuzetno visokim razmjerom TripAdvisor-a. Opširnije o Cynthia Dunlop Cynthia je viši direktor strategije sadržaja u ScyllaDB. Ona je pisala o razvoju softvera i inženjeringu kvaliteta više od 20 godina.