See the engineering behind real-time personalization at Tripadvisor’s massive (and rapidly growing) scale Τι είδους ταξιδιώτης είστε; Το TripAdvisor προσπαθεί να το αξιολογήσει αυτό μόλις συνδεθείτε με τον ιστότοπο και στη συνέχεια να σας προσφέρει όλο και πιο σχετικές πληροφορίες σε κάθε κλικ – μέσα σε λίγα χιλιοστά δευτερολέπτου. Σε αυτό το άρθρο, ο Dean Poulin (Tripadvisor Data Engineering Lead στην ομάδα Υπηρεσιών και Προϊόντων AI) δίνει μια ματιά στο πώς ενισχύουν αυτή την εξατομίκευση. Βασίζεται στην ακόλουθη συζήτηση AWS re:Invent: Προ-Ταξίδι Προσανατολισμός Σύμφωνα με τα λόγια του Ντεν... Ας ξεκινήσουμε με ένα γρήγορο στιγμιότυπο του ποιος είναι ο TripAdvisor και η κλίμακα με την οποία δραστηριοποιούμαστε.Το TripAdvisor ιδρύθηκε το 2000 και έχει γίνει παγκόσμιος ηγέτης στον τομέα των ταξιδιών και της φιλοξενίας, βοηθώντας εκατοντάδες εκατομμύρια ταξιδιώτες να σχεδιάσουν τα τέλεια ταξίδια τους.Το TripAdvisor παράγει έσοδα άνω των 1,8 δισεκατομμυρίων δολαρίων και είναι μια εταιρεία που διαπραγματεύεται δημοσίως στο χρηματιστήριο NASDAQ.Σήμερα, έχουμε μια ταλαντούχα ομάδα πάνω από 2.800 υπαλλήλων που προωθούν την καινοτομία και η πλατφόρμα μας εξυπηρετεί έναν εκπληκτικό αριθμό 400 εκατομμυρίων μοναδικών επισκεπτών ανά μήνα – έναν αριθμό Σε οποιαδήποτε δεδομένη ημέρα, το σύστημά μας χειρίζεται πάνω από 2 δισεκατομμύρια αιτήματα από 25 έως 50 εκατομμύρια χρήστες. Κάθε κλικ που κάνετε στο Tripadvisor επεξεργάζεται σε πραγματικό χρόνο. Πίσω από αυτό, αξιοποιούμε μοντέλα μηχανικής μάθησης για να σας παρέχουμε εξατομικευμένες συστάσεις – σας φέρνοντας πιο κοντά σε αυτό το τέλειο ταξίδι. Στην καρδιά αυτής της μηχανής εξατομίκευσης είναι η ScyllaDB που τρέχει στο AWS. Αυτό μας επιτρέπει να παρέχουμε καθυστέρηση χιλιοστά δευτερολέπτου σε μια κλίμακα που λίγοι οργανισμοί φτάνουν. . 425K operations per second on ScyllaDB with P99 latencies for reads and writes around 1-3 milliseconds Θα μοιραστώ πώς το TripAdvisor αξιοποιεί τη δύναμη του ScyllaDB, του AWS και της μηχανικής μάθησης σε πραγματικό χρόνο για να παρέχει εξατομικευμένες συστάσεις για κάθε χρήστη. θα διερευνήσουμε πώς βοηθάμε τους ταξιδιώτες να ανακαλύψουν όλα όσα χρειάζονται για να σχεδιάσουν το τέλειο ταξίδι τους: είτε πρόκειται για την ανακάλυψη κρυμμένων κοσμημάτων, αξιοθέατα που πρέπει να δείτε, αξέχαστες εμπειρίες ή τα καλύτερα μέρη για να μείνετε και να φάτε. Προσωπικός προγραμματισμός ταξιδιού Φανταστείτε ότι σχεδιάζετε ένα ταξίδι.Μόλις φτάσετε στην αρχική σελίδα του Tripadvisor, το Tripadvisor γνωρίζει ήδη αν είστε foodie, περιπετειώδης ή λάτρης της παραλίας - και βλέπετε προσαρμοσμένες συστάσεις που φαίνονται εξατομικευμένες στα δικά σας ενδιαφέροντα. Καθώς περιηγείστε στο TripAdvisor, αρχίζουμε να εξατομικεύουμε αυτό που βλέπετε χρησιμοποιώντας μοντέλα μηχανικής μάθησης που υπολογίζουν βαθμολογίες με βάση την τρέχουσα και προηγούμενη δραστηριότητα περιήγησής σας. Προτείνουμε ξενοδοχεία και εμπειρίες που πιστεύουμε ότι θα σας ενδιαφέρουν. Ταξινομούμε ξενοδοχεία με βάση τις προσωπικές σας προτιμήσεις. Προτείνουμε δημοφιλή σημεία ενδιαφέροντος κοντά στο ξενοδοχείο που βλέπετε. Όλα αυτά είναι προσαρμοσμένα με βάση τις προσωπικές σας προτιμήσεις και προηγούμενη δραστηριότητα περιήγησης. Το μοντέλο του TripAdvisor που εξυπηρετεί την αρχιτεκτονική Το Tripadvisor λειτουργεί σε εκατοντάδες ανεξάρτητα κλιμακούμενες microservices στο Kubernetes on-prem και στο Amazon EKS. Αυτή η υπηρεσία πύλης αφαιρεί πάνω από 100 μοντέλα ML από τις Υπηρεσίες Πελάτη – που μας επιτρέπει να εκτελέσουμε δοκιμές A/B για να βρούμε τα καλύτερα μοντέλα χρησιμοποιώντας την πλατφόρμα πειραματισμού μας. Τα μοντέλα ML αναπτύσσονται κυρίως από τους επιστήμονες δεδομένων και τους μηχανικούς μηχανικής μάθησης μας χρησιμοποιώντας τα σημειωματάρια Jupyter στο Kubeflow. Διαχειρίζονται και εκπαιδεύονται χρησιμοποιώντας το ML Flow και τα αναπτύσσουμε στο Seldon Core στο Kubernetes. Το κατάστημα Custom Feature Το Store χαρακτηριστικών εξυπηρετεί κυρίως τα χαρακτηριστικά χρήστη και τα στατικά χαρακτηριστικά. Τα στατικά χαρακτηριστικά αποθηκεύονται στο Redis επειδή δεν αλλάζουν πολύ συχνά. Εκτελούμε καθημερινά αγωγούς δεδομένων για να φορτώσουμε δεδομένα από την αποθήκη δεδομένων εκτός σύνδεσης στο Store χαρακτηριστικών μας ως στατικά χαρακτηριστικά. Οι δυνατότητες χρήστη παρέχονται σε πραγματικό χρόνο μέσω μιας πλατφόρμας που ονομάζεται Πλατφόρμα Επισκεπτών. εκτελούμε δυναμικά ερωτήματα CQL εναντίον του ScyllaDB, και . we do not need a caching layer because ScyllaDB is so fast Το Feature Store μας εξυπηρετεί έως και 5 εκατομμύρια στατικά χαρακτηριστικά ανά δευτερόλεπτο και μισό εκατομμύριο χαρακτηριστικά χρήστη ανά δευτερόλεπτο. Τι είναι ένα χαρακτηριστικό ML; Τα χαρακτηριστικά είναι μεταβλητές εισόδου στα μοντέλα ML που χρησιμοποιούνται για να κάνουν μια πρόβλεψη. Μερικά παραδείγματα στατικών χαρακτηριστικών είναι βραβεία που έχει κερδίσει ένα εστιατόριο ή διευκολύνσεις που προσφέρει ένα ξενοδοχείο (όπως δωρεάν Wi-Fi, φιλικό προς τα κατοικίδια ζώα ή γυμναστήριο). Τα χαρακτηριστικά χρήστη συλλέγονται σε πραγματικό χρόνο καθώς οι χρήστες περιηγούνται στον ιστότοπο. τα αποθηκεύουμε στο ScyllaDB, ώστε να μπορούμε να λαμβάνουμε γρήγορα ερωτήματα. Μερικά παραδείγματα χαρακτηριστικών χρήστη είναι τα ξενοδοχεία που έχουν προβληθεί κατά τα τελευταία 30 λεπτά, τα εστιατόρια που έχουν προβληθεί κατά τις τελευταίες 24 ώρες ή οι κριτικές που έχουν υποβληθεί κατά τις τελευταίες 30 ημέρες. Οι τεχνολογίες που ενισχύουν την πλατφόρμα επισκεπτών Το ScyllaDB βρίσκεται στον πυρήνα της Πλατφόρμας Επισκεπτών. Χρησιμοποιούμε μικροεπιχειρησιακές υπηρεσίες Spring Boot που βασίζονται σε Java για να εκθέσουμε την πλατφόρμα στους πελάτες μας. Αυτό αναπτύσσεται στο AWS ECS Fargate. Εκτελούμε το Apache Spark στο Kubernetes για τις καθημερινές εργασίες διατήρησης δεδομένων μας, τις offline εργασίες μας σε διαδικτυακές εργασίες. Στη συνέχεια χρησιμοποιούμε αυτές τις εργασίες για να φορτώσουμε δεδομένα από την αποθήκη δεδομένων offline μας στο ScyllaDB ώστε να είναι διαθέσιμα στον ζωντανό ιστότοπο. Χρησιμοποιούμε επίσης το Amazon Kinesis για την επεξεργασία γεγονότων ροής παρακολούθησης χρηστών. Η ροή δεδομένων της πλατφόρμας επισκεπτών Το παρακάτω γράφημα δείχνει πώς τα δεδομένα ρέουν μέσα από την πλατφόρμα μας σε τέσσερα στάδια: παραγωγή, πρόσληψη, οργάνωση και ενεργοποίηση. Τα δεδομένα παράγονται από τον ιστότοπό μας και τις εφαρμογές μας για κινητά.Μερικά από αυτά τα δεδομένα περιλαμβάνουν το διάγραμμα ταυτότητας χρηστών διαφόρων συσκευών, τα συμβάντα παρακολούθησης συμπεριφοράς (όπως οι προβολές σελίδων και τα κλικ) και τα γεγονότα ροής που διέρχονται από το Kinesis. Τα microservices της Visitor Platform χρησιμοποιούνται για να εισάγουν και να οργανώνουν αυτά τα δεδομένα. τα δεδομένα στο ScyllaDB αποθηκεύονται σε δύο χώρους-κλειδιά: Ο χώρος-κλειδί Visitor Core, ο οποίος περιέχει το γράφημα ταυτότητας επισκέπτη Ο χώρος-κλειδί μετρήσεων επισκεπτών, ο οποίος περιέχει γεγονότα και μετρήσεις (τα πράγματα που έκαναν οι άνθρωποι καθώς περιηγούνταν στον ιστότοπο) Χρησιμοποιούμε καθημερινές διαδικασίες ETL για τη συντήρηση και τον καθαρισμό των δεδομένων στην πλατφόρμα. παράγουμε Προϊόντα Δεδομένων, σφραγισμένα καθημερινά, στην αποθήκη δεδομένων εκτός σύνδεσης – όπου είναι διαθέσιμα για άλλες ενοποιήσεις και άλλους αγωγούς δεδομένων για χρήση στην επεξεργασία τους. Εδώ είναι μια ματιά στην Πλατφόρμα Επισκεπτών από τους αριθμούς: Γιατί δύο βάσεις δεδομένων; Η διαδικτυακή μας βάση δεδομένων επικεντρώνεται στην κυκλοφορία ιστότοπων σε πραγματικό χρόνο. η ScyllaDB εκπληρώνει αυτόν τον ρόλο παρέχοντας πολύ χαμηλές καθυστερήσεις και υψηλή ροή. Χρησιμοποιούμε βραχυπρόθεσμες TTLs για να αποτρέψουμε την ανάπτυξη των δεδομένων στην ηλεκτρονική βάση δεδομένων επ 'αόριστον και οι εργασίες διατήρησης δεδομένων μας εξασφαλίζουν ότι διατηρούμε μόνο δεδομένα δραστηριότητας χρηστών για πραγματικούς επισκέπτες. το Tripadvisor.com λαμβάνει πολλή ροή ροών και δεν θέλουμε να αποθηκεύουμε τα δεδομένα τους και να προσπαθούμε να εξατομικεύσουμε τα bots - γι 'αυτό διαγράφουμε και καθαρίζουμε όλα αυτά τα δεδομένα. Η αποθήκη δεδομένων εκτός σύνδεσης διατηρεί τα ιστορικά δεδομένα που χρησιμοποιούνται για την αναφορά, τη δημιουργία άλλων προϊόντων δεδομένων και την κατάρτιση των μοντέλων ML. Δεν θέλουμε μεγάλες διαδικασίες δεδομένων εκτός σύνδεσης που να επηρεάζουν την απόδοση του ζωντανού ιστότοπού μας, οπότε έχουμε δύο ξεχωριστές βάσεις δεδομένων που χρησιμοποιούνται για δύο διαφορετικούς σκοπούς. Πλατφόρμα επισκεπτών Microservices Χρησιμοποιούμε 5 microservices για την Πλατφόρμα Επισκεπτών: Το Visitor Core διαχειρίζεται το διάγραμμα ταυτότητας χρηστών μεταξύ συσκευών με βάση τα cookies και τα αναγνωριστικά συσκευών. Η μέτρηση επισκεπτών είναι η μηχανή ερωτήσεων μας, η οποία μας παρέχει τη δυνατότητα να αποκαλύπτουμε γεγονότα και μετρήσεις για συγκεκριμένους επισκέπτες. Χρησιμοποιούμε μια γλώσσα ειδικού τομέα που ονομάζεται γλώσσα ερωτήματος επισκεπτών, ή VQL. Αυτό το παράδειγμα VQL σας επιτρέπει να δείτε τα τελευταία γεγονότα κλικ στο εμπόριο τις τελευταίες τρεις ώρες. Ο Visitor Publisher και ο Visitor Saver χειρίζονται τη διαδρομή γραφής, γράφοντας δεδομένα στην πλατφόρμα.Εκτός από την αποθήκευση δεδομένων στο ScyllaDB, μεταδίδουμε επίσης δεδομένα στην αποθήκη δεδομένων εκτός σύνδεσης. Το Visitor Composite απλοποιεί τη δημοσίευση δεδομένων σε εργασίες επεξεργασίας παρτίδων. Αφαίρεση του Visitor Saver και του Visitor Core για τον προσδιορισμό των επισκεπτών και τη δημοσίευση γεγονότων και μετρήσεων σε μια ενιαία κλήση API. Μικροεξυπηρέτηση Roundtrip Latency Αυτό το γράφημα δείχνει πώς οι καθυστερήσεις μικροεξυπηρέτησης παραμένουν σταθερές με την πάροδο του χρόνου. Η μέση καθυστέρηση είναι μόνο 2,5 χιλιοστά δευτερολέπτου και το P999 είναι κάτω από 12,5 χιλιοστά δευτερολέπτου. Οι πελάτες μικροεξυπηρέτησης μας έχουν αυστηρές απαιτήσεις καθυστέρησης. το 95% των κλήσεων πρέπει να ολοκληρωθούν σε 12 χιλιοστά δευτερολέπτου ή λιγότερο. Βαθμολογία Latency Εδώ είναι ένα στιγμιότυπο της απόδοσης του ScyllaDB σε τρεις ημέρες. Στην κορυφή, το ScyllaDB χειρίζεται 340.000 λειτουργίες ανά δευτερόλεπτο (συμπεριλαμβανομένων των γραπτών και αναγνώσεων και διαγραφών) και η CPU κυμαίνεται σε μόλις 21%. Το ScyllaDB μας παρέχει μικροδευτερόλεπτα γραφής και ανάγνωσης χιλιοστά δευτερολέπτων.Αυτό το επίπεδο γρήγορης απόδοσης είναι ακριβώς ο λόγος που επιλέξαμε το ScyllaDB. Διαχωρισμός δεδομένων σε ScyllaDB Αυτή η εικόνα δείχνει πώς χωρίζουμε τα δεδομένα σε ScyllaDB. Το Visitor Metric Keyspace έχει δύο πίνακες: Fact και Raw Metrics. Το κύριο κλειδί στον πίνακα Fact είναι το Visitor GUID, το Fact Type και το Created At Date. Το σύνθετο κλειδί διαχωρισμού είναι το Visitor GUID και το Fact Type. Το κλειδί ομαδοποίησης είναι το Created At Date, το οποίο μας επιτρέπει να ταξινομήσουμε τα δεδομένα σε διαχωρισμούς με βάση την ημερομηνία. Η στήλη χαρακτηριστικών περιέχει ένα αντικείμενο JSON που αντιπροσωπεύει το γεγονός που συνέβη εκεί. Μερικά παραδείγματα γεγονότων είναι οι όροι αναζήτησης, οι προβολές σελίδων και οι κρατήσεις. Χρησιμοποιούμε τη Στρατηγική Leveled Compaction της ScyllaDB επειδή: Είναι βελτιστοποιημένο για ερωτήματα εύρους Αντιμετωπίζει την υψηλή καρδινικότητα πολύ καλά Είναι καλύτερο για βαριά ανάγνωση φορτία εργασίας, και έχουμε περίπου 2-3 φορές περισσότερες αναγνώσεις από ό, τι γράφει Γιατί το ScyllaDB; Η λύση μας κατασκευάστηκε αρχικά χρησιμοποιώντας το Cassandra on-prem. Αλλά καθώς η κλίμακα αυξήθηκε, το ίδιο και το λειτουργικό βάρος. Χρειάστηκε ειδική υποστήριξη λειτουργιών για να διαχειριστούμε τις αναβαθμίσεις της βάσης δεδομένων, τα αντίγραφα ασφαλείας κ.λπ. Επίσης, η λύση μας απαιτεί πολύ χαμηλές καθυστερήσεις για τα βασικά στοιχεία. Το σύστημα διαχείρισης ταυτότητας χρηστών μας πρέπει να προσδιορίσει τον χρήστη μέσα σε 30 χιλιοστά δευτερόλεπτα – και για την καλύτερη εξατομίκευση, χρειαζόμαστε την πλατφόρμα παρακολούθησης συμβάντων να ανταποκριθεί σε 40 χιλιοστά δευτερόλεπτα. Είναι κρίσιμο το γεγονός ότι η λύση μας δεν εμποδίζει την Εκτελέσαμε μια δοκιμασία της ιδέας με το ScyllaDB και βρήκαμε ότι η απόδοση ήταν πολύ καλύτερη από την Cassandra και η λειτουργική επιβάρυνση εξαλείφθηκε. Θέλαμε μια πλήρως διαχειριζόμενη επιλογή, οπότε μετακινήσαμε από το Cassandra στο ScyllaDB Cloud, ακολουθώντας μια στρατηγική διπλής γραφής. Αυτό μας επέτρεψε να μετακινηθούμε με μηδενικούς χρόνους διακοπής, ενώ χειριζόμασταν 40.000 εργασίες ή αιτήματα ανά δευτερόλεπτο. Αυτό το διάγραμμα δείχνει πώς μοιάζει η ανάπτυξη BYOA του ScyllaDB. Στο κέντρο του διαγράμματος, μπορείτε να δείτε ένα σύμπλεγμα ScyllaDB 6 κόμβων που εκτελείται σε EC2. Το ScyllaDB Monitor μας δίνει πίνακες παρακολούθησης Grafana καθώς και μετρήσεις Prometheus. Το ScyllaDB Manager φροντίζει για την αυτοματοποίηση της υποδομής, όπως η ενεργοποίηση αντιγράφων ασφαλείας και επισκευών. Με αυτή την ανάπτυξη, η ScyllaDB θα μπορούσε να τοποθετηθεί πολύ κοντά στις μικρουπηρεσίες μας για να μας δώσει ακόμη χαμηλότερες καθυστερήσεις καθώς και πολύ υψηλότερη ροή και απόδοση. Συνοψίζοντας, ελπίζω τώρα να έχετε μια καλύτερη κατανόηση της αρχιτεκτονικής μας, των τεχνολογιών που τροφοδοτούν την πλατφόρμα και πώς το ScyllaDB διαδραματίζει κρίσιμο ρόλο στην ικανότητά μας να χειριστούμε την εξαιρετικά υψηλή κλίμακα του TripAdvisor. Σχετικά με την Cynthia Dunlop Η Cynthia είναι Ανώτερος Διευθυντής Στρατηγικής Περιεχομένου στο ScyllaDB. Έχει γράψει για την ανάπτυξη λογισμικού και τη μηχανική ποιότητας για περισσότερα από 20 χρόνια.