Transcript
Page 1: Ad tech 勉強会 20140115

Erlang & RTB@ajiyoshi

!

2014/01/15

Page 2: Ad tech 勉強会 20140115

広告

HERE!

Page 3: Ad tech 勉強会 20140115

RTB

• Real Time Bidding

• ご存知のとおり、広告の価格をリアルタイムのオークションで決める仕組み

Page 4: Ad tech 勉強会 20140115

広告リクエスト

媒体側 広告 サーバ (SSP)

Browser

Page 5: Ad tech 勉強会 20140115

Bid リクエスト

媒体側 広告 サーバ (SSP)

Browser広告主側 広告サーバ (DSP)

Page 6: Ad tech 勉強会 20140115

Browser

10

Bid

20

30

15

媒体側 広告 サーバ (SSP)

広告主側 広告サーバ (DSP)

Page 7: Ad tech 勉強会 20140115

Browser

10

オークション

20

※generally “second price auction” second highest bid price will be the contract price

15

30

媒体側 広告 サーバ (SSP)

広告主側 広告サーバ (DSP)

Page 8: Ad tech 勉強会 20140115

Browser

媒体側 広告 サーバ (SSP)

10

広告主側 広告サーバ (DSP)

勝者の広告を表示

20

15

30

Page 9: Ad tech 勉強会 20140115

問題

• これを作るとして、どう設計するか

Page 10: Ad tech 勉強会 20140115

cf. DSP

• http://d.hatena.ne.jp/yamaz/20111026

• RTB用のADサーバこそ最強である必要がある件

Page 11: Ad tech 勉強会 20140115

cf. DSP

• 全SSP分のbidリクエストを受けきるパワーが必要

• 普通のadサーバとして非常に強力である必要がある

Page 12: Ad tech 勉強会 20140115

SSP

• 100億RTB imp x DSP10社 → 1000億bid

• 外部ネットワークアクセス • ラック内ではない • 同じL2にぶら下がるわけでもない

• 普通のadサーバならやりたくない

Page 13: Ad tech 勉強会 20140115

要件• 堅牢であること • 高速であること • < 100msec (可能なら)

• ネットワークIOでブロックしないこと

• 適切なタイムアウト処理(超重要)

Page 14: Ad tech 勉強会 20140115

Erlangで作りました

• 堅牢、安定 • 軽量プロセス • 非同期プログラムを簡潔に記述可能

Page 15: Ad tech 勉強会 20140115

性能&実績• 2011年10月リリース

• 2014年1月現在

• ピーク時 30,000 bid/秒

• 15億 bid/日

• 0.9億 rtb imp/日 27億 rtb imp/月

Page 16: Ad tech 勉強会 20140115

Browser

媒体側 広告 サーバ (SSP)

10

広告主側 広告サーバ (DSP)

勝者の広告を表示

20

15

30

Page 17: Ad tech 勉強会 20140115

bid数

Page 18: Ad tech 勉強会 20140115

Erlang

• 関数型言語 • とされているが再代入がないだけ

• 軽量プロセス • 思いのほか実用志向言語

Page 19: Ad tech 勉強会 20140115

実用?

Page 20: Ad tech 勉強会 20140115

プロトから製品へ• どのライブラリを使う? • 全部自分で書くわけにはいかない • 依存関係はどうする?

• ステージングはどうする? • それぞれの設定

• リリース(デプロイ)はどうする?

Page 21: Ad tech 勉強会 20140115

例:依存関係• 2世代前:CPANとかgemでシステムにインストール

• 1世代前:pyenvとかrbenvとかperlbrewで個別の環境を構築

• 現在:pip Bundler Cartonなどでアプリケーションと同梱

• 現在’:仮想環境と自動化

Page 22: Ad tech 勉強会 20140115

例:Webアプリケーション

• フレームワークの設定 • ポート、ホスト名、ルーティング等

• アプリケーション固有の設定 • DB関連とか色々

• ロギングなど周辺設定 • 出力先、ローテーション、fluentd の設定等

Page 23: Ad tech 勉強会 20140115

Erlang

• 全部OTPアプリケーション

• 起動方法、設定方法などが共通化、抽象化されている

• 依存関係をアプリケーションに記述する • 依存関係の初期化や起動は標準で面倒みてくれる

Page 24: Ad tech 勉強会 20140115

Erlangの難点• 日本語ドキュメントが少ない

• @voluntasさんの記事

• @ymotongpoo さんの翻訳

• 本(飛行機、オライリー、@ymotongpoo ← New!)

• 公式ドキュメントは豊富だが • rebarを多用するのに、rebarのドキュメントは事実上ソースコードのみ

Page 25: Ad tech 勉強会 20140115

ライブラリとか• ロギング

• lager

• HTTPD

• yaws → cowboy

• 内部シリアライズフォーマット • msgpack-erlang

• 外部(DSP側)シリアライズフォーマット

• msgpack、JSON、protobuf

Page 26: Ad tech 勉強会 20140115

テストとか

• EUnit

• CommonTest proper 使ってる人も

• meckというモックツールも

• 遅いので私は嫌い

Page 27: Ad tech 勉強会 20140115

Erlang VMとか• R14B04

• 2011年10月~

• R15B

• 2012年3月~

• R16B

• 2013年6月~

• そのうちに R16B01に上げる予定

Page 28: Ad tech 勉強会 20140115

VMパラメタ

• sbwt none

• 実験的パラメタ • ものすごい効いた

• kernel epoll true

• あとは普通

Page 29: Ad tech 勉強会 20140115

まとめ• Erlangは実用的

• 広告業界はハードコアな技術が求められるので腕に覚えのあるお前らにおすすめ

• 安定性、負荷、ネットワーク、ハードウェア、統計、解析、ビジネスの総合力

• ご質問があればどうぞ