SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

APIを使ってRTB広告を実装可能にする「AdStir RTB Exchange」(AD)

1日1億超のトラフィックをさばく広告配信システム「AdStir」を支える技術とエンジニアの実態を探る

APIを使ってRTB広告を実装可能にする「AdStir RTB Exchange」(2)

  • このエントリーをはてなブックマークに追加

 インターネット技術の動向、消費者が利用するデバイスの変化といった、さまざまな要因によって、アドテクノロジーは日々、急速な勢いで進化を続けている。現在、ネットメディアやスマートフォン向けアプリケーションの収益化スキーマとして大きな役割を担っているネット広告の分野では、多くのプレイヤーが最新の技術動向にキャッチアップしつつ、広告出稿者と消費者とのより合理的なマッチングを目指したサービスを提供している。

  • このエントリーをはてなブックマークに追加

 そんな中、モーションビートが提供する「AdStir」(アドステア)は、特にスマートフォン向けに特化した広告配信サービスとして注目を集めているものの一つである。AdStirは、アドサーバ機能、複数のアドネットワークを一元管理して広告配信の最適化を行うイールドオプティマイゼーション(SSP)機能を持ち、近年特に関心が高いリアルタイム入札(RTB)にも対応したサービスとなっている。

 スマートフォンユーザーの急激な増加に伴う多様な広告配信ニーズの増大により、その基盤となるシステムに対しては高い信頼性と可用性、そして高速性が求められている。AdStirでは、どのような技術と体制によって、その要求に応えているのだろうか。モーションビート、メディアプラットフォーム事業部でAdStirの開発に携わる、メディアプラットフォーム事業部の落合省治氏とfukata氏に話を聞いた。

LVSをベースにnginxとLuaをフル活用

 AdStirは、主に広告配信の周辺を担当するアドサーバ、汎用APIサーバ、リアルタイム入札システム(RTB)用サーバと、AdStir自体の管理やログデータの集計を行うシステムから構成される。広告配信関連のサーバは、LVS(Linux Virtual Server)ソリューションをベースとしたクラスタリングが行われており、高性能と高可用性を確保している。具体的なサーバ数については非公開だが、このシステムにより1日あたり1億以上のトランザクションを処理しているという。

 処理の高速化が命題となるアドサーバ、APIサーバ、RTBサーバにおいて重要な構成要素となっているのは、膨大なクライアント数を高速に処理できるhttpdとして近年日本でも注目を集めている「nginx」、同じく高速な実行が特徴となっているスクリプト言語フレームワークである「Lua」、さらにmemcachedとなっている。

AdStirのシステム構成
AdStirのシステム構成

 AdStirでは、高速な処理を実現するにあたって、当初はC言語によるnginxのモジュール開発を行っていたという。現在では、APIサーバを筆頭にLuaへの移行が進んでいるが、その理由の一つとしては落合氏は「メンテナンスコスト」を挙げた。

 「当初は、スピードを最優先してC言語での開発を行っていました。しかし、規模が大きくなるに従い、C言語での開発やメンテナンスができる開発者の確保に、かなりのコストがかかる状況になってきました。そこで、代替になる言語を探す中でLuaを見つけたのです。C言語のホストに組み込まれることを前提に設計されているため、スクリプト言語でありながら、動作はかなり高速です。一方で、記述のルールはRubyなどに近く、規約自体は非常に簡単で学習コストは非常に低いと感じました」(落合氏)

 落合氏はLuaを評価する中で、その高速性と、C言語と比較した場合の開発生産性の高さを高く評価した。実際に、Luaの採用により、コーディングの時間はC言語と比較して「約3分の1」に削減されたという。落合氏は「メンテナンスコストと速度の両立を考えるのであれば、Luaは非常に良い選択肢だと思います。現在はソーシャルゲーム配信などの分野で多く使われているようですが、もっと多くの用途に使われてもいいのではないかと感じています」と話す。

モーションビート株式会社 メディアプラットフォーム事業部 落合省治氏
モーションビート株式会社 メディアプラットフォーム事業部 落合省治氏

スピードが命のRTBは非同期処理に工夫

 AdStirの特徴の一つであるRTBは、広告の1インプレッションに対して出稿側がリアルタイムの「入札」を行うことを実現する仕組みである。もちろんここでも、リアルタイム性の高い、高速な処理が求められる。

 「リアルタイム性を高めようとすれば、当然のことながらキャッシュの仕組みはほぼ役に立たなくなります」というfukata氏は、「AdStirのRTB Exchangeでは、非同期の処理をうまく利用することで、キャッシュのみに依存せずにオーバーヘッドをため込まない仕組みを用意しています」と話す。

 「RTBで最も処理待ちが長くなるのは、複数のDSPとの通信を行う部分。この待ち時間に非同期で必要な処理を行うことによって、全体の速度が遅くならないよう工夫をしています。処理自体はNode.jsやPerlなども使って書いていますね」(fukata氏)

 近年のRTBに対するニーズの高まりを受け、RTB Exchangeへのアクセス数はうなぎ上りの状態だ。時には「アクセス数が1日で2倍になったこともある」という。こうした状況にも、システム側の工夫と高度な並列化で対応を続けている。今後は、さらなるアクセス増と高速化のニーズに応えていくため、メッセージの圧縮技術にも注目をしているという。

 「最終的には、DSPとやり取りするメッセージの転送量の増大が問題になってくるため、JSONの圧縮技術などには非常に注目しています。RTBでは処理速度が重視されるため、あまり圧縮や展開にリソースを使うような技術は適していません。処理の速さと圧縮率のバランスを考えながら、DSP側と一緒に作業に取り組むことで、さらなるリアルタイム化を目指していきたいと思っています」(fukata氏)

Fluentd+MongoDBでよりリアルタイム性の高いログ解析を実現

 広告配信周辺の高速性もさることながら、AdStirでは、収益の向上に寄与する配信実績やRTBに関するログの解析機能も用意されている点が、利用者にとってのメリットの一つとなっている。特にRTBでは、複数のDSPから送られる入札情報などを分析することが、最も効率的にCPMを高める観点で重要になってくる。

 モーションビートでは、この大規模なログ解析を迅速に行うにあたってOSSのイベントロギングツールである「Fluentd」と「MongoDB」の組み合わせによる活用に取り組んでいる。

 「以前は、広告配信用の各サーバにため込んだログデータをrsyncで集計用のサーバに送っていましたが、この仕組みでは早くてもデータの更新に20分から30分の間隔が必要になっていました。ログデータの量自体も、数十ギガ単位で増加を続けており、これまでの仕組みでは処理が難しい状況になってきています。より高速なロギングが可能なFluentdとMongoDBの組み合わせを取り入れることで、よりリアルタイムに近い集計結果が出せるようになるはずです」(fukata氏)

 AdStirでは、Fluentdによって得られたログデータを集計用としてMongoDBに入れ、集計が終わったデータを表示用としてMySQLに格納している。実際に使い始めてみて、Fluentdはコミュニティが非常に活発で、自分たちの環境に適用するにあたって必要なモジュール開発などの情報なども入手しやすい点にメリットを感じているという。

 「Fluentdは、JSONをベースにしていることによるデータの見やすさに加えて、例えばrsyncではできなかったサーバ停止時のリトライ処理を自動的にやってくれるなど、大量のデータ処理に便利な仕組みがあらかじめ用意されています。また、プラグインによる機能拡張も容易で、Fluentd本体の可読性も高く作られています。新たなプロジェクトですが、その分コミュニティの活動も盛んで、個人のブログサイトやTwitterなどでの情報交換も活発に行われています。使っていく中で、何か疑問が生じても解決はしやすいですね」(fukata氏)

 同社のエンジニア達による、こうした多くの工夫と新たな技術への取り組みにより、AdStirは高速で信頼性の高い広告配信のためのプラットフォームを、迅速に自社のメディアビジネスへ組み入れたい企業にとって、魅力のあるサービスとなっている。

fluentd導入前の構成
fluentd導入前の構成
fluentd導入後の構成
fluentd導入後の構成

今後求められるのは「インフラに関する知識」

 モーションビートでは現在、7人の社内開発者を中心にAdStirに関連する各システムの開発を行っている。彼らは社外のスタッフと共に、広告配信まわり、SDKまわり、システムインフラ、RTB、集計システムなどの担当に分かれて、連絡を取り合いながら各サービスを構築している。開発作業では、各エンジニアに比較的大きな権限が与えられており、新たな機能の追加や技術の取り入れにあたっての敷居は高くないという。実際に、現在モジュール開発の主流となっている「Lua」や、高速ロギングのための「Fluentd」の採用は、現場のエンジニアたちが独自に情報を収集した上で評価し、導入を決めていったそうだ。

 今後、アドテクノロジーに取り組みたいと考えているエンジニアへのアドバイスを求めたところ、落合氏、fukata氏の両名とも「コードだけでなく、インフラ面での知識も持つべきだ」と答えた。

 「広告配信の分野だけでなく、ソーシャルゲームの分野などでも、今はコードの知識に加えてインフラ面に強いエンジニアが求められています。コードが書ける人材は多いのですが、実際の稼働時に発生する大量のトラフィックをどのように負荷分散すべきか、ネットワークレイヤのパケットレベルで理解できている人は結構少ないですね。この部分に知識を持っている人は、今後強みを生かせるのではないかと思います」(落合氏)

 「私は、インフラ面での業務知識はモーションビートに入ってから身につけたといってもいいのですが、こういうものはなかなか、座学では身につきません。幸い、現在はVPSやHerokuなどを活用して、開発者が個人でもWebサービスを展開できる環境があります。実際に自分でサービスを作って運用を始めると、その中で必ず何らかの問題に直面します。そうした問題への対処法を自分で調べて実装していくことは、非常に良い勉強になるはずです。最終的に、問題の状況に応じて、アプリケーション側からの対応とインフラ側からの対応を1人で行える人は強いと思いますね」(fukata氏)

 落合氏はさらに、「何か疑問が起きたときには、PHPにせよ、nginxにせよ、さらにネットワークに関することにせよ、最終的にはソースコードや仕様の原典に当たる習慣をつけておくことは、大きな力になると思います」と付け加えた。

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6842 2012/10/30 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング