Upload
adstir
View
711
Download
0
Embed Size (px)
Citation preview
Copyright © UNITED, Inc. All Rights Reserved.Copyright © UNITED, Inc. All Rights Reserved.
AdStirSSP(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
bidbid
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
fluentd
fluentd
Batch
AD(fluentd)
AD(fluentd)
fluentd
logslogslogs
ELB
perl
logs/YYYY/MM/DD/HH/${tag}.log.0.gz
S3
mysql
Copyright © UNITED, Inc. All Rights Reserved.
問題点 1
• ログファイルが日別=> 時間別に変更
• ログファイルが単一サーバに集中
• rsyncがこけた時のリカバリーが手動=> fluentdで解決!
• 集計がスケールしにくい・・・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
fluentd
fluentd
AD(fluentd)
AD(fluentd)
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/file1 \--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/file1 \--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 --jobflow JOBFLOW_ID--stream \--mapper s3n://BUCKET/path/to/mapper.py \--reducer s3n://BUCKET/path/to/reducer.py \--input s3n://BUCKET/path/to/file1 \--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/file1 \--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