Perl Hackers Hub

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

この記事を読むのに必要な時間:およそ 3 分

広告配信サーバでのスケールするデータ管理

図2で「案件情報」と言っていたデータは,具体的には次のものです。

広告枠種別情報
オーバーレイ,インラインなどの広告枠の種別の情報
配信設定情報
RTBやそのほかの配信の選択手段の情報
広告種類情報
テキスト,バナー画像,動画といった広告の種類の情報

広告配信サーバはこの案件情報を用いて,どの広告枠(たとえばインライン)に,どの配信設定(たとえばRTBによる配信)で,どの種類の広告(たとえばバナー画像)を配信するのかを判別します。

fluctの広告配信サーバは複数のデータセンターに分かれて数百台のマシンで運用されています。このような規模でデータをどのように管理し,アクセスするかは,システム構築の肝となります。

スケールのやりかたとしては,極限まで冗長化しています。MySQLのマスタデータを書き出し,各広告配信サーバローカルで案件情報として保持することにより,スタンドアローンなシステムとしてサービスを提供できる構成になっています。以降で,その構成を処理の流れに沿って説明していきます図3)⁠

図3 案件情報の管理

図3 案件情報の管理

MySQLからの案件情報の書き出し

案件情報のもととなるマスタデータは,MySQLで構築されたDBサーバに保存されており,管理画面から更新されます。このDBサーバに対して数百台の広告配信サーバがアクセスすると,DBサーバが処理上のボトルネックや単一障害点になります。

そこでまず,広告配信サーバからのアクセスをなくすために,マスタデータから案件情報を別なところに書き出します。これを行うのが案件作成サーバです。案件作成サーバは,DBサーバから案件情報を定期的にBerkeleyDB形式のファイルに書き出しています。もし書き出し処理が行われないと,特定期間に配信したい広告が,期日が来ても配信されないなどの事故につながります。そのため,案件作成サーバも冗長化して耐障害性を高めています。また,各案件作成サーバで書き出し処理のタイミングをずらすことで,DBサーバへの負荷を軽減させています。

書き出した案件情報の取得

各広告配信サーバは,案件作成サーバに案件情報ファイルを取得しにいきます。これは,広告配信サーバ内部のバッチの定期実行によって行われています。取得先はランダム化しており,取得タイミングも広告配信サーバごとにずらしているため,取引先が特定の案件作成サーバに偏ることはありません。

取得した案件情報の利用

取得した案件情報ファイルを扱うためのしくみがMemcacheDBです。よく聞くmemcachedは文字どおりキャッシュ機構であり,起動したデーモン上にある揮発的なデータを扱います。それに対してMemcacheDBは,BerkeleyDBファイルをデータソースとして永続的なデータを扱います。そして,Perlで動くアドサーバからこのデータにアクセスするために用いているのがCache::Memcached::Fastです。MemcacheDBもmemcahedと同じプロトコルが扱えるため,アプリケーションコードを読む際にデータのバックグラウンドを意識することなく扱えます。

データ管理のスケール方法として,MySQLをマスタ/スレーブ構成にしてスレーブを冗長化する案もあります。しかしこの方法だと,あるスレーブで障害があった場合,一時的にそこに接続する複数の広告配信サーバに影響が出る事態が避けられません。また,処理速度の面でも,広告配信サーバからMySQLサーバへ接続し問い合わせる速度は,広告配信サーバ自身への内部アクセスに比べて劣ります。このことから,スタンドアローンで立ち上げる方式を採用しています。

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

WEB+DB PRESS

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

2017年4月22日発売
B5判/152ページ
定価(本体1,480円+税)
ISBN978-4-7741-8920-8

  • 特集1
    [調べ方から身につける]Web開発 基礎の基礎
    開発環境の整備,フレームワークで開発,エラーに対処
  • 特集2
    これからはじめるDocker
    最新インフラ構築の一部始終を体験!
  • 特集3
    AWSコスト削減
    半額だって夢じゃない!
  • 一般記事
    良いPHPコードを保つ技術
    規約と指針を整備し,静的解析ツールを活かす
  • 一般記事
    技術系カンファレンスに行こう!
    参加する方法,発表者になる方法

著者プロフィール

星野将(ほしのまさる)

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

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

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

GitHub:https://github.com/masartz

コメント

コメントの記入