Perl Hackers Hub

第42回大規模広告配信でのCPANモジュールの活用(1)

本連載では第一線のPerlハッカーが回替わりで執筆していきます。今回のハッカーは星野将さんで、テーマは「大規模広告配信でのCPANモジュールの活用」です。

本稿のサンプルコードは、本誌サポートサイトから入手できます。

大規模広告配信の運用

多くのWebサービスは、24時間365日それを提供しながら発展、拡大させていくことを目標に運営されていることでしょう。そのためにエンジニアに課せられる課題は、⁠増加するリクエストをすばやくさばきつつ、安定して運用させるためにどうするか」になります。

コンシューマー向けサービスは、多くの顧客にすばやくサービスを提供するという目標を持っています。それらのサービスに広告を配信する配信業者も同じ目標を持っており、広告配信をサービス提供のボトルネックにさせない取り組みをしています。広告配信は単体ではサービスとして成り立たず、広告を表示するメディアがあるからこそであり、メディアとそのエンドユーザーのためにも配信の質と速度を重視します。

今回は、筆者が所属する広告配信サービスfluctを事例として、CPANモジュールの選択方法と、大規模システムでの運用事例について解説します。

広告配信のしくみ

近年の広告配信にはさまざまなプレーヤーが存在しますが、以降を読み進めるために必要なプレーヤーは以下です。

Webメディア
広告枠を提供する
SSPSupply Side Platform
Webメディアに広告配信を行う。Webメディアの収益の最大化を目的とする(fluctはこのポジション)
DSPDemand Side Platform
広告枠の買い付けを行う。広告主の広告効果の最大化を目的とする
広告主
広告出稿を行う

この4者が図1のようにやりとりを行います。SSPとDSP間で交わされるのがRTBReal Time Biddingと呼ばれる競争入札(オークション)です。1つのSSPが複数のDSPに対してリクエストを投げ、レスポンスを受け取った中から最も高い金額のDSPを選択します。選択したDSPから広告情報を受け取り、それがWebメディアに表示されます。

図1 広告配信のしくみ
図1 広告配信のしくみ

このやりとりを行うにあたって、WebメディアのWebサイト内にJavaScriptタグを設置しておきます。サイト閲覧時にJavaScriptタグから広告配信サーバにリクエストが投げられ、広告を表示するためのJavaScriptタグがレスポンスとして返されます。

なお、広告が表示された回数をインプレッション数(imp数)と呼びます。

広告配信サーバ

図1で「広告配信サーバ」としていたものは、内部では次の3つのプロセスで成り立っています図2⁠。

図2 広告配信サーバ
図2 広告配信サーバ
フロント
JavaScriptからのリクエストを受け付けるエンドポイントとなるPHPプロセス
アドサーバ
フロントからリクエストを受け、案件情報の取得や次のRTBへのリレーを行うPerlプロセス
RTB
アドサーバからのリクエストを受け、DSPとRTB取り引きを行うErlangプロセス

2016年6月時点で、上記のアーキテクチャによって、fluct全体で月間330億のインプレッション数をさばいています。単純平均で秒間1万リクエスト以上となり、ピーク時には秒間2.5万程度のリクエストがあります。

もちろん330億というインプレッション数は最初からではなく、年々積み上がってきたものです。このインプレッション数の増加に対して、ハードウェアや環境まで含めてさまざまな取り組みを行ってきました。以降ではその中でもソフトウェア面、特に広告配信サーバの中心となるアドサーバにおけるPerlの活用を解説します。

<続きの(2)こちら。>

WEB+DB PRESS

本誌最新号をチェック!
WEB+DB PRESS Vol.130

2022年8月24日発売
B5判/168ページ
定価1,628円
(本体1,480円+税10%)
ISBN978-4-297-13000-8

  • 特集1
    イミュータブルデータモデルで始める
    実践データモデリング

    業務の複雑さをシンプルに表現!
  • 特集2
    いまはじめるFlutter
    iOS/Android両対応アプリを開発してみよう
  • 特集3
    作って学ぶWeb3
    ブロックチェーン、スマートコントラクト、NFT

おすすめ記事

記事・ニュース一覧