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.100

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

  • 特集1
    作って学ぶ人工知能
    自然言語処理,機械学習,深層学習がまるわかり!
  • 特集2
    対応必須! 完全HTTPS化
    移行手順からつまずくポイントまで
  • 特集3
    メルカリ開発ノウハウ大公開
    ぜんぶ見せます! 1日100万出品のフリマアプリの舞台裏
  • 100号記念選書
    TOPエンジニアを支える1冊
    超豪華23名!
  • 100号記念エッセイ
    あのときの自分へ
    もし,過去に戻ってアドバイスできるなら

著者プロフィール

星野将(ほしのまさる)

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

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

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

GitHub:https://github.com/masartz

コメント

コメントの記入