See the engineering behind real-time personalization at Tripadvisor’s massive (and rapidly growing) scale Ce fel de călător sunteți? TripAdvisor încearcă să evalueze acest lucru de îndată ce interacționați cu site-ul, apoi vă oferă informații din ce în ce mai relevante la fiecare clic - într-o chestiune de milisecunde. În acest articol, Dean Poulin (Tripadvisor Data Engineering Lead pe echipa de servicii și produse AI) oferă o privire asupra modului în care acestea alimentează această personalizare. Dean împărtășește un gust al provocărilor tehnice implicate în furnizarea personalizării în timp real la scara masivă (și în creștere rapidă) a TripAdvisor. Se bazează pe următorul discurs AWS re:Invent: Pre-orientație călătorie În cuvintele lui Dean... Fondată în 2000, TripAdvisor a devenit lider mondial în călătorii și ospitalitate, ajutând sute de milioane de călători să-și planifice călătoriile perfecte. TripAdvisor generează venituri de peste 1,8 miliarde de dolari și este o companie cotată public pe bursa NASDAQ. Astăzi, avem o echipă talentată de peste 2.800 de angajați care promovează inovația, iar platforma noastră servește unui număr uimitor de 400 de milioane de vizitatori unici pe lună – un număr care crește continuu. În orice zi, sistemul nostru gestionează peste 2 miliarde de solicitări de la 25 până la 50 de milioane de utilizatori. Fiecare clic pe care îl faceți pe TripAdvisor este procesat în timp real. În spatele acestui lucru, valorificăm modelele de învățare automată pentru a vă oferi recomandări personalizate – aducându-vă mai aproape de călătoria perfectă. În centrul acestui motor de personalizare este ScyllaDB care rulează pe AWS. Acest lucru ne permite să oferim latență de milisecunde la o scară pe care puține organizații o ating. . 425K operations per second on ScyllaDB with P99 latencies for reads and writes around 1-3 milliseconds Vom explora modul în care îi ajutăm pe călători să descopere tot ce au nevoie pentru a-și planifica călătoria perfectă: fie că este vorba de descoperirea bijuteriilor ascunse, a atracțiilor de văzut, a experiențelor de neuitat sau a celor mai bune locuri pentru a rămâne și a mânca. Planificarea călătoriei personalizate Imaginați-vă că planificați o călătorie.De îndată ce ajungeți pe pagina de pornire a TripAdvisor, TripAdvisor știe deja dacă sunteți un foodie, un aventurier sau un iubitor de plajă - și vedeți recomandări la fața locului care par personalizate pentru propriile dvs. interese. Pe măsură ce navigați pe TripAdvisor, începem să personalizăm ceea ce vedeți folosind modele de învățare automată care calculează scorurile pe baza activității dvs. de navigare curente și anterioare. Recomandăm hoteluri și experiențe pe care credem că v-ar interesa. Sortăm hotelurile pe baza preferințelor dvs. personale. Recomandăm puncte de interes populare în apropierea hotelului pe care îl vizualizați. Toate acestea sunt aliniate pe baza propriilor preferințe personale și a activității dvs. de navigare anterioare. Modelul Tripadvisor care servește arhitectura Tripadvisor rulează pe sute de microservices scalabile independent în Kubernetes on-prem și în Amazon EKS. Platforma noastră ML Model Serving este expusă printr-unul dintre aceste microservices. Acest serviciu de poartă abstractează peste 100 de modele ML de la Serviciile clienților – ceea ce ne permite să executăm teste A/B pentru a găsi cele mai bune modele folosind platforma noastră de experimentare. Modelele ML sunt dezvoltate în principal de către oamenii noștri de știință a datelor și inginerii de învățare automată folosind notebook-urile Jupyter de pe Kubeflow. Acestea sunt gestionate și instruite folosind ML Flow, iar noi le implementăm pe Seldon Core în Kubernetes. Magazinul nostru de caracteristici personalizate oferă caracteristici pentru modelele noastre ML, permițându-le să facă predicții exacte. Magazin cu caracteristici personalizate Magazinul de caracteristici servește în primul rând caracteristicilor de utilizator și caracteristicilor statice. Caracteristicile statice sunt stocate în Redis deoarece nu se schimbă foarte des. Rulăm zilnic conducte de date pentru a încărca date din depozitul nostru de date offline în Magazinul nostru de caracteristici ca caracteristici statice. Caracteristicile utilizatorului sunt furnizate în timp real printr-o platformă numită Visitor Platform. Executăm interogări CQL dinamice împotriva ScyllaDB, și . we do not need a caching layer because ScyllaDB is so fast Magazinul nostru de caracteristici oferă până la 5 milioane de caracteristici statice pe secundă și o jumătate de milion de caracteristici de utilizator pe secundă. Ce este o funcție ML? Caracteristicile sunt variabile de intrare pentru modelele ML care sunt folosite pentru a face o predicție. Unele exemple de caracteristici statice includ premii pe care un restaurant le-a câștigat sau facilități oferite de un hotel (cum ar fi Wi-Fi gratuit, prietenos cu animalele de companie sau centru de fitness). Caracteristicile utilizatorului sunt colectate în timp real pe măsură ce utilizatorii navighează pe site. le stocăm în ScyllaDB pentru a putea primi interogări rapide.Unele exemple de caracteristici ale utilizatorului includ hotelurile vizualizate în ultimele 30 de minute, restaurantele vizualizate în ultimele 24 de ore sau recenziile trimise în ultimele 30 de zile. Tehnologii care împuternicesc platforma vizitatorilor ScyllaDB se află în centrul platformei Visitor. Folosim microservicii Spring Boot bazate pe Java pentru a expune platforma clienților noștri. Acest lucru este implementat pe AWS ECS Fargate. Rulăm Apache Spark pe Kubernetes pentru sarcinile noastre zilnice de păstrare a datelor, pentru sarcinile noastre offline la online. Apoi folosim aceste sarcini pentru a încărca date din depozitul nostru de date offline în ScyllaDB, astfel încât acestea să fie disponibile pe site-ul live. De asemenea, folosim Amazon Kinesis pentru a procesa evenimentele de urmărire a utilizatorilor în streaming. Fluxul de date al platformei vizitatorilor Graficul de mai jos arată modul în care datele circulă prin platforma noastră în patru etape: producere, absorbție, organizare și activare. Datele sunt generate de site-ul nostru și de aplicațiile noastre mobile.Unele dintre aceste date includ graficul nostru de identitate al utilizatorului pe dispozitive, evenimentele de urmărire a comportamentului (cum ar fi vizualizările paginilor și clicurile) și evenimentele de streaming care trec prin Kinesis. Datele din ScyllaDB sunt stocate în două spații cheie: Spațiul cheie Visitor Core, care conține Graficul identității vizitatorului Spațiul cheie Visitor Metric, care conține Fapte și Metrice (lucrurile pe care oamenii le-au făcut în timp ce navighează pe site) Folosim procese ETL zilnice pentru a menține și curăța datele din platformă. producem produse de date, ștampilate zilnic, în depozitul nostru de date offline – unde sunt disponibile pentru alte integrări și alte conducte de date pentru a fi utilizate în procesarea lor. Iată o privire la platforma de vizitatori după numere: De ce două baze de date? Bazele noastre de date online se concentrează pe traficul site-ului în timp real, în timp real. ScyllaDB îndeplinește acest rol prin furnizarea de latențe foarte scăzute și de debit ridicat. Folosim TTL-uri pe termen scurt pentru a împiedica creșterea pe termen nelimitat a datelor din baza de date online, iar sarcinile noastre de păstrare a datelor ne asigură că păstrăm numai date despre activitatea utilizatorilor pentru vizitatorii reali. Depozitul nostru de date offline păstrează datele istorice utilizate pentru raportare, crearea altor produse de date și instruirea modelelor noastre ML. Nu vrem ca procesele de date offline la scară largă să afecteze performanța site-ului nostru live, deci avem două baze de date separate utilizate în două scopuri diferite. Platforma vizitatorului Microservices Utilizăm 5 microservices pentru Platforma Vizitatorului: Visitor Core gestionează graficul de identitate al utilizatorului pe dispozitive bazat pe cookie-uri și ID-uri de dispozitiv. Visitor Metric este motorul nostru de interogare, care ne oferă posibilitatea de a expune fapte și metrici pentru vizitatori specifici. Folosim o limbă specifică domeniului numită limbă de interogare a vizitatorilor, sau VQL. Acest exemplu VQL vă permite să vedeți cele mai recente fapte de clic pe comerț în ultimele trei ore. Visitor Publisher și Visitor Saver gestionează calea de scriere, scriind date în platformă. Pe lângă salvarea datelor în ScyllaDB, transmitem, de asemenea, date în depozitul de date offline. Visitor Composite simplifică publicarea datelor în sarcinile de prelucrare a loturilor. Abstractează Visitor Saver și Visitor Core pentru a identifica vizitatorii și pentru a publica fapte și metrici într-o singură apelare API. Roundtrip Microservice cu latență Acest grafic ilustrează modul în care latențele noastre de microservice rămân stabile în timp. Latenta medie este de numai 2,5 milisecunde, iar P999 este sub 12,5 milisecunde. Aceasta este o performanță impresionantă, mai ales având în vedere că procesăm peste 1 miliard de solicitări pe zi. Clienții noștri de microservice au cerințe stricte de latență. 95% din apeluri trebuie să fie finalizate în 12 milisecunde sau mai puțin. ScyllaDB Latență Iată un rezumat al performanței ScyllaDB pe parcursul a trei zile. La vârf, ScyllaDB se ocupă de 340.000 de operațiuni pe secundă (inclusiv scrierea și citirea și ștergerea) și CPU-ul se deplasează la doar 21%. ScyllaDB oferă scrieri de microsecunde și citiri de milisecunde pentru noi. Acest nivel de performanță rapidă este exact de ce am ales ScyllaDB. Partajarea datelor în ScyllaDB Această imagine arată cum împărțim datele în ScyllaDB. Visitor Metric Keyspace are două tabele: Fact și Raw Metrics. Cheia principală din tabelul Fact este Visitor GUID, Fact Type și Created At Date. Cheia de partiție compusă este Visitor GUID și Fact Type. Cheia de cluster este Created At Date, care ne permite să sortăm datele în partiții după dată. Coloana atributelor conține un obiect JSON care reprezintă evenimentul care a avut loc acolo. Folosim strategia de compactare nivelată a ScyllaDB deoarece: Este optimizat pentru interogări de gamă Tratează foarte bine cardinalitatea înaltă Este mai bine pentru sarcinile de lucru greu de citit, și avem aproximativ 2-3X mai multe citiri decât scrie De ce ScyllaDB? Soluția noastră a fost construită inițial folosind Cassandra on-prem. Dar pe măsură ce scara a crescut, a crescut și sarcina operațională. A necesitat suport operațional dedicat pentru a ne permite să gestionăm upgrade-urile bazei de date, backup-urile etc. De asemenea, soluția noastră necesită latențe foarte scăzute pentru componentele de bază. Sistemul nostru de gestionare a identității utilizatorului trebuie să identifice utilizatorul în termen de 30 de milisecunde – și pentru cea mai bună personalizare, avem nevoie de platforma noastră de urmărire a evenimentelor pentru a răspunde în 40 de milisecunde. Este esențial ca soluția noastră să nu blocheze renderarea paginii, astfel încât SLA-urile noastre sunt foarte scăzute. Am executat o Proof of Concept cu ScyllaDB și am constatat că debitul a fost mult mai bun decât Cassandra și sarcina operațională a fost eliminată. Ne-am dorit o opțiune complet gestionată, așa că am migrat de la Cassandra la ScyllaDB Cloud, urmând o strategie de scriere dublă. Acest lucru ne-a permis să migrăm cu zero timp de oprire în timp ce prelucrăm 40.000 de operațiuni sau solicitări pe secundă. Mai târziu, am migrat de la ScyllaDB Cloud la modelul ScyllaDB „Adu-ți propriul cont”, unde puteți avea echipa ScyllaDB să implementeze baza de date ScyllaDB în contul dvs. AWS. Acest lucru ne-a oferit performanțe îmbunătățite, precum și o mai bună confidențialitate a datelor. Această diagramă arată cum arată implementarea BYOA a ScyllaDB. În centrul diagramei, puteți vedea un cluster ScyllaDB cu 6 noduri care rulează pe EC2. ScyllaDB Monitor ne oferă tablouri Grafana, precum și metrice Prometheus. ScyllaDB Manager se ocupă de automatizarea infrastructurii, cum ar fi declanșarea de backup-uri și reparații. Cu această implementare, ScyllaDB ar putea fi co-localizată foarte aproape de microserviciile noastre pentru a ne oferi latențe chiar mai mici, precum și o putere și o performanță mult mai mari. În concluzie, sper că acum aveți o mai bună înțelegere a arhitecturii noastre, a tehnologiilor care alimentează platforma și a modului în care ScyllaDB joacă un rol critic în a ne permite să gestionăm scara extrem de mare a TripAdvisor. Etichetă: Cynthia Dunlop Cynthia este Director Senior de Strategie de Conținut la ScyllaDB. Ea a scris despre dezvoltarea software-ului și ingineria calității de peste 20 de ani.