狠狠撸

狠狠撸Share a Scribd company logo
Copyright ? UNITED, Inc. All Rights Reserved.Copyright ? UNITED, Inc. All Rights Reserved.
AdStir
SSP(RTB)を支える集計インフラの変遷
1
2013.09.27
Copyright ? UNITED, Inc. All Rights Reserved.
自己紹介
? @fukata (github: fukata)
? ログ周り, バッチ系
? Fluentd, EMR
? Perl, Ruby, Go
? 食べ歩き, 写真
2
Copyright ? UNITED, Inc. All Rights Reserved.
アジェンダ
? UNTIED, inc
? AdStir
? 集計インフラの変遷
? TODO
3
Copyright ? UNITED, Inc. All Rights Reserved.
UNITED, inc.
4
Copyright ? UNITED, Inc. All Rights Reserved.
CocoPPa
5
Copyright ? UNITED, Inc. All Rights Reserved.
AdStir
6
Copyright ? UNITED, Inc. All Rights Reserved.
SSP
7
自社広告
AdStir公認アドネットワーク 他社アドネットワーク
配分比率(%)に応じて抽選
RTB
自社広告
RTB
公認
在庫切れの場合, 再抽選
他社
Browser 他アドネットワークAdStir
Copyright ? UNITED, Inc. All Rights Reserved.
RTB
8
AdStir DSPs
50ms
DSP A
DSP B
DSP C
オークション
bid
bid
bid
bid
Browser
Copyright ? UNITED, Inc. All Rights Reserved.
ログ
? 1,000,000,000 レコード / 日
? 800 GB(非圧縮) / 日
9
Copyright ? UNITED, Inc. All Rights Reserved.
集計インフラ(2011)
10
Copyright ? UNITED, Inc. All Rights Reserved.
集計インフラ(2011)
11
rsync
perlスクリプトで集計
AD
(syslog)
AD
(syslog)
Batch
mysql
Copyright ? UNITED, Inc. All Rights Reserved.
問題点 1
? ログファイルが日別
? ログファイルが単一サーバに集中
? rsyncがこけた時のリカバリーが手動
? 集計がスケールしにくい???
12
Copyright ? UNITED, Inc. All Rights Reserved.
問題点 2
? 物理サーバ
? 急なリクエスト増加に対応できない
? 一度増やすと簡単にサーバ減らせない
? 回線使用料がランニングコストの1/3
13
Copyright ? UNITED, Inc. All Rights Reserved.
集計インフラ(2013.04)
14
Copyright ? UNITED, Inc. All Rights Reserved.
集計インフラ(2013.04)
15
?uentd
?uentd
Batch
AD
(?uentd)
AD
(?uentd)
?uentd
logslogslogs
ELB
perl
logs/YYYY/MM/DD/HH/${tag}.log.0.gz
S3
mysql
Copyright ? UNITED, Inc. All Rights Reserved.
問題点 1
? ログファイルが日別
=> 時間別に変更
? ログファイルが単一サーバに集中
? rsyncがこけた時のリカバリーが手動
=> ?uentdで解決!
? 集計がスケールしにくい???
16
Copyright ? UNITED, Inc. All Rights Reserved.
問題点 2
? 物理サーバ => EC2
? 急なリクエスト増加に対応できない
=> 5分程度で追加?投入可能
? 一度増やすと簡単にサーバ減らせない
=> インスタンスをストップするだけ
? 回線使用料がランニングコストの1/3
=> 使った分だけ(従来の1/5くらい)
17
Copyright ? UNITED, Inc. All Rights Reserved.
集計インフラ(現在)
18
Copyright ? UNITED, Inc. All Rights Reserved.
集計インフラ(現在)
19
?uentd
?uentd
AD
(?uentd)
AD
(?uentd)
ELB
Cluster
EMR
Batch
logs/YYYY/MM/DD/HH/${tag}.log.0.gz
S3
Cluster
mysql
Copyright ? UNITED, Inc. All Rights Reserved.
問題点
? ログファイルが単一サーバに集中
=> S3にのみアップすることで解決
? 集計がスケールしにくい???
=> EMR!!
20
Copyright ? UNITED, Inc. All Rights Reserved.
EMR
? すぐに使い始められる
? クラスタ規模も簡単に変更できる
? クラスタのメンテコスト削減
? 1日以上かかっていた集計が2時間弱で
終わるようになった
21
Copyright ? UNITED, Inc. All Rights Reserved.
JOB FLOWの起動
22
$ elastic-mapreduce --create 
--stream 
--mapper s3n://BUCKET/path/to/mapper.py 
--reducer s3n://BUCKET/path/to/reducer.py 
--input s3n://BUCKET/path/to/?le1 
--output s3n://BUCKET/path/to/output
Copyright ? UNITED, Inc. All Rights Reserved.
デバッグ用オプション
23
$ elastic-mapreduce --create 
--keypair KEYPAIR_NAME 
--enable-debugging 
--log-uri s3n://BUCKET/path/to/debug 
--stream 
--mapper s3n://BUCKET/path/to/mapper.py 
--reducer s3n://BUCKET/path/to/reducer.py 
--input s3n://BUCKET/path/to/?le1 
--output s3n://BUCKET/path/to/output
Copyright ? UNITED, Inc. All Rights Reserved.
JOB FLOWの永続化
24
$ elastic-mapreduce --create 
--alive 
--keypair KEYPAIR_NAME 
--enable-debugging 
--log-uri s3n://BUCKET/path/to/debug
$ elastic-mapreduce --job?ow JOBFLOW_ID
--stream 
--mapper s3n://BUCKET/path/to/mapper.py 
--reducer s3n://BUCKET/path/to/reducer.py 
--input s3n://BUCKET/path/to/?le1 
--output s3n://BUCKET/path/to/output
Copyright ? UNITED, Inc. All Rights Reserved.
実際のオプション例
25
$ elastic-mapreduce --create 
--name JOBFLOW_NAME
--keypair KEYPAIR_NAME 
--enable-debugging 
--log-uri s3n://BUCKET/path/to/debug 
--num-instances 5 
--master-instance-type m1.large 
--slave-instance-type c1.medium 
--stream 
--jobconf stream.recordreader.compression=gzip 
--mapper s3n://BUCKET/path/to/mapper.py 
--reducer s3n://BUCKET/path/to/reducer.py 
--input s3n://BUCKET/path/to/?le1 
--output s3n://BUCKET/path/to/output
Copyright ? UNITED, Inc. All Rights Reserved.
elastic-mapreduceコマンド
? 結構色んな事が出来る
? オプションが大量にある
? Ruby 1.8系までしか対応してない
26
Copyright ? UNITED, Inc. All Rights Reserved.
スクリプトでラップ
27
$ perl script/batch EMR::JobRegister 
--func rtb_report 
--from ‘2013-09-27 13:00:00’ 
--to ‘2013-09-27 14:00:00’
Copyright ? UNITED, Inc. All Rights Reserved.
出力
28
elastic-mapreduce --create 
--name RtbReport
--keypair KEYPAIR_NAME 
--enable-debugging 
--log-uri s3n://BUCKET/debug/2013/09/27/rtb_report_140000 
--num-instances 5 
--master-instance-type m1.large 
--slave-instance-type c1.medium 
--stream 
--jobconf stream.recordreader.compression=gzip 
--mapper s3n://BUCKET/streaming/rtb_report/mapper.py 
--reducer s3n://BUCKET/streaming/rtb_report/reducer.py 
--input s3n://BUCKET/logs/2013/09/27/13/bid.*, s3n://BUCKET/logs/2013/09/27/13/
impression.*, s3n://BUCKET/logs/2013/09/27/13/click.* 
--output s3n://BUCKET/output/2013/09/27/rtb_report_140000
Copyright ? UNITED, Inc. All Rights Reserved.
TODO
29
Copyright ? UNITED, Inc. All Rights Reserved.
TODO
? hive
? streamingでmapper/reducerそれぞれを実装するのが怠い
? アドホックなクエリを気軽に実行できる
? ログデータの中間処理
? 検証では4倍ほど速くなった
? job監視?可視化
? ステータス、実行時間 等
30
Copyright ? UNITED, Inc. All Rights Reserved.
Thank you
31
Copyright ? UNITED, Inc. All Rights Reserved.
Recruit
? http://united.jp/recruit/
? SSP, RTB配信エンジン, 集計インフラを一
緒に作りませんか?(広告に興味なく
ても大丈夫です)
? go書きたい人
32

More Related Content

20130927 adstir emr

  • 1. Copyright ? UNITED, Inc. All Rights Reserved.Copyright ? UNITED, Inc. All Rights Reserved. AdStir SSP(RTB)を支える集計インフラの変遷 1 2013.09.27
  • 2. Copyright ? UNITED, Inc. All Rights Reserved. 自己紹介 ? @fukata (github: fukata) ? ログ周り, バッチ系 ? Fluentd, EMR ? Perl, Ruby, Go ? 食べ歩き, 写真 2
  • 3. Copyright ? UNITED, Inc. All Rights Reserved. アジェンダ ? UNTIED, inc ? AdStir ? 集計インフラの変遷 ? TODO 3
  • 4. Copyright ? UNITED, Inc. All Rights Reserved. UNITED, inc. 4
  • 5. Copyright ? UNITED, Inc. All Rights Reserved. CocoPPa 5
  • 6. Copyright ? UNITED, Inc. All Rights Reserved. AdStir 6
  • 7. Copyright ? UNITED, Inc. All Rights Reserved. SSP 7 自社広告 AdStir公認アドネットワーク 他社アドネットワーク 配分比率(%)に応じて抽選 RTB 自社広告 RTB 公認 在庫切れの場合, 再抽選 他社 Browser 他アドネットワークAdStir
  • 8. Copyright ? UNITED, Inc. All Rights Reserved. RTB 8 AdStir DSPs 50ms DSP A DSP B DSP C オークション bid bid bid bid Browser
  • 9. Copyright ? UNITED, Inc. All Rights Reserved. ログ ? 1,000,000,000 レコード / 日 ? 800 GB(非圧縮) / 日 9
  • 10. Copyright ? UNITED, Inc. All Rights Reserved. 集計インフラ(2011) 10
  • 11. Copyright ? UNITED, Inc. All Rights Reserved. 集計インフラ(2011) 11 rsync perlスクリプトで集計 AD (syslog) AD (syslog) Batch mysql
  • 12. Copyright ? UNITED, Inc. All Rights Reserved. 問題点 1 ? ログファイルが日別 ? ログファイルが単一サーバに集中 ? rsyncがこけた時のリカバリーが手動 ? 集計がスケールしにくい??? 12
  • 13. Copyright ? UNITED, Inc. All Rights Reserved. 問題点 2 ? 物理サーバ ? 急なリクエスト増加に対応できない ? 一度増やすと簡単にサーバ減らせない ? 回線使用料がランニングコストの1/3 13
  • 14. Copyright ? UNITED, Inc. All Rights Reserved. 集計インフラ(2013.04) 14
  • 15. Copyright ? UNITED, Inc. All Rights Reserved. 集計インフラ(2013.04) 15 ?uentd ?uentd Batch AD (?uentd) AD (?uentd) ?uentd logslogslogs ELB perl logs/YYYY/MM/DD/HH/${tag}.log.0.gz S3 mysql
  • 16. Copyright ? UNITED, Inc. All Rights Reserved. 問題点 1 ? ログファイルが日別 => 時間別に変更 ? ログファイルが単一サーバに集中 ? rsyncがこけた時のリカバリーが手動 => ?uentdで解決! ? 集計がスケールしにくい??? 16
  • 17. Copyright ? UNITED, Inc. All Rights Reserved. 問題点 2 ? 物理サーバ => EC2 ? 急なリクエスト増加に対応できない => 5分程度で追加?投入可能 ? 一度増やすと簡単にサーバ減らせない => インスタンスをストップするだけ ? 回線使用料がランニングコストの1/3 => 使った分だけ(従来の1/5くらい) 17
  • 18. Copyright ? UNITED, Inc. All Rights Reserved. 集計インフラ(現在) 18
  • 19. Copyright ? UNITED, Inc. All Rights Reserved. 集計インフラ(現在) 19 ?uentd ?uentd AD (?uentd) AD (?uentd) ELB Cluster EMR Batch logs/YYYY/MM/DD/HH/${tag}.log.0.gz S3 Cluster mysql
  • 20. Copyright ? UNITED, Inc. All Rights Reserved. 問題点 ? ログファイルが単一サーバに集中 => S3にのみアップすることで解決 ? 集計がスケールしにくい??? => EMR!! 20
  • 21. Copyright ? UNITED, Inc. All Rights Reserved. EMR ? すぐに使い始められる ? クラスタ規模も簡単に変更できる ? クラスタのメンテコスト削減 ? 1日以上かかっていた集計が2時間弱で 終わるようになった 21
  • 22. Copyright ? UNITED, Inc. All Rights Reserved. JOB FLOWの起動 22 $ elastic-mapreduce --create --stream --mapper s3n://BUCKET/path/to/mapper.py --reducer s3n://BUCKET/path/to/reducer.py --input s3n://BUCKET/path/to/?le1 --output s3n://BUCKET/path/to/output
  • 23. Copyright ? UNITED, Inc. All Rights Reserved. デバッグ用オプション 23 $ elastic-mapreduce --create --keypair KEYPAIR_NAME --enable-debugging --log-uri s3n://BUCKET/path/to/debug --stream --mapper s3n://BUCKET/path/to/mapper.py --reducer s3n://BUCKET/path/to/reducer.py --input s3n://BUCKET/path/to/?le1 --output s3n://BUCKET/path/to/output
  • 24. Copyright ? UNITED, Inc. All Rights Reserved. JOB FLOWの永続化 24 $ elastic-mapreduce --create --alive --keypair KEYPAIR_NAME --enable-debugging --log-uri s3n://BUCKET/path/to/debug $ elastic-mapreduce --job?ow JOBFLOW_ID --stream --mapper s3n://BUCKET/path/to/mapper.py --reducer s3n://BUCKET/path/to/reducer.py --input s3n://BUCKET/path/to/?le1 --output s3n://BUCKET/path/to/output
  • 25. Copyright ? UNITED, Inc. All Rights Reserved. 実際のオプション例 25 $ elastic-mapreduce --create --name JOBFLOW_NAME --keypair KEYPAIR_NAME --enable-debugging --log-uri s3n://BUCKET/path/to/debug --num-instances 5 --master-instance-type m1.large --slave-instance-type c1.medium --stream --jobconf stream.recordreader.compression=gzip --mapper s3n://BUCKET/path/to/mapper.py --reducer s3n://BUCKET/path/to/reducer.py --input s3n://BUCKET/path/to/?le1 --output s3n://BUCKET/path/to/output
  • 26. Copyright ? UNITED, Inc. All Rights Reserved. elastic-mapreduceコマンド ? 結構色んな事が出来る ? オプションが大量にある ? Ruby 1.8系までしか対応してない 26
  • 27. Copyright ? UNITED, Inc. All Rights Reserved. スクリプトでラップ 27 $ perl script/batch EMR::JobRegister --func rtb_report --from ‘2013-09-27 13:00:00’ --to ‘2013-09-27 14:00:00’
  • 28. Copyright ? UNITED, Inc. All Rights Reserved. 出力 28 elastic-mapreduce --create --name RtbReport --keypair KEYPAIR_NAME --enable-debugging --log-uri s3n://BUCKET/debug/2013/09/27/rtb_report_140000 --num-instances 5 --master-instance-type m1.large --slave-instance-type c1.medium --stream --jobconf stream.recordreader.compression=gzip --mapper s3n://BUCKET/streaming/rtb_report/mapper.py --reducer s3n://BUCKET/streaming/rtb_report/reducer.py --input s3n://BUCKET/logs/2013/09/27/13/bid.*, s3n://BUCKET/logs/2013/09/27/13/ impression.*, s3n://BUCKET/logs/2013/09/27/13/click.* --output s3n://BUCKET/output/2013/09/27/rtb_report_140000
  • 29. Copyright ? UNITED, Inc. All Rights Reserved. TODO 29
  • 30. Copyright ? UNITED, Inc. All Rights Reserved. TODO ? hive ? streamingでmapper/reducerそれぞれを実装するのが怠い ? アドホックなクエリを気軽に実行できる ? ログデータの中間処理 ? 検証では4倍ほど速くなった ? job監視?可視化 ? ステータス、実行時間 等 30
  • 31. Copyright ? UNITED, Inc. All Rights Reserved. Thank you 31
  • 32. Copyright ? UNITED, Inc. All Rights Reserved. Recruit ? http://united.jp/recruit/ ? SSP, RTB配信エンジン, 集計インフラを一 緒に作りませんか?(広告に興味なく ても大丈夫です) ? go書きたい人 32