サーバーレス ピクセル トラッキングのアーキテクチャ

このソリューションでは、広告におけるサーバーレス ピクセル トラッキングのアーキテクチャについて説明します。

広告主または広告代理店の最終目標は、自身のブランドまたは顧客のブランドを可視化することです。これを行う 1 つの方法は、オンライン広告を利用することです。条件が合えば、パブリッシャ―のプロパティ上の広告スロットに広告が掲載されます。ただし、必要なことは他にもあります。

広告アーキテクチャで重要なことは、予算の最適化を図り、視聴者の反応を理解するためにデータ収集をすることです。これを行う一般的な方法はピクセル トラッキングです。ピクセル トラッキング サーバーのセットアップには通常、費用、レイテンシ、スケーリング、高可用性など、技術的なオーバーヘッドが多少必要になります。このソリューションでは、技術的な投資を軽減しながら、そうしたプラットフォームを構築する方法を学習します。

広告データを扱う場合、セキュリティは常に重要です。Google Cloud Platform(GCP)を使用すると、いくつかの方法でデータをより安全で、より保護された、より秘密性の高い状態に保つことができます。たとえば、送信時と保存時にはすべてのデータが暗号化されます。また、GCP は ISO 27001 と SOC3、FINRA、PCI に準拠しています。

このソリューションを実装する方法について詳しくは、チュートリアルをご覧ください。

概念

ピクセルトラッキングのプロセスは通常、次のような手順になります。

  1. クリエイティブ素材またはウェブページにコードを追加し、広告ネットワークのバックエンドを指す URL を呼び出します。例:

    <img src=”AD_SERVER_URL?parameters”>
    
  2. バックエンドでサーバーがこのリクエストを受け取り、1 x 1 の目に見えないピクセルを返します。多くの場合、このピクセルはプログラムによって作成されます。HTTP 200 または 304 レスポンスではなくピクセルを返すことにより、ブラウザで画像を表示できないといったことを避けることができます。

1 つのピクセルを返すことにより、ネットワーク要件を非常に低く抑えることができます。1 x 1 ピクセルは透過性が高いため、ネットワークへの影響がほとんどなく、次のようなあらゆる種類のデータのロギングが可能です。

  • ピクセルが表示されたページの名前やユーザー ID などのカスタム パラメータ
  • ブラウザ、OS のほか、広告の表示にモバイル デバイスを使用していたかどうかなどのユーザーベースの環境

要件とアーキテクチャ

プロセスは簡単に見えるかもしれませんが、セットアップをするためのいくつかの要件があります。この例では、次のことを前提としています。

  1. 平均で 1 秒当たり 100,000 回のインプレッションが発生する(インプレッションの割合は変動する場合がある)。
  2. インプレッションは世界中から発生する可能性がある。
  3. すべてのインプレッションはログに記録する必要があり、増分で毎日のデータはテラバイト単位になる可能性がある。
  4. すべてのログは毎日分析することができる。

これらの前提から、実装の要件は次のようになります。

  1. 需要に応じて自動的にスケールアップとスケールダウンが可能である。
  2. 1 つのドメインにおけるレイテンシが世界中でミリ秒である。
  3. 非同期書き込みによるログ用にスケーラブルなストレージが必要である。
  4. 照会しやすいストレージ オプションが必要である。

次の図にアーキテクチャを示します。分析プラットフォームへの書き込み用も、ピクセルの提供用も、実際のサーバーは存在しないことに注意してください。

サーバーレス ピクセル サービングのアーキテクチャ

フロントエンド

最も一般的で、広告技術の業界で広く実装されている方法は、Google Compute Engine インスタンス グループGoogle Kubernetes Engine フェデレーション クラスタなどのフロンエンド サーバーをオートスケーラーと併用する方法です。オートスケーラーは、fluentd エージェントを使用してオブジェクト ストレージにログを書き込みます。このようなツールは一般的ですが、インスタンス、テンプレート、グループ、スケーリング ルール、デプロイ スクリプトのセットアップが必要になります。そのため、作業が煩雑になる場合があります。

このソリューションでは、GCP のフルマネージド サービスを利用して、より簡単に実装できる代替案について詳述します。

  • Google Cloud Storage: ニーズに応じて、Standard、Nearline、Coldline などのオプションを、幅広い料金体系と SLA とともに提供するグローバルまたはリージョナルなオブジェクト ストレージ。ここでは、数ミリ秒のレイテンシを提供する Standard を使用します。
  • Google HTTP(S) ロードバランサ: 数百万の QPS にスケーリング可能なグローバルでエニーキャストの IP 負荷分散サービスで、Stackdriver Logging と統合されます。また、Google Cloud CDN で利用することも可能で、ユーザーに近い Google エッジ キャッシュ内にピクセルをキャッシュすることにより、Cloud Storage への不要なアクセスを防止できます。

次の図に、GCP Console での GCP HTTP(S) ロードバランサの構成を示します。

HTTP ロードバランサの設定を示すユーザー インターフェース

ログの収集

Cloud Load Balancer と Stackdriver Logging のシームレスな統合により、ロードバランサに対するすべてのリクエストのロギングが簡単になり、セットアップも最小限で済みます。ログは Cloud Platform バックエンドに直接保存され、そこから Cloud Storage、Google Cloud Pub/Sub、または Google BigQuery にエクスポートできます。この方法により、次のことが可能になります。

  • Stackdriver Monitoring を使用してシステムの動作状況をモニタリングし、カスタム指標とアラートを作成する。
  • 必要に応じて、各種プロダクトにログをエクスポートする

    • バックアップ: Cloud Storage または BigQuery にエクスポートする
    • 分析: BigQuery にエクスポートする
    • リアルタイム処理のためのストリーム: Cloud Pub/Sub にエクスポートする

Stackdriver Logging 内のログは、次の画像のようになります。ここでは、次のようなことがわかります。

  • ピクセルが実際に CDNから提供されました(cacheHit: true)。
  • HTML コード内に設定された URL パラメータを確認できます。

キャッシュ ヒットとパラメータを示す Stackdriver ログ

このソリューションでは、ストリーミング API を使用して、ログを BigQuery にエクスポートします。また、Google Cloud Dataflow を使用することも可能です。詳細については、次の手順をご覧ください。

BigQuery に直接エクスポートされるログは、次の画像のようになります。列は、Stackdriver Logging 内に示される JSON に似たデータのキーに一致します。次の画像は、Google によって作成された insertID フィールドに基づいて、特定のログに対するすべてのデータを表示するクエリを示しています。

1 つのログに対するすべてのデータを示す Google BigQuery

ログの分析

ログが BigQuery に読み込まれると、データに対してアドホック クエリを実行できます。次の点について注意が必要です。

  • 1 日単位でパーティション テーブルを使用すると、すべてのクエリで処理されるバイト数を削減できるなど、いくつかの利点があります。
  • 要件ではありませんが、広告主のグループごとにテーブルを分割すると、データを管理しやすくするのに役立ちます。テーブル ワイルドカードを使用することで、そうしたテーブルに対して常にユニオンを実行できます。
  • BigQuery も、基本的な ETL ジョブに有効なツールです。クエリに出力テーブルを提供することで、必要に応じてデータを処理し、より適した形式に変換できます。たとえば、日次データを週次テーブルに集計する場合などです。

次のコードは、各ピクセル インプレッションについて BigQuery で確認できるフィールドのサブセットを示しています。パラメータは追加するカスタム Key-Value ペアをリストしたもので、抽出可能です。

 {
    [...]
    "resource_type": "http_load_balancer",
    "resource_labels_url_map_name": "lb-pixel-tracking",
    "resource_labels_zone": "global",
    "httpRequest_requestMethod": "GET",
    "httpRequest_requestUrl": "YOUR_DOMAIN/pixel.png?YOUR_PARAMETERS",
    "httpRequest_requestSize": "972",
    "httpRequest_status": "200",
    "httpRequest_responseSize": "1320",
    "httpRequest_userAgent": "Go-http-client/1.1",
    "httpRequest_remoteIp": "1.2.3.4",
    "httpRequest_cacheHit": "true",
    [...]
}

BigQuery にデータを保存したら、ユーザー行動の理解に役立てることができます。SQL の知識があるアナリストであれば、BigQuery UI を使用して、ギガバイトからテラバイトに及ぶデータからの結果をすばやく確認することができます。

ピクセルトラッキング リクエストの結果を示す BigQuery

負荷テスト

このソリューションが本番環境で使用できるかどうかを確認するには、Vegeta に基づいて、負荷分散テスト環境をセットアップできます。詳細については、チュートリアルを参照してください。下の結果のように、このアーキテクチャでは 100,000 RPS を簡単に管理できます。

負荷テストの結果グラフ

次のステップ

このソリューションでは、サーバーレス ピクセル サービングのアーキテクチャの概要について説明しました。より高度なアーキテクチャのためには、次のような、その他の Google Cloud Platform 機能を利用できます。

  • DNS: このソリューションでは、ロードバランサのグローバル IP を直接使用しましたが、Google Cloud DNS を利用すれば、ドメイン名を接続することも可能です。1 つのロードバランサは、Cloud Storage や Compute Engine のように、複数の異なるタイプのバックエンドを持つことができます。
  • カスタム指標: 前述のとおり、Stackdriver Logging を使用して、アラートやモニタリング用に Cloud Monitoring で利用できるカスタム指標を作成できます。
  • Google Cloud Bigtable: Cloud Bigtable を Cloud Dataflow パイプラインに追加すると、広告サーバーの一部は、更新されたデータにほぼリアルタイムでアクセスできるようになります。Cloud Dataflow は、オフライン分析のためにデータを BigQuery にロードできる一方で、Bigtable に書き込むこともできます。Bigtable では、SSD の使用時に数ミリ秒のレイテンシで読み取りが可能です。これは、ユーザー プロフィールを取得する場合などに役立ちます。
  • Google データポータル: BigQuery では SQL クエリを実行するための UI が提供されますが、画像があればさらに役に立つこともあります。データポータルを使用すると、共有可能なダッシュボードやクロスデータソース分析を通じて、分析を可視化できます。
  • ログの処理: リアルタイムな判断に必要なバッチ分析を行うソリューション。使っていくことで、このようなアーキテクチャを構築していくことが可能になります。
  • Cloud Pub/Sub: フルマネージドのグローバル メッセージング システム。パブリッシャ―は、さまざまなクライアントを通じて大量のメッセージをトピックに対して公開できます。このようなメッセージは、push されたメッセージを pull または取得できるユーザーによって処理されます。Stackdriver Logging からエクスポートする際は、オプションとして利用できます。
  • Cloud Dataflow: Google が MapReduce を進化させたものであり、Apache Beam のオープンソースである同じ SDK の下で、バッチとストリーミングの機能を提供します。Cloud Dataflow は数行のコードを追加することで、パイプラインの作成を簡素化し、ウォーターマーク、タイマー、ウィンドウを含むストリーム処理で多くの優れた機能を提供します。また、BigQuery(アドホックなフルクエリ)や Bigtable(低レイテンシの読み込みと書き込み)など、さまざまなシンクも提供します。

    このようなアーキテクチャは、次の図に示すアーキテクチャと類似したものになります。

    高度なアーキテクチャ

チュートリアル

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...