マーベリックのDSPプロダクトSphereのバックエンド技術構成

マーベリック技術広報担当のリチャード伊真岡です。

今回は弊社のDSP(Demand Side Platform)プロダクトであるSphereバックエンドの技術構成を紹介いたします。Sphereも弊社のもう一つのプロダクトであるCirquaと同様、バックエンドはScalaで書かれています。

採用技術: Scala, Finagle, PlayFramework, ScalikeJDBC, MariaDB, Redis, Kafka, Spark, HDFS, 等

DSPとは

DSPとはDemand Side Platformの省略で、広告枠を「要求する・買う」側つまり広告主のためのサービスです。DSPと対になるサービスがSSP、Supply Side Platformと呼ばれこちらは広告枠を「供給する・売る」側、つまりWebサイトやアプリを運用するメディア側向けのサービスです。

どちらがDemandでどちらがSupplyかわかりづらいかもしれませんが、アドテクノロジーの世界では商品としての広告枠に対してのDemandとSupplyという意味でDSPとSSPという呼び方になっています。

DSPとSSPは別の会社が運営する全く別のサービスの場合もありますが、中には一つの会社がDSPとSSP両方のサービスを運営していることもあります。

さて、DSPとSSPがどう連携しているかをお見せするためにこちらをご覧いただきたいと思います。弊社デザイナ坂東とエンジニアが協力して作成しScalaMatsuri期間中に公開した「あなたのブラウザに広告がでる仕組み」です。この記事では簡単のためADNW(アドネットワーク)に関しては説明しませんが、DSPとSSPが連携することによって広告主の出向した広告がメディアの広告枠に表示される様子を見て取れるかと思います。(今回はアニメーションで表現していますが実際にはLEDデバイスを経路に沿ってひからせるIoTデバイスとして制作しました。)

f:id:maverick-techblog:20190819120115g:plain

Sphereの処理の流れ

DSPとSSPが連携して広告表示する場合、メディアの運営するWebページの広告枠に対してオークションが行われて表示される広告が決定されます。そのオークションに関わる処理の流れをSphereの視点から詳しく見ていきましょう。

f:id:maverick-techblog:20190819121252p:plain

まず、訪問者がメディアの運営するWebサイトを閲覧すると、SSPに対して広告要求が送られます。Sphereは入札サーバを通してSSPから入札要求を受け取り、入札要求に付属するデータに基づいて入札に参加するかどうかを自動で判断します。そして参加する場合入札サーバはSSPに対して入札を送信します。

f:id:maverick-techblog:20190819121334p:plain

ここでSSPはSphereにだけ入札要求を送るのではなくオークションを行うため複数のDSPサービスに対して入札要求を送っています。各DSPサービスはSphereと同様に入札参加すると判断した場合に入札をSSPに対して返します。

f:id:maverick-techblog:20190819121359p:plain

Sphereが広告枠を落札できたときはSphereから送信された広告が表示されます。ただし広告の画像は入札データの中に含まれるのではなく、Sphere内の別の画像配信サーバーから読み込まれます。 アドテクノロジーの世界では広告が表示されたことを「インプレッション」とよび計測の対象としています。Sphereの場合広告に含まれるタグによってトラッキングサーバにインプレッションのデータを送り、さらに訪問者が広告をクリックしてリンク先の広告主のページに遷移したら「広告クリック」を計測します。インプレッションや広告クリックなどの広告効果測定のためのデータはすべてトラッキングサーバからKafkaに送られ、その後HDFSに保存されます。 この記事では詳しく説明しませんが、Sphereの機械学習システムはこのHDFS上のデータに対してSparkジョブを走らせることが出来、その結果が広告配信の最適化などに利用されています。

Sphereの技術構成

ここからはSphereの技術構成を紹介します。

f:id:maverick-techblog:20190819121449p:plain

入札・トラッキングサーバはScalaで実装されていて、そのバックエンドにはRedis、さらにScalikeJDBCを通してアクセスするMariaDBがあります。また先程述べたように、トラッキングサーバーからは広告効果測定のためのデータがKafkaへ送られています。機械学習システムについてはこの記事では大まかにしか触れませんが、いずれ別の形で詳しく紹介するつもりです。

f:id:maverick-techblog:20190819121532p:plain

入札サーバはおよそ60インスタンス、トラッキングサーバはおよそ30インスタンスが同時に走っています。これらSphereのサーバー群はほぼ全てオンプレミスのデータセンタ内に配置されていて、機械学習用のインスタンスなどを含めると全体でのサーバーの数は約270台にもなり、そのサーバー郡の監視にはZabbixを利用しています。

実際にはこの記事で紹介する以外にも様々な処理が行われており、機械学習システムがバッチ処理の結果をMariaDBに書き込むケースも有ります。複雑なビジネスの要求に答えるため年月をかけて注意深く実装されたシステムがSphereの面白いところだと思います。