See the engineering behind real-time personalization at Tripadvisor’s massive (and rapidly growing) scale あなたはどんな旅行者ですか? Tripadvisor は、サイトと関わる直後にこれを評価しようとし、クリックごとにますます関連性の高い情報を提供します - ミリ秒以内に。 この記事では、Dean Poulin (Tripadvisor Data Engineering Lead on the AI Service and Products team) が、このパーソナライゼーションをどのように推進しているかを説明しています。 AWS re:Invent Talk に基づいています。 旅行前指向 ディーンの言葉では、 2000年に設立されたTripadvisorは、旅行とホスピタリティの世界的リーダーとなり、何億もの旅行者が完璧な旅行を計画するのを助けています。Tripadvisorは18億ドルを超える収益を生み出し、NASDAQ証券取引所で公表されている会社です。今日、私たちは2800人以上の才能ある従業員を擁し、イノベーションを推進し、私たちのプラットフォームは毎月驚くべき400万人のユニークな訪問者にサービスを提供しています。 ある日、私たちのシステムは25~5000万人のユーザーから200億件以上のリクエストを処理します。TripAdvisorでクリックするたびにリアルタイムで処理されます。その後、私たちは機械学習モデルを活用して、パーソナライズされたアドバイスを提供し、あなたを完璧な旅に近づけます。このパーソナライズエンジンの中心は、AWSで動作するScyllaDBです。これにより、わずかな組織が達成できる規模でミリ秒遅延を提供することができます。 . 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 で独立してスケーラブルな数百のマイクロサービスで実行されています. Our ML Model Serving Platform is exposed through one of these microservices. このゲートウェイ サービスは、クライアント サービスから 100 を超える ML モデルを抽出し、実験プラットフォームを使用して最良のモデルを見つけるために A/B テストを実行できます。 ML モデルは、主に私たちのデータ サイエンティストと機械学習エンジニアが、Kubeflow で Jupyter Notebooks を使用して開発しています。 「Custom Feature Store」 機能ストアは主にユーザー機能と静的機能を提供します。静的機能は、非常に頻繁に変化しないため、Redisに格納されます。私たちは毎日データパイプラインを実行し、オフラインデータストアからデータを静的機能として機能ストアにロードします。 User Features は Visitor Platform と呼ばれるプラットフォームを通じてリアルタイムで提供されます. We execute dynamic CQL queries against ScyllaDB, and . we do not need a caching layer because ScyllaDB is so fast 私たちの機能ストアは、毎秒500万個の静的機能と毎秒500万個のユーザー機能を提供します。 MLの特徴とは? Features are input variables to the ML Models that are used to make a prediction. 静的機能とユーザ機能があります。 静的機能のいくつかの例は、レストランが獲得した賞や、ホテルが提供する設備(無料Wi-Fi、ペットフレンドリー、フィットネスセンターなど)です。 ユーザーの機能は、ユーザーがサイトを閲覧するときにリアルタイムで収集されます。私たちはそれらを ScyllaDB に格納して、スライス速いクエリを得ることができます。ユーザーの機能のいくつかの例は、過去 30 分間で閲覧されたホテル、過去 24 時間で閲覧されたレストラン、または過去 30 日間で提出されたレビューです。 The Technologies Powering Visitor Platform(ビジター・プラットフォーム) ScyllaDB はビジター プラットフォームの核心です. 私たちは Java ベースの Spring Boot マイクロサービスを使用して、プラットフォームを顧客に公開します. これは AWS ECS Fargate で展開されます. 私たちは、日々のデータ保存の仕事のために、オフラインからオンラインの仕事のために、Kubernetes で Apache Spark を実行します. その後、オフラインデータストアから ScyllaDB にデータをロードするために、それらをライブサイトで利用できます. 私たちはまた、ユーザーのストリーミング追跡イベントを処理するために Amazon Kinesis を使用します. ビジター・プラットフォームのデータ・フロー 以下のグラフは、データが4つの段階でプラットフォームを通じてどのように流れていくかを示しています:生成、摂取、組織、およびアクティベート。 データは当社のウェブサイトおよびモバイルアプリによって生成されます。そのデータの一部には、クロスデバイスユーザーアイデンティティグラフ、行動追跡イベント(ページビューやクリックなど)およびKinesisを通過するストリーミングイベントが含まれます。 Visitor Platformのマイクロサービスは、このデータを収集し、整理するために使用されます ScyllaDBのデータは、2つのキースペースに格納されます。 The Visitor Core keyspace, which contains the Visitor Identity Graph (ビジターアイデンティティグラフ) The Visitor Metric keyspace, which contains Facts and Metrics (the things that the people did as they browsed the site) (サイトを閲覧するときに人々がしたこと) ETLプロセスを日常的に使用してプラットフォーム内のデータを維持し、クリーンアップします. We produce Data Products, stamped daily, in our offline data warehouse – where they are available for other integrations and other data pipelines to use in their processing. 私たちは毎日、オフラインデータ倉庫でスタンプされたデータ製品を生産します。 以下は、数字による訪問者プラットフォームの見方です。 なぜ2つのデータベース? 私たちのオンラインデータベースは、リアルタイムでウェブサイトのトラフィックに焦点を当てています。ScyllaDBは、非常に低い遅延と高流量を提供することによってこの役割を果たします。私たちは、オンラインデータベースのデータが無期限に成長するのを防ぐために短期のTTLを使用し、データ保存の仕事は、実際の訪問者のためのユーザーアクティビティデータのみを保持することを保証します。 当社のオフラインデータストアは、レポート作成、他のデータ製品の作成、MLモデルのトレーニングに使用される歴史データを保持します。我々は、ライブサイトのパフォーマンスに影響を与える大規模なオフラインデータプロセスを望んでいませんので、2つの異なる目的のために使用される2つの別々のデータベースがあります。 ビジター プラットフォーム マイクロサービス 訪問者プラットフォームのための5つのマイクロサービスを使用しています。 Visitor Core は、クッキーとデバイス ID に基づいてクロスデバイスユーザーアイデンティティグラフを管理します。 Visitor Metric はクエリ エンジンで、特定の訪問者に対して事実やメトリクスを明らかにする機能を提供します. We use a domain specific language called visitor query language, or VQL. This example VQL allows you to see the latest trade click facts over the last three hours. Visitor Publisher および Visitor Saver は書き込みパスを処理し、データをプラットフォームに書き込みます。ScyllaDB でデータを保存するほか、データをオフラインデータストアにストリーミングします。 Visitor Composite は、Visitor Saver と Visitor Core を抽象化して、訪問者を識別し、単一の API 呼び出しで事実とメトリクスを公開します。 Roundtrip Microservice Latencyについて このグラフは、マイクロサービスの遅延が時間とともに安定している方法を示しています。 平均的な遅延はわずか 2.5 ミリ秒で、P999 は 12,5 ミリ秒未満です。 私たちのマイクロサービスクライアントには厳格な遅延要件があります。通話の95%は12ミリ秒以内に完了しなければなりません。 ScyllaDB ラテンシー 以下は3日間で ScyllaDBのパフォーマンスのスナップショットです。 ピーク時点で、ScyllaDB は毎秒 340,000 件の操作(書き込み、読み取り、削除を含む)を処理しており、CPU はわずか 21% で波動しています。 ScyllaDB は、マイクロ秒の書き込みとミリ秒の読み込みを提供します. このレベルの速いパフォーマンスは、私たちが ScyllaDB を選んだ理由です。 ScyllaDB にデータをパーティションする この画像では、データを ScyllaDB に分割する方法を示しています。 The Visitor Metric Keyspace has two tables: Fact and Raw Metrics. The primary key on the Fact table is Visitor GUID, Fact Type, and Created At Date. The composite partition key is the Visitor GUID and Fact Type. The clustering key is Created At Date, which allows us to sort data in partitions by date. The attributes column contains a JSON object representing the event that occurred there. いくつかの例の Facts are Search Terms, Page Views, and Bookings. ScyllaDB の Leveled Compaction 戦略を使用しているのは、以下のためです。 範囲クエリのための最適化 ハイカーディナリティをうまく扱う それは読み重いワークロードに優れ、私たちは書くよりも2〜3倍多くの読書を持っています。 なぜScyllaDB? 当社のソリューションは当初、Cassandra on-premを使用して構築されたが、規模が拡大し、運用負担も増加した。データベースのアップグレード、バックアップなどを管理するために、専用のオペレーションサポートが必要だった。また、当社のソリューションはコアコンポーネントの非常に低い遅延を必要とする。当社のユーザーアイデンティティマネジメントシステムは30ミリ秒以内にユーザーを識別しなければならず、最適なパーソナライゼーションのために、当社のイベントトラッキングプラットフォームは40ミリ秒以内に応答する必要があります。当社のソリューションがページの renderingをブロックしないことが重要なので、当社のSLAは非常に低い。 ScyllaDB で Proof of Concept を実行し、パスポートが Cassandra よりはるかに優れていることが判明し、オペレーティングの負担が解消されました。 私たちは完全に管理されたオプションを望んでいたので、Cassandra から ScyllaDB Cloud に移行し、ダブル スクリプト 戦略に従って、毎秒 40,000 件の操作やリクエストを処理しながらゼロのダウンタイムで移行することを可能にしました。 この図では、ScyllaDB の BYOA デプロイがどのように見えるかを示しています。 図の中心に、EC2 で実行されている 6 ノードの ScyllaDB クラスターが表示されます。 ScyllaDB Monitor は、Grafana ダッシュボードと Prometheus メトリクスを提供します。 ScyllaDB Manager は、バックアップや修理などのインフラの自動化に取り組んでいます。 この展開により、ScyllaDB はマイクロサービスに非常に近い場所に配置され、さらに低い遅延とより高いパフォーマンスとパフォーマンスをもたらすことができます。 結論から言うと、あなたは私たちのアーキテクチャ、プラットフォームを動かすテクノロジー、そしてScyllaDBが私たちがTripadvisorの非常に高い規模に対処することを可能にする上で、どのように重要な役割を果たしているかをよりよく理解していることを願っています。 Cynthia Dunlopについて Cynthia は ScyllaDB のコンテンツ戦略のシニアディレクターであり、20年以上にわたりソフトウェア開発と品質エンジニアリングについて書いています。