See the engineering behind real-time personalization at Tripadvisor’s massive (and rapidly growing) scale Wat voor soort reiziger ben je? Tripadvisor probeert dit te beoordelen zodra je in contact komt met de site, en biedt je vervolgens steeds meer relevante informatie bij elke klik – binnen enkele milliseconden. In dit artikel geeft Dean Poulin (Tripadvisor Data Engineering Lead op het team AI Service and Products) een blik op hoe ze deze personalisatie mogelijk maken. Het is gebaseerd op de volgende AWS re:Invent talk: Pre-Trip Oriëntatie In de woorden van Dean... Tripadvisor is opgericht in 2000 en is uitgegroeid tot een wereldwijd leider op het gebied van reizen en gastvrijheid, waardoor honderden miljoenen reizigers hun perfecte reizen kunnen plannen. Tripadvisor genereert meer dan $ 1,8 miljard aan inkomsten en is een openbaar beursgenoteerd bedrijf op de NASDAQ-beurs. Op een gegeven dag verwerkt ons systeem meer dan 2 miljard verzoeken van 25 tot 50 miljoen gebruikers. Elke klik die u op Tripadvisor maakt, wordt in realtime verwerkt. Hierna maken we gebruik van machine learning-modellen om gepersonaliseerde aanbevelingen te leveren – waardoor u dichter bij die perfecte reis komt. In het hart van deze personalisatie-engine is ScyllaDB op AWS. Dit stelt ons in staat om millisecondlatentie te leveren op een schaal die maar weinig organisaties bereiken. . 425K operations per second on ScyllaDB with P99 latencies for reads and writes around 1-3 milliseconds We zullen onderzoeken hoe we reizigers helpen alles te ontdekken wat ze nodig hebben om hun perfecte reis te plannen: of het nu gaat om het ontdekken van verborgen juwelen, must-see attracties, onvergetelijke ervaringen of de beste plekken om te verblijven en te dineren. Gepersonaliseerde reisplanning Zodra je op de homepage van Tripadvisor terechtkomt, weet Tripadvisor al of je een foodie, een avonturier of een strandliefhebber bent – en je ziet spot-on-aanbevelingen die gepersonaliseerd lijken op je eigen interesses. Terwijl u door Tripadvisor surft, beginnen we met het personaliseren van wat u ziet met behulp van Machine Learning-modellen die scores berekenen op basis van uw huidige en eerdere surfactiviteit. We raden hotels en ervaringen aan waarvan we denken dat u geïnteresseerd zou zijn. We sorteren hotels op basis van uw persoonlijke voorkeuren. We raden populaire bezienswaardigheden in de buurt van het hotel dat u bekijkt. Deze zijn allemaal afgestemd op uw persoonlijke voorkeuren en eerdere surfactiviteit. Het model van Tripadvisor voor architectuur Tripadvisor draait op honderden onafhankelijk schaalbare microservices in Kubernetes on-prem en in Amazon EKS. Deze gateway-service extrahert meer dan 100 ML-modellen uit de Customer Services - waarmee we A/B-tests kunnen uitvoeren om de beste modellen te vinden met behulp van ons experimentele platform. De ML-modellen worden voornamelijk ontwikkeld door onze Data Scientists en Machine Learning Engineers met Jupyter Notebooks op Kubeflow. Ze worden beheerd en getraind met behulp van ML Flow, en we implementeren ze op Seldon Core in Kubernetes. De Custom Feature Store De Feature Store serveert voornamelijk User Features en Static Features. Static Features worden opgeslagen in Redis omdat ze niet vaak veranderen. Gebruikersfuncties worden in realtime geleverd via een platform genaamd Visitor Platform. We voeren dynamische CQL-verzoeken uit tegen ScyllaDB, en . we do not need a caching layer because ScyllaDB is so fast Onze Feature Store biedt tot 5 miljoen statische functies per seconde en een half miljoen gebruikersfuncties per seconde. Wat is een ML Feature? Functies zijn inputvariabelen voor de ML Modellen die worden gebruikt om een voorspelling te maken. Sommige voorbeelden van Static Features zijn prijzen die een restaurant heeft gewonnen of voorzieningen die door een hotel worden aangeboden (zoals gratis Wi-Fi, huisdiervriendelijk of fitnesscentrum). Gebruikersfuncties worden in realtime verzameld terwijl gebruikers op de site surfen. We slaan ze op in ScyllaDB zodat we bliksemsnelle query's kunnen krijgen. Sommige voorbeelden van gebruikersfuncties zijn de hotels die in de afgelopen 30 minuten zijn bekeken, restaurants die in de afgelopen 24 uur zijn bekeken of beoordelingen die in de afgelopen 30 dagen zijn ingediend. De technologieën die het bezoekersplatform ondersteunen ScyllaDB is de kern van het Visitor Platform. We gebruiken Java-gebaseerde Spring Boot-microservices om het platform aan onze klanten te onthullen. Dit wordt gedistribueerd op AWS ECS Fargate. We voeren Apache Spark op Kubernetes uit voor onze dagelijkse gegevensopslagwerkzaamheden, onze offline naar online banen. Dan gebruiken we die banen om gegevens van onze offline data warehouse in ScyllaDB te laden zodat ze beschikbaar zijn op de live site. We gebruiken ook Amazon Kinesis voor het verwerken van gebruikerstracking-evenementen. De Data Flow van het bezoekersplatform De volgende grafiek toont hoe gegevens door ons platform stromen in vier fasen: produceren, opnemen, organiseren en activeren. Sommige van die gegevens omvatten onze Cross-Device User Identity Graph, Behavior Tracking-evenementen (zoals paginaweergaven en klikken) en streaming-evenementen die door Kinesis gaan. De microservices van Visitor Platform worden gebruikt om deze gegevens in te nemen en te organiseren.De gegevens in ScyllaDB worden opgeslagen in twee keyspaces: De Visitor Core keyspace, die de Visitor Identity Graph bevat De Visitor Metric keyspace, die feiten en metricen bevat (de dingen die mensen deden tijdens het surfen op de site) We produceren Data Products, dagelijks gestempeld, in onze offline data warehouse – waar ze beschikbaar zijn voor andere integraties en andere data pipelines om te gebruiken bij hun verwerking. Hier is een kijkje op Visitor Platform door de cijfers: Waarom twee databases? Onze online databank is gericht op real-time, live website verkeer. ScyllaDB vervult deze rol door zeer lage latenties en hoge doorvoer te bieden. We gebruiken kortetermijn TTL's om te voorkomen dat de gegevens in de online database voor onbepaalde tijd groeien, en onze gegevensopslagjobs zorgen ervoor dat we alleen gebruikersactiviteitsgegevens voor echte bezoekers bewaren. Tripadvisor.com krijgt veel botverkeer, en we willen hun gegevens niet opslaan en proberen bots te personaliseren - dus verwijderen en schoonmaken we al die gegevens. Onze offline data warehouse bewaart historische gegevens die worden gebruikt voor het rapporteren, het maken van andere gegevensproducten en het trainen van onze ML Modellen.We willen geen grootschalige offline data processen die de prestaties van onze live site beïnvloeden, dus we hebben twee afzonderlijke databases die worden gebruikt voor twee verschillende doeleinden. Bezoekersplatform Microservices Wij gebruiken 5 microservices voor het Visitor Platform: Visitor Core beheert de cross-device gebruikersidentiteitsdiagram op basis van cookies en apparaat-ID's. Visitor Metric is onze query engine, en dat biedt ons de mogelijkheid om feiten en metricen voor specifieke bezoekers bloot te leggen.We gebruiken een domeinspecifieke taal genaamd visitor query language, of VQL. Visitor Publisher en Visitor Saver beheren het schrijfpad en schrijven gegevens in het platform. Naast het opslaan van gegevens in ScyllaDB streamen we ook gegevens naar het offline data warehouse. Visitor Composite vereenvoudigt het publiceren van gegevens in batchverwerkingsjobs. Het abstracteert Visitor Saver en Visitor Core om bezoekers te identificeren en feiten en metricen in één API-oproep te publiceren. Roundtrip Microservice Latentie Deze grafiek illustreert hoe onze microservice latencies stabiel blijven na verloop van tijd. De gemiddelde latentie is slechts 2,5 milliseconden en onze P999 is minder dan 12,5 milliseconden. Onze microservice-klanten hebben strikte latencyvereisten. 95% van de oproepen moeten in 12 milliseconden of minder worden voltooid. ScyllaDB Latentie Hier is een snapshot van de prestaties van ScyllaDB over drie dagen. Op zijn piek verwerkt ScyllaDB 340.000 operaties per seconde (inclusief schrijven en lezen en verwijderen) en de CPU zweeft op slechts 21%. ScyllaDB levert microseconden schrijven en milliseconden lezen voor ons. Gegevens partitioneren in ScyllaDB Deze afbeelding toont hoe we gegevens partitioneren in ScyllaDB. De Visitor Metric Keyspace heeft twee tabellen: Fact en Raw Metrics. De primaire sleutel op de Fact-tabel is Visitor GUID, Fact Type en Created At Date. De samengestelde partitie sleutel is de Visitor GUID en Fact Type. De cluster sleutel is Created At Date, waarmee we gegevens in partities kunnen sorteren op basis van datum. De attributenkolom bevat een JSON-object dat de gebeurtenis vertegenwoordigt die zich daar heeft voorgedaan. We gebruiken ScyllaDB's Leveled Compaction Strategie omdat: Het is geoptimaliseerd voor range queries Het behandelt hoge cardinaliteit zeer goed Het is beter voor lastige workloads, en we hebben ongeveer 2-3X meer gelezen dan geschreven Waarom ScyllaDB? Onze oplossing werd oorspronkelijk gebouwd met Cassandra on-prem. Maar naarmate de schaal toeneemt, is ook de operationele belasting toegenomen. Het vereiste toegewijde operationele ondersteuning om de database-upgrades, back-ups, enz. te beheren. Ook vereist onze oplossing zeer lage latenties voor kerncomponenten. Ons User Identity Management-systeem moet de gebruiker binnen 30 milliseconden identificeren – en voor de beste personalisatie hebben we onze Event Tracking-platform nodig om in 40 milliseconden te reageren. Het is van cruciaal belang dat onze oplossing de rendering van de pagina niet blokkeert, zodat onze SLA's erg laag zijn. We hebben een Proof of Concept met ScyllaDB uitgevoerd en vonden dat de doorvoer veel beter was dan Cassandra en de operationele last werd geëlimineerd. We wilden een volledig beheerde optie, dus migreren we van Cassandra naar ScyllaDB Cloud, volgens een dubbele schrijfstrategie. Dat stelde ons in staat om te migreren met nul downtime terwijl we 40.000 operaties of verzoeken per seconde verwerken. Later migreren we van ScyllaDB Cloud naar ScyllaDB's "Bring Your Own Account" -model, waar u het ScyllaDB-team de ScyllaDB-database kunt implementeren in uw eigen AWS-account. Dit diagram toont hoe de BYOA-implementatie van ScyllaDB eruit ziet. In het midden van het diagram ziet u een 6-nodige ScyllaDB-cluster die op EC2 wordt uitgevoerd. ScyllaDB Monitor geeft ons Grafana-dashboards en Prometheus-metricen. ScyllaDB Manager zorgt voor infrastructuurautomatisering zoals het activeren van back-ups en reparaties. Met deze implementatie zou ScyllaDB zeer dicht bij onze microservices kunnen worden geplaatst om ons nog lagere latenties en veel hogere doorvoer en prestaties te geven. Kortom, ik hoop dat je nu een beter begrip hebt van onze architectuur, de technologieën die het platform ondersteunen en hoe ScyllaDB een cruciale rol speelt om ons in staat te stellen om te gaan met de extreem hoge schaal van Tripadvisor. Over Cynthia Dunlop Cynthia is Senior Director of Content Strategy bij ScyllaDB. Ze schrijft al meer dan 20 jaar over softwareontwikkeling en kwaliteitstechniek.