See the engineering behind real-time personalization at Tripadvisor’s massive (and rapidly growing) scale TripAdvisor пытается оценить это, как только вы взаимодействуете с сайтом, а затем предлагает вам все более актуальную информацию на каждом клике — в миллисекунд. В этой статье Дин Поулин (Лидер по технологии данных TripAdvisor в команде AI Services and Products) дает представление о том, как они способствуют этой персонализации. Он основан на следующем AWS re:Invent talk: Предварительная ориентация По словам Дин... Основанная в 2000 году, TripAdvisor стала мировым лидером в области путешествий и гостеприимства, помогая сотням миллионов путешественников планировать свои идеальные поездки. TripAdvisor генерирует более 1,8 миллиарда долларов в доходах и является публично зарегистрированной компанией на фондовой бирже NASDAQ. Сегодня у нас есть талантливая команда из более чем 2800 сотрудников, движущих инновациями, и наша платформа обслуживает удивительных 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 уже знает, являетесь ли вы любителем еды, авантюристом или любителем пляжа - и вы видите рекомендации, которые кажутся персонализированными для ваших интересов. По мере того, как вы просматриваете TripAdvisor, мы начинаем персонализировать то, что вы видите, с помощью моделей машинного обучения, которые рассчитывают баллы на основе вашей текущей и предыдущей активности просмотра. Мы рекомендуем отели и опыты, которые, по нашему мнению, вас заинтересуют. Мы сортируем отели на основе ваших личных предпочтений. Мы рекомендуем популярные достопримечательности вблизи отеля, который вы просматриваете. Все они настроены на основе ваших личных предпочтений и предыдущей активности просмотра. Модель TripAdvisor, служащая архитектуре TripAdvisor работает на сотнях независимо масштабируемых микросервисов в Kubernetes on-prem и в Amazon EKS. Наша платформа ML Model Serving представлена через одну из этих микросервисов. Эта услуга браузерного управления абстрагирует более 100 моделей ML из клиентских служб, что позволяет нам проводить A/B-тесты, чтобы найти лучшие модели с помощью нашей экспериментальной платформы. Модели ML в основном разрабатываются нашими учеными-данными и инженерами-инженерами, использующими ноутбуки Jupyter на Kubeflow. Они управляются и обучаются с помощью ML Flow, и мы развертываем их на Seldon Core в Kubernetes. Магазин Custom Feature Магазин функций в основном обслуживает пользовательские и статические функции. Статические функции хранятся в Redis, потому что они не меняются очень часто. Мы ежедневно запускаем трубопроводы данных, чтобы загружать данные из нашего оффлайн хранилища данных в наш Магазин функций в качестве статических функций. Функции пользователя предоставляются в режиме реального времени через платформу под названием Visitor Platform. Мы выполняем динамические запросы CQL против ScyllaDB, и . we do not need a caching layer because ScyllaDB is so fast Наш магазин функций обслуживает до 5 миллионов статических функций в секунду и полмиллиона пользовательских функций в секунду. Что такое ML Feature? Функции являются входными переменными ML-моделей, которые используются для предсказания. Некоторые примеры статических функций включают награды, которые выиграл ресторан, или удобства, предлагаемые отелем (например, бесплатный Wi-Fi, дружественный к домашним животным или фитнес-центр). Функции пользователя собираются в режиме реального времени, когда пользователи перемещаются по сайту. Мы храним их в ScyllaDB, чтобы мы могли получать молниеносные запросы. Некоторые примеры функций пользователя включают гостиницы, просмотренные за последние 30 минут, рестораны, просмотренные за последние 24 часа, или отзывы, представленные за последние 30 дней. Технологии, способствующие платформе посетителей ScyllaDB находится в основе Visitor Platform. Мы используем микросервисы Spring Boot на базе Java, чтобы раскрыть платформу нашим клиентам. Это развертывается на AWS ECS Fargate. Мы запускаем Apache Spark на Kubernetes для наших ежедневных задач по хранению данных, наших оффлайн-до онлайн-работ. Затем мы используем эти работы для загрузки данных из нашего оффлайн-хранилища данных в ScyllaDB, чтобы они были доступны на живом сайте. Мы также используем Amazon Kinesis для обработки потоковых событий отслеживания пользователей. Поток данных платформы посетителей Следующая графика показывает, как данные протекают по нашей платформе в четыре этапа: производить, поглощать, организовывать и активировать. Некоторые из этих данных включают наш график идентификации пользователей на разных устройствах, события отслеживания поведения (например, просмотры страниц и клики) и события потоковой передачи, которые проходят через Kinesis. Микросервисы Visitor Platform используются для поглощения и организации этих данных.Данные в ScyllaDB хранятся в двух ключевых пространствах: Ключевое пространство Visitor Core, которое содержит график личности посетителя Клиентское метрическое ключевое пространство, которое содержит факты и показатели (вещи, которые люди делали при просмотре сайта) Мы используем ежедневные процессы ETL для поддержания и очистки данных на платформе.Мы производим продукты данных, ежедневно штампованные, в нашем оффлайн хранилище данных – где они доступны для других интеграций и других трубопроводов данных для использования в их обработке. Вот взгляд на платформу посетителей по цифрам: Почему две базы данных? Наша онлайн-база данных ориентирована на трафик веб-сайтов в реальном времени. ScyllaDB выполняет эту роль, предоставляя очень низкие задержки и высокую пропускную способность. Мы используем краткосрочные TTL, чтобы предотвратить рост данных в онлайн-базе данных на неопределенный срок, а наши работы по хранению данных гарантируют, что мы сохраняем данные о активности пользователей только для реальных посетителей. Tripadvisor.com получает много трафика ботов, и мы не хотим хранить их данные и пытаться персонализировать ботов - поэтому мы удаляем и очищаем все эти данные. Наш оффлайн склад данных сохраняет исторические данные, используемые для отчетности, создания других продуктов с данными и подготовки наших моделей ML. Мы не хотим, чтобы масштабные оффлайн процессы с данными влияли на производительность нашего сайта, поэтому у нас есть две отдельные базы данных, используемые для двух различных целей. Платформа для посетителей Microservices Мы используем 5 микросервисов для Платформы посетителей: Visitor Core управляет графиком идентификации пользователей на основе файлов cookie и идентификаторов устройств. Visitor Metric - это наш механизм запросов, который предоставляет нам возможность раскрывать факты и показатели для конкретных посетителей.Мы используем язык, специфический для домена, называемый языком запросов посетителей, или VQL. Этот пример VQL позволяет вам просматривать последние факты торговли за последние три часа. Visitor Publisher и Visitor Saver обрабатывают путь записи, записывая данные в платформу.Помимо сохранения данных в ScyllaDB, мы также передаем данные в оффлайн хранилище данных. Visitor Composite упрощает публикацию данных в работах по обработке партий. Он абстрагирует Visitor Saver и Visitor Core, чтобы идентифицировать посетителей и публиковать факты и показатели в одном вызове API. Roundtrip Microservice Латентность Этот график иллюстрирует, как задержки наших микросервисов сохраняются стабильно со временем. Средняя задержка составляет всего 2,5 миллисекунд, а наш P999 менее 12,5 миллисекунд.Это впечатляющая производительность, особенно учитывая, что мы обрабатываем более 1 миллиарда запросов в день. Наши клиенты микросервисов имеют строгие требования к задержке. 95% звонков должны быть завершены за 12 миллисекунд или менее. ScyllaDB Латентность Вот краткий снимок производительности ScyllaDB за три дня. На пике ScyllaDB обрабатывает 340 000 операций в секунду (в том числе записывает, читает и удаляет), а процессор колеблется всего на 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, представляющий произошедшее там событие. Некоторые примерные факты являются поисковыми терминами, просмотрами страниц и бронированиями. Мы используем стратегию сплочения ScyllaDB, потому что: Оптимизирован для запросов диапазона Он отлично справляется с высокой кардинальностью Это лучше для рабочих нагрузок с большим числом, и у нас примерно в 2-3 раза больше чтений, чем записей. Почему ScyllaDB? Наше решение первоначально было построено с использованием Cassandra on-prem. Но по мере увеличения масштаба операционная нагрузка увеличилась. Это требовало специальной поддержки операций, чтобы мы могли управлять обновлениями базы данных, резервными копиями и т. Д. Кроме того, наше решение требует очень низких задержек для основных компонентов. Наша система управления идентификацией пользователей должна идентифицировать пользователя в пределах 30 миллисекунд – и для лучшей персонализации мы требуем, чтобы наша платформа отслеживания событий отвечала в пределах 40 миллисекунд. Важно, чтобы наше решение не блокировало рендерирование страницы, поэтому наши SLA очень низкие. Мы запустили Proof of Concept с ScyllaDB и обнаружили, что пропускная способность намного лучше, чем у Cassandra, и операционная нагрузка была устранена. Мы хотели полностью управляемый вариант, поэтому мигрировали из Cassandra в ScyllaDB Cloud, следуя стратегии двойного письма. Это позволило нам мигрировать с нулевым временем остановки при обработке 40 000 операций или запросов в секунду. Позже мы мигрировали из ScyllaDB Cloud в модель ScyllaDB «Принесите свой собственный аккаунт», где вы можете позволить команде ScyllaDB развернуть базу данных ScyllaDB в свою собственную учетную запись AWS. Это позволило нам улучшить производительность и улучшить конфиденциальность данных. Эта диаграмма показывает, как выглядит развертывание BYOA ScyllaDB. В центре диаграммы можно увидеть 6-узловый кластер ScyllaDB, который работает на EC2. ScyllaDB Monitor дает нам графические панели, а также метрики Prometheus. ScyllaDB Manager занимается автоматизацией инфраструктуры, например, запускает резервные копии и ремонты. С помощью этого развертывания ScyllaDB может быть совместно размещен очень близко к нашим микросервисам, чтобы дать нам еще более низкие задержки, а также гораздо более высокую пропускную способность и производительность. В заключение, я надеюсь, что у вас теперь есть лучшее понимание нашей архитектуры, технологий, которые поддерживают платформу, и как ScyllaDB играет критическую роль в том, чтобы позволить нам справиться с чрезвычайно высоким масштабом TripAdvisor. О компании Cynthia Dunlop Синтия является старшим директором по стратегии контента в ScyllaDB. Она пишет о разработке программного обеспечения и инженерии качества более 20 лет.