Upload
ajiyoshi
View
2.415
Download
0
Embed Size (px)
DESCRIPTION
2014/01/15 ramake of pyfes 201307 slide
Citation preview
Erlang & RTB@ajiyoshi
!
2014/01/15
広告
HERE!
RTB
• Real Time Bidding
• ご存知のとおり、広告の価格をリアルタイムのオークションで決める仕組み
広告リクエスト
媒体側 広告 サーバ (SSP)
Browser
Bid リクエスト
媒体側 広告 サーバ (SSP)
Browser広告主側 広告サーバ (DSP)
Browser
10
Bid
20
30
15
媒体側 広告 サーバ (SSP)
広告主側 広告サーバ (DSP)
Browser
10
オークション
20
※generally “second price auction” second highest bid price will be the contract price
15
30
媒体側 広告 サーバ (SSP)
広告主側 広告サーバ (DSP)
Browser
媒体側 広告 サーバ (SSP)
10
広告主側 広告サーバ (DSP)
勝者の広告を表示
20
15
30
問題
• これを作るとして、どう設計するか
cf. DSP
• http://d.hatena.ne.jp/yamaz/20111026
• RTB用のADサーバこそ最強である必要がある件
cf. DSP
• 全SSP分のbidリクエストを受けきるパワーが必要
• 普通のadサーバとして非常に強力である必要がある
SSP
• 100億RTB imp x DSP10社 → 1000億bid
• 外部ネットワークアクセス • ラック内ではない • 同じL2にぶら下がるわけでもない
• 普通のadサーバならやりたくない
要件• 堅牢であること • 高速であること • < 100msec (可能なら)
• ネットワークIOでブロックしないこと
• 適切なタイムアウト処理(超重要)
Erlangで作りました
• 堅牢、安定 • 軽量プロセス • 非同期プログラムを簡潔に記述可能
性能&実績• 2011年10月リリース
• 2014年1月現在
• ピーク時 30,000 bid/秒
• 15億 bid/日
• 0.9億 rtb imp/日 27億 rtb imp/月
Browser
媒体側 広告 サーバ (SSP)
10
広告主側 広告サーバ (DSP)
勝者の広告を表示
20
15
30
bid数
Erlang
• 関数型言語 • とされているが再代入がないだけ
• 軽量プロセス • 思いのほか実用志向言語
実用?
プロトから製品へ• どのライブラリを使う? • 全部自分で書くわけにはいかない • 依存関係はどうする?
• ステージングはどうする? • それぞれの設定
• リリース(デプロイ)はどうする?
例:依存関係• 2世代前:CPANとかgemでシステムにインストール
• 1世代前:pyenvとかrbenvとかperlbrewで個別の環境を構築
• 現在:pip Bundler Cartonなどでアプリケーションと同梱
• 現在’:仮想環境と自動化
例:Webアプリケーション
• フレームワークの設定 • ポート、ホスト名、ルーティング等
• アプリケーション固有の設定 • DB関連とか色々
• ロギングなど周辺設定 • 出力先、ローテーション、fluentd の設定等
Erlang
• 全部OTPアプリケーション
• 起動方法、設定方法などが共通化、抽象化されている
• 依存関係をアプリケーションに記述する • 依存関係の初期化や起動は標準で面倒みてくれる
Erlangの難点• 日本語ドキュメントが少ない
• @voluntasさんの記事
• @ymotongpoo さんの翻訳
• 本(飛行機、オライリー、@ymotongpoo ← New!)
• 公式ドキュメントは豊富だが • rebarを多用するのに、rebarのドキュメントは事実上ソースコードのみ
ライブラリとか• ロギング
• lager
• HTTPD
• yaws → cowboy
• 内部シリアライズフォーマット • msgpack-erlang
• 外部(DSP側)シリアライズフォーマット
• msgpack、JSON、protobuf
テストとか
• EUnit
• CommonTest proper 使ってる人も
• meckというモックツールも
• 遅いので私は嫌い
Erlang VMとか• R14B04
• 2011年10月~
• R15B
• 2012年3月~
• R16B
• 2013年6月~
• そのうちに R16B01に上げる予定
VMパラメタ
• sbwt none
• 実験的パラメタ • ものすごい効いた
• kernel epoll true
• あとは普通
まとめ• Erlangは実用的
• 広告業界はハードコアな技術が求められるので腕に覚えのあるお前らにおすすめ
• 安定性、負荷、ネットワーク、ハードウェア、統計、解析、ビジネスの総合力
• ご質問があればどうぞ