Perl Hackers Hub

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

この記事を読むのに必要な時間:およそ 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.99

2017年6月24日発売
B5判/160ページ
定価(本体1,480円+税)
ISBN978-4-7741-8987-1

  • 特集1
    [Rubyで学ぶ!]良いコードって何だろう?
    現場で光る✨ 変数,メソッド,クラス,モジュール活用法
  • 特集2
    [iOS/Android両対応!!]UIテスト自動化
    Espresso,XCTest,Appium
  • 特集3
    実践Kubernetes
    Google Container Engineではじめる新時代のコンテナ管理!
  • 一般記事
    チーム内の対立解消
    事例で学ぶ原因分析,解決方法

著者プロフィール

星野将(ほしのまさる)

1982年東京都生まれ。Perl育ち。

株式会社ミクシィではSNS「mixi」の開発において,株式会社VOYAGE GROUPでは子会社の株式会社fluctが提供するSSP「fluct」にて,主に「開発のための開発」業務を担当してきた。

開発の無駄をなくし,開発効率を上げられるエンジニアを目指している。

GitHub:https://github.com/masartz

コメント

コメントの記入