32
Copyright © UNITED, Inc. All Rights Reserved. Copyright © UNITED, Inc. All Rights Reserved. AdStir SSP(RTB)を支える集計インフラの変遷 1 2013.09.27

20130927 adstir emr

  • Upload
    adstir

  • View
    711

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 20130927 adstir emr

Copyright © UNITED, Inc. All Rights Reserved.Copyright © UNITED, Inc. All Rights Reserved.

AdStirSSP(RTB)を支える集計インフラの変遷

1

2013.09.27

Page 2: 20130927 adstir emr

Copyright © UNITED, Inc. All Rights Reserved.

自己紹介• @fukata (github: fukata)

• ログ周り, バッチ系

• Fluentd, EMR

• Perl, Ruby, Go

• 食べ歩き, 写真

2

Page 3: 20130927 adstir emr

Copyright © UNITED, Inc. All Rights Reserved.

アジェンダ

• UNTIED, inc

• AdStir

• 集計インフラの変遷

• TODO

3

Page 4: 20130927 adstir emr

Copyright © UNITED, Inc. All Rights Reserved.

UNITED, inc.

4

Page 5: 20130927 adstir emr

Copyright © UNITED, Inc. All Rights Reserved.

CocoPPa

5

Page 6: 20130927 adstir emr

Copyright © UNITED, Inc. All Rights Reserved.

AdStir

6

Page 7: 20130927 adstir emr

Copyright © UNITED, Inc. All Rights Reserved.

SSP

7

自社広告

AdStir公認アドネットワーク 他社アドネットワーク

配分比率(%)に応じて抽選

RTB

自社広告

RTB

公認

在庫切れの場合, 再抽選 他社

Browser 他アドネットワークAdStir

Page 8: 20130927 adstir emr

Copyright © UNITED, Inc. All Rights Reserved.

RTB

8

AdStir DSPs

50ms

DSP A

DSP B

DSP C

オークション

bid

bidbid

bid

Browser

Page 9: 20130927 adstir emr

Copyright © UNITED, Inc. All Rights Reserved.

ログ

• 1,000,000,000 レコード / 日

• 800 GB(非圧縮) / 日

9

Page 10: 20130927 adstir emr

Copyright © UNITED, Inc. All Rights Reserved.

集計インフラ(2011)

10

Page 11: 20130927 adstir emr

Copyright © UNITED, Inc. All Rights Reserved.

集計インフラ(2011)

11

rsync

perlスクリプトで集計

AD(syslog)

AD(syslog)

Batch

mysql

Page 12: 20130927 adstir emr

Copyright © UNITED, Inc. All Rights Reserved.

問題点 1

• ログファイルが日別

• ログファイルが単一サーバに集中

• rsyncがこけた時のリカバリーが手動

• 集計がスケールしにくい・・・

12

Page 13: 20130927 adstir emr

Copyright © UNITED, Inc. All Rights Reserved.

問題点 2

• 物理サーバ

• 急なリクエスト増加に対応できない

• 一度増やすと簡単にサーバ減らせない

• 回線使用料がランニングコストの1/3

13

Page 14: 20130927 adstir emr

Copyright © UNITED, Inc. All Rights Reserved.

集計インフラ(2013.04)

14

Page 15: 20130927 adstir emr

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

Page 16: 20130927 adstir emr

Copyright © UNITED, Inc. All Rights Reserved.

問題点 1

• ログファイルが日別=> 時間別に変更

• ログファイルが単一サーバに集中

• rsyncがこけた時のリカバリーが手動=> fluentdで解決!

• 集計がスケールしにくい・・・16

Page 17: 20130927 adstir emr

Copyright © UNITED, Inc. All Rights Reserved.

問題点 2• 物理サーバ => EC2

• 急なリクエスト増加に対応できない=> 5分程度で追加・投入可能

• 一度増やすと簡単にサーバ減らせない=> インスタンスをストップするだけ

• 回線使用料がランニングコストの1/3

=> 使った分だけ(従来の1/5くらい)

17

Page 18: 20130927 adstir emr

Copyright © UNITED, Inc. All Rights Reserved.

集計インフラ(現在)

18

Page 19: 20130927 adstir emr

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

Page 20: 20130927 adstir emr

Copyright © UNITED, Inc. All Rights Reserved.

問題点

• ログファイルが単一サーバに集中=> S3にのみアップすることで解決

• 集計がスケールしにくい・・・=> EMR!!

20

Page 21: 20130927 adstir emr

Copyright © UNITED, Inc. All Rights Reserved.

EMR

• すぐに使い始められる

• クラスタ規模も簡単に変更できる

• クラスタのメンテコスト削減

• 1日以上かかっていた集計が2時間弱で終わるようになった

21

Page 22: 20130927 adstir emr

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

Page 23: 20130927 adstir emr

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

Page 24: 20130927 adstir emr

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

Page 25: 20130927 adstir emr

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

Page 26: 20130927 adstir emr

Copyright © UNITED, Inc. All Rights Reserved.

elastic-mapreduceコマンド

• 結構色んな事が出来る

• オプションが大量にある

• Ruby 1.8系までしか対応してない

26

Page 27: 20130927 adstir emr

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’

Page 28: 20130927 adstir emr

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

Page 29: 20130927 adstir emr

Copyright © UNITED, Inc. All Rights Reserved.

TODO

29

Page 30: 20130927 adstir emr

Copyright © UNITED, Inc. All Rights Reserved.

TODO• hive

• streamingでmapper/reducerそれぞれを実装するのが怠い

• アドホックなクエリを気軽に実行できる

• ログデータの中間処理• 検証では4倍ほど速くなった

• job監視・可視化

• ステータス、実行時間 等

30

Page 31: 20130927 adstir emr

Copyright © UNITED, Inc. All Rights Reserved.

Thank you

31

Page 32: 20130927 adstir emr

Copyright © UNITED, Inc. All Rights Reserved.

Recruit

• http://united.jp/recruit/

• SSP, RTB配信エンジン, 集計インフラを一緒に作りませんか?(広告に興味なくても大丈夫です)

• go書きたい人

32