拡張性の高いDSP(デマンド サイド プラットフォーム)サービスを構築する意義
Molocoはどのようにして月間1兆以上の入札を実現するサービス基盤を構築してきたのか?
MolocoクラウドDSPは、Molocoの実績ある予測モデルにより、アプリマーケターが迅速かつ効率的にパフォーマンスを拡張する事を可能にしています。。当社は独自の機械学習と顧客データ(ポストバック等)を組み合わせる事で、指定された目標(CPI、CPA、ROAS)を達成するためのカスタムモデルを構築しています。2022年1月現在、Molocoは毎月250カ国以上260万以上のモバイルアプリを通じて100億以上のデバイスで利用されています。
日進月歩のアドテックサービスをグローバルに展開する事は、当社のエンジニアリングチームにとって大きな技術的課題でした。Molocoは2013年の創業以来、拡張性を備え、パフォーマンスとコストの両面で高度に最適化された技術や機能を構築する事に注力してきました。当社のシステムでは毎月1兆以上の入札が行われていますが、ピーク時のQPSは500万件を超え、更に各入札レスポンスの処理レイテンシーは100ミリ秒未満です。それと同時に、入札リクエストの処理にかかるコストは規模が拡大するにつれ削減し続けています。(Googleのインタビュー動画で詳しく解説しています。)
今回の投稿では、拡張性の高いDSP(デマンドサイドプラットフォーム)サービスを構築するうえで、どのように挑戦し解決してきたかをご紹介いたします。
技術的な挑戦
レイテンシーを抑えながら、入札リクエストを最大限高める
Molocoは、複数のRTB(リアルタイム入札取引市場:SSP)から届く入札リクエストを世界中のアプリユーザーに向けて処理しています。モバイル広告市場全体の拡大や当社のグローバルな事業展開に伴い、受信するリクエストの量は着実に増加しています。その一方で、モバイル広告ではリアルタイム性が要求されるため、リクエストには厳しいレスポンス期限も伴います。当社の入札基盤システムの場合は、毎秒数百万件の入札リクエストを100ミリ秒以内に処理する必要があるのです。
ビッグデータを機械学習モデルに変換
毎秒数百万件の入札リクエストを処理している当社は、入札レスポンスを作成する事で、その内の大部分にレスポンスを返しています。その結果、入札レスポンスの一部が、ユーザーのデバイス上で動作するモバイルアプリの広告インプレッションにつながり、ひいてはユーザーのさらなるアクション(クリックやインストール、購入、クリック後に発生するその他のコンバージョンなど)が誘発されます。このプロセスではペタバイト単位の新しいデータが毎日生成されますが、データプライバシーの規制を遵守しながら、そのようなデータを全て慎重に取り込み、蓄積し、そして統合しながら機械学習モデルを学習する必要があります。当社は、受信する入札リクエストに機械学習モデルから得た予測結果を活用し、より新しいデータを受け取り続ける事で、最適化モデルを継続的に学習しています。つまり、膨大なデータをほぼリアルタイムで生成しながらも、データ処理にボトルネックが存在してはならず、結果として得られるモデルは軽量かつ正確でなければならないのです。
ビッグデータを中心とした複雑な分析を行う為の統合型&相互作用型ツール
大量の複雑なデータを解析する当社のデータサイエンティストや機械学習エンジニアには、高速で効果的なツールが必要になります。彼らにインサイトを与えてデータドリブンな意思決定を下せるようにする、効率的で信頼性の高いデータ処理基盤が必要なのです。
オンラインサービス基盤の構造(入札リクエストを処理する為)
ここでは、入札リクエストを処理するオンラインサービス基盤(下図)の主な構成要素と、それぞれの関係性について説明します。
パブリッシャーのアプリに広告在庫がある場合、RTB市場を通じて、Molocoを含む複数のDSPにリクエストを共有します。DSPは様々な在庫の潜在的なバイヤーになります。Molocoはリクエストを評価し、入札するかどうか、いくらで提供するかを決定し、その決定をRTBに送り返します。繰り返しになりますが、これらすべてを100ミリ秒以内に行っているのです。
例えば、ある入札リクエストに対して、提供された広告在庫に関する情報(広告画像/動画の対応サイズ、向き等)を解析し、リクエストの基本的情報と履歴データに基づいて複数の分析・解析等から独自データを取得します。リクエストを素早く評価し、その値が基準を満たさない場合は早期に処理を停止します。この基準は、アクティブなキャンペーンや過去のパフォーマンス、残りの予算に基づいて動的に更新されます。
アプリ等のコンテキスト情報をもとに、当社の予測機能を呼び出します。この予測機能は、当社の機械学習モデルの推論エンジンとしてTensorFlowを使用します。予測結果に基づいて各キャンペーンの入札価格を決定し、広告主にとって最も価値の高いターゲットキャンペーンを選択するために内部オークションを実行します。RTB市場の入札参加者として、内部オークションの落札者をRTB市場に返します。
当社の入札が落札された場合、特定の種類の入札後イベント(インプレッションやクリック等)は、当社のイベントプロセッサーサービスに直接配信されます。それ以外の種類の入札後イベント(インストールやアプリ内課金、広告主が気に掛けるカスタムコンバージョンタイプなど)は、まずモバイル計測パートナー(MMP)によって収集され、その後MMPによって当社のイベントプロセッサーサービスに選択的に配信されます。当社のイベントプロセッサーは、これらのイベントのサニタイズと匿名化を行ってから、それに基づいてキャンペーンの活動やパフォーマンスに関する詳細な広告主向けのレポートを作成します。そして、イベントが当社の機械学習モデル向け学習フレームワークに確実に送られ、キャンペーンのパフォーマンスを向上させていく ― このようなサイクルが繰り返されます。
広告主は、当社のDSP顧客エンゲージメント用サポートプラットフォームである「MolocoクラウドDSP」からキャンペーンを管理できます。MolocoクラウドDSPで行われたキャンペーン設定の変更は、リアルタイムでオンライン入札システムに伝わり、可能な限り迅速に入札処理に反映されます。
入札基盤のパフォーマンス
このセクションでは、スケーラビリティやレイテンシー(遅延性)、信頼性といったシステム要件を満たすための設計上の決定について説明します。
入札プロセッサーは当社のオンラインサービス基盤の中で最も大きなリソースを消費しています。これは、ローカルマシンに保存される状態を最小限にするための仕組みです。これにより、サービスを積極的にスケールイン/スケールアウトでき、連続稼働するサービスには一般的に適さないとされるプリエンプティブルなVMの採用も可能になりました。
入札処理全体は50~100ミリ秒以内に完了する必要があります。厳しい納期という課題について、アプリやユーザー向けのフィーチャーをあらかじめ生成し、低レイテンシーのKey-Value型ストレージに保存しておく事で対応しています。フィーチャーストア内のフィールドは、その鮮度要求に応じて更新間隔が異なります。入札プロセッサーは、フィーチャーストアを検索してリクエストのコンテキストを構築し、受信した特定の入札リクエスト(広告インベントリーなど)から最も恩恵を受ける少数のキャンペーン候補を素早く検知します。データ量や顧客数が継続的かつ急速に増加しているにもかかわらず、大規模なフィーチャーデータセットを事前に計算するとともに、キャンペーン候補の上限を設定することで、当社は低レイテンシーで確実に入札の意思決定を行っているのです。
事前生成されたフィーチャーに対して、当社は2層のキャッシュを保持しています。入札プロセッサー毎に、最もアクティブなアプリやユーザーに使用するインメモリーキャッシュがあります。また、キャッシュ内のフィーチャーの内部表現を最適化して、サーバーのメモリーに多くのフィーチャーエントリーを収めるためのスペースを確保しています。2層目のキャッシュにはRedisを使用しており、同じリージョンで動作する全ての入札プロセッサーのインスタンスで共有されます。このようなL2キャッシュによって、基礎となる永続的なKey-Value型ストレージにかかる負荷を大幅に軽減しながら、入札プロセッサーのレイテンシー(遅延性)と起動時間を改善しています。また、キャッシュを多層構造にすることで高価なクロスゾーンのトラフィックが減り、コスト削減にもつながっています。通常運用時のキャッシュヒット率は99.9%を超えます。
入札プロセッサーとイベントプロセッサーでは、要求される信頼性が異なります。入札プロセッサーでは可用性の要件が緩和されます。過渡な負荷上昇からサーバーを保護するために、当社は適応可能な負荷遮断メカニズムを実装しています。
当社は、不審なリクエストや、Molocoが入札する可能性が低いリクエストを動的に削除するメカニズムを構築しています。この削除機能の設定は、当社の履歴ログに基づき、機械学習モデルによって自動的にチューニングされます。このインテリジェントなスロットリングメカニズムにより、上流サービスの負荷を45%削減できます。
一方、入札プロセッサーとは対照的に、イベントプロセッサーに対しては非常に厳しい可用性が要求されます。その理由として、1)受信イベントの損失は当社お客様のKPIに悪影響を与える可能性があること、2)入札後の各イベントは、当社の機械学習モデルにとって非常に貴重な学習サンプルとなる事が挙げられます。当社は、可用性の高い複数のストレージシステムに受信イベントを複製する事で、イベントプロセッサーの可用性を大幅に高めています。それによって、1つのストレージシステムで予測できない中断や一時障害が発生した場合でも、イベントログの復元とアクセスを可能にしています。
サービス毎に信頼性モデルを分ける事で、費用対効果分析に基づくバランスの取れたサービス構成を判断できるようになります。例えば、通常運用時にイベントプロセッサーのサイズを動的に調整するためにオートスケーラーに頼ることはありませんが、イベントの受信が予期せず急増した場合や、サービスのパフォーマンスが大幅に低下した場合には、自動的にスケールアウトする仕組みになっています。
予測と最適化のエンジン
DSPの中核となる機能は、不確実性や制約がある中でも、一定の広告在庫に対して最適な入札価格を決定するスケールの確率的最適化です。当社の機械学習モデルでは、ビッグデータのパターンを蒸留して、そのような最適化のための傾向に変え、確率的予測が行われます。クリックやインストール、アプリ内課金等の様々なユーザーエンゲージメントの予測に加え、市場価格の分布や将来的な分岐予測などの外的コンテキストも予測します。当社のシステムはこれら全ての機能を正確に、効率的に、かつ確実に提供します。
下図のように、当社の機械学習モデルは様々なデータを入力し、リアルタイムに出力を監視する事で、継続的に最適化するモデルを構築しています。おおまかに言えば、フィーチャージェネレーター、フィーチャーストレージシステム、学習パイプライン、モニタリングシステム、およびモデルサーバーから構成されています。フィーチャージェネレーターは、オンラインとオフラインの両方で、一貫性を確保しながら何百ものフィーチャーを効率的に生成します。フィーチャーストレージシステムは、学習パイプラインへの低レイテンシーアクセスを提供すると同時に、機械学習エンジニアやデータサイエンティストにオンライン分析処理を提供しています。学習パイプラインは、周囲の変化に適応して自己修正する為にモデルを継続的に更新し、モニタリングシステムとサービングシステムは、更新されたモデルを実稼働環境で確実に実行する為の多層構造のセーフガードを提供しています。
その後、当社の確率的最適化エンジンが、当社の科学者(博士号)や数学者(博士号)、経済学者(博士号)によって注意深く設計されたアルゴリズムに基づいてモデルの確率的予測を行い、入札の意思決定をリアルタイムで監視し、制御しています。
当社の予測と最適化エンジンの詳細については、今後紹介していきたいと思います。
データ処理能力
当社のデータパイプラインは、ユーザーとアプリの一貫性のある事前生成されたフィーチャーを、当社のオンラインサービス基盤と機械学習フィーチャージェネレーターに提供する事を主な目的としています。2022年1月現在、当社の入札プロセッサーは、1日あたり3400億件を超える入札レコードを生成しています。各レコードには、入札リクエストの一部のフィールドに加えて、入札するかどうか、入札する場合はどのキャンペーンを選択したか、提示した入札価格など、リクエストに対する当社の対応についての情報が含まれています。当社のイベントプロセッサーは、1日あたり20億件以上のイベントを処理し、分析やレポート作成用に構造化されたログに変換します。
このような大量のデータを絶え間なく処理し、最新のユーザーやアプリのフィーチャーを当社の入札プロセッサーにタイムリーに提供できる様に、データパイプラインの設計と実装は注意深く行われています。データ処理の時間とコストを最小限に抑える為に、データパイプラインは効率的でなければなりません。また、入札リクエストやイベントの量の急激な変化に対応できるスケーラビリティも必要です。当社のデータパイプラインは完全に自動化されており、他のシステム構成要素のレイテンシー要件を満たしながら、一貫したデータを提供しています。更に、その基礎となるシステムの様々な部分で一時障害が発生した場合には、データの完全性を損なう事なく、すぐに自己修正し、元のデータソースから欠落したデータをバックアップする事が可能です。
スケールとコスト
事業の拡大や機械学習モデルの進化に伴い、当社の基盤にかかる支出は増加する事が予想されます。しかし、当社がビジネスで成功を収める為には、入札単価を十分に低く抑えることが不可欠です。なぜならば、そうする事によって、当社のお客様が負担するサービス料金を上げる事なく、より多くの入札機会やキャンペーンを評価でき、その結果、広告費用に対する広告主のリターンを最大化出来るからです。
コスト効率は、当社がサービスを開始した当初から常に優先度の高く取り組んで参りました。過去2年間、当社は入札単価(濃い青色の折れ線)を43%削減しましたが、入札量(青色の棒)は754%増加しました(上図を参照)。
次のセクションでは、当社システムのコスト効率を高める為のアプローチについて説明します。
コスト最適化されたファネリング
入札プロセッサーとは、入札処理全般をまとめて構築するシステムです。このシステムでは、コストへの影響度毎に分類された、明確に定義された複数のフェーズにプロセスが分割されます。当社による分析によると、各入札の最適な入札価格を決定する価格設定機能が最も高価な機能である事がわかっています。その為、価格設定機能を後半に配置し、フェーズの間には、価値の低いリクエストを出来るだけ早く拒否するフィルターを置いています。
リソース効率
当社の入札システムは、リソース効率を高める為に高度に最適化されています。サーバーは、割り当てられたCPUとメモリーをフル活用し(いずれも平均80%以上の使用率)、1サーバーあたり数百件のリクエストを同時に処理しています。また、基礎となるクラウドプロバイダーが提供する様々なマシンタイプを評価し、当社の特定のワークロードに対して最も費用対効果の高いマシンタイプを選択しています。
自動拡張性
当社のシステムは、変化するワークロードに対して最小限のリソースを維持する様に自動拡張しています。当社は大規模なシステムの運用を開始するにあたり、初めはフィーチャーストアシステムやサービスクラスター用のスケーリングツールを自社で構築していました。基礎となるクラウドプロバイダーが提供するツールには必要なフィーチャーが欠けていたり、当社のユースケースに対するパフォーマンスが十分でなかったりしたためです。最近、その自社製スケーラーをクラウド提供型のツールに入れ替えました。このスケーラーは、CPU消費量や未処理のリクエスト数、利用可能なメモリーやディスク容量など、さまざまな負荷指標に基づいてスケーリングを決定するように構成されています。
まとめ
業界をリードするモバイル広告プラットフォームの構築と運用において成功を収めてきたMolocoは、その事業領域を急速に拡大しています。当社が目指しているのは、業界特有の垂直統合や最適化と共に、高品質のモバイルマーケティングを必要とする隣接業界へ当社の強力な機械学習能力を提供する事です。当社のエンジニアリングチームは、大規模なデータ処理や機械学習(モデル設計と学習・推論基盤の両方)、データ解析の中核となる技術力の強化に向けて急成長しています。
困難な課題に取り組み、複雑な問題を解決する事こそがMolocoの使命だと認識しています。ソフトウェアエンジニアや機械学習エンジニア、データサイエンティスト、データアナリスト、オペレーションエンジニア、数学者、経済学者などで構成される当社のエンジニアリングチームはグローバルで活動しています。機械学習ソリューションや超大規模なオンラインサービス基盤に携わる事を夢見る方は、ぜひ募集職種をご確認のうえ、応募くださいませ。お待ちしております。