Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
広告ログのリアルタイム集計とその活用 / Realtime Ad log aggregati...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
wata
July 28, 2017
Technology
2
6.9k
広告ログのリアルタイム集計とその活用 / Realtime Ad log aggregation and utilization
Cookpad Tech Kitchen #9
https://cookpad.connpass.com/event/60831/
wata
July 28, 2017
Tweet
Share
More Decks by wata
See All by wata
クックパッド動画事業開発のチャレンジ / CookpadTV challenge
wata
1
2.3k
クックパッドの動画事業での AWS AppSync 活用事例 / Practical use of AWS AppSync by Cookpad
wata
17
12k
Other Decks in Technology
See All in Technology
The Rise of Browser Automation: AI-Powered Web Interaction in 2026
marcthompson_seo
0
170
品質を経営にどう語るか #jassttokyo / Communicating the Strategic Value of Quality to Executive Leadership
kyonmm
PRO
2
920
AgentCoreとLINEを使った飲食店おすすめアプリを作ってみた
yakumo
2
110
20260321_エンベディングってなに?RAGってなに?エンベディングの説明とGemini Embedding 2 の紹介
tsho
0
130
コンテキスト・ハーネスエンジニアリングの現在
hirosatogamo
PRO
6
670
Kiroで見直す開発プロセスとAI-DLC
k_adachi_01
0
110
TypeScript 7.0の現在地と備え方
uhyo
7
2k
俺の/私の最強アーキテクチャ決定戦開催 ― チームで新しいアーキテクチャに適合していくために / 20260322 Naoki Takahashi
shift_evolve
PRO
1
360
形式手法特論:SMT ソルバで解く認可ポリシの静的解析 #kernelvm / Kernel VM Study Tsukuba No3
ytaka23
1
700
生成AIで速度と品質を両立する、QAエンジニア・開発者連携のAI協調型テストプロセス
shota_kusaba
0
320
Phase01_AI座学_基礎
overflowinc
0
900
スピンアウト講座03_CLAUDE-MDとSKILL-MD
overflowinc
0
280
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
990
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
100
The Cult of Friendly URLs
andyhume
79
6.8k
Speed Design
sergeychernyshev
33
1.6k
How Software Deployment tools have changed in the past 20 years
geshan
0
33k
The Cost Of JavaScript in 2023
addyosmani
55
9.8k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Rails Girls Zürich Keynote
gr2m
96
14k
Producing Creativity
orderedlist
PRO
348
40k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
1.9k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
130
Transcript
ࠂϩάͷϦΞϧλΠϜूܭͱ ͦͷ׆༻ 2017-07-26 Cookpad Tech Kitchen #9 wata
自己紹介 • 渡辺 慎也 • マーケティングプロダクト開発部 • 広告配信基盤周りの整備、開発保守 • やりたいこと
• Rails でアプリを書くよりコンテンツ配信に関わ る、ミドルウェア、インフラ、プロトコルのアー キテクチャを考えることや、改善、安定運用
Agenda • サービス規模 • アーキテクチャ ‣ 以前 ‣ Lambda Architecture
‣ 変更後 • 活用方法について
サービス規模 • インスタンス • c3.xlarge, c4.xlarge で構成 • 5 〜
18 台(Auto Scaling) • ピーク時同時リクエスト数 • 2,000 req/s 以上 ※2017年7月現在
アーキテクチャ
アーキテクチャ HTML レンダリング時に JavaScript で広告配信サーバに リクエストを投げて表示する。 配信 サーバ impression log
click log 302 redirect JSON Ajax
アーキテクチャ reverse proxy app mysql memcached fluentd queue Amazon
Redshift #SJDPMBHF 4USFBNJOH-PBE backup batch %8) Amazon DynamoDB
アーキテクチャ reverse proxy app mysql memcached fluentd queue Amazon
Redshift #SJDPMBHF 4USFBNJOH-PBE backup batch %8) Amazon DynamoDB ログデータがバッチ集計終わって mysql に入るまでに 1 時間ぐらいのラグがあった
もっと早くログが出ているか 確認したい!
そこで
Lambda Architecture
Lambda Architecture 出典元:http://lambda-architecture.net/
Lambda Architecture 出典元:http://lambda-architecture.net/ 既存のバッチ処理集計がここにあたる
Lambda Architecture 出典元:http://lambda-architecture.net/ それに speed layer を追加
アーキテクチャ app mysql memcached fluentd queue Amazon Redshift #SJDPMBHF
4USFBNJOH-PBE backup batch DWH Amazon DynamoDB reverse proxy
アーキテクチャ app mysql memcached fluentd queue Amazon Redshift #SJDPMBHF
4USFBNJOH-PBE backup batch DWH Amazon DynamoDB reverse proxy ここに
アーキテクチャ app mysql memcached fluentd queue Amazon Redshift #SJDPMBHF
4USFBNJOH-PBE backup batch DWH Amazon Kinesis Streams Lambda function Amazon DynamoDB speed layer Amazon DynamoDB reverse proxy
アーキテクチャ app mysql memcached fluentd queue Amazon Redshift #SJDPMBHF
4USFBNJOH-PBE backup batch DWH Amazon Kinesis Streams Lambda function Amazon DynamoDB speed layer Amazon DynamoDB reverse proxy speed layer を追加
None
Kinesis Streams から Lambda で DynamoDB に書き込む
DynamoDB Streams で 次の Lambda を起動させ 1 時間単位、1 日単位で集計 (処理的には
ADD)
日単位の集計は 1 時間単位で集計した データを利用
950 executions/min 75 〜 125ms 225 executions/min 190 〜 425ms
2900 executions/min 0.2 〜 1.0s
活用方法について
活用方法について • 集計データの確認方法 ‣ batch layer の集計データは mysql を参照 ‣
speed layer の集計データは DynamoDB を参照 • 使い分け ‣ batch layer はレポーティング等の正式なデータと して利用 ‣ speed layer はあくまでも速報値や確認の為に利用
活用方法について • 異常検知(耐障害性) • ログの流量変化によって異常検知 • 配信制御 • 直近のデータを考慮して、高精度で制御 •
在庫予測 • 直近のデータを考慮して、予測値を最適化
異常検知(耐障害性) • layer で突き合わせをしてズレを検知 ‣ batch layer の集計と、speed layer の集計を突
き合わせて、大きなズレがある場合は異常とし てエンジニアに通知する • 冗長化 ‣ 別の集計方法(完全に別ではないが)をするこ とで、DynamoDB または Redshift が落ちてい ても完全にログ集計が止まることはない
配信制御 • インプレッションの出し方が単純には いかない商品がある • 例えば 500 インプレッションを 1 週
間で出す場合はなるべく平準化する必 要がある
配信制御
配信制御
これでは駄目で
配信制御
配信制御
平準化する
配信制御 • 出しすぎてもいけないし、期間で平準 化する必要がある
在庫予測 • 在庫が余った場合に、別の商品を掲出 させたいことがある。 • その場合に人手で配信設定をせずとも 直近のデータに基いて掲出量を変更す る。
まとめ • batch layer だけでなく speed layer も導入、活用することで ‣ 掲出確認が迅速に行えるようになった
‣ 在庫の無駄を減らすことが出来る ‣ 2 layer で集計することで、異常検知可 能
ຖͷྉཧΛָ͠Έʹ 5IBOLZPV