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
7k
2
Share
広告ログのリアルタイム集計とその活用 / Realtime Ad log aggregation and utilization
Cookpad Tech Kitchen #9
https://cookpad.connpass.com/event/60831/
wata
July 28, 2017
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
Swift Sequence の便利 API 再発見
treastrain
1
280
AIエージェントの支払い基盤 AgentCore Payments概要
kmiya84377
2
190
ワールドカフェ再び、そしてゴール・ルール・ロール・ツール / World Café Revisited, and the Goals-Rules-Roles-Tools
ks91
PRO
0
170
鹿野さんに聞く!CSSの最新トレンド Ver.2026
tonkotsuboy_com
6
3.1k
Gaussian Splattingの表現力を拡張する — 高周波再構成とインタラクションへのアプローチ —
gpuunite_official
0
180
毎日の作業を Claude Code 経由にしたら、 ノウハウがコードになった
kossykinto
1
1.4k
エンタープライズの厳格な制約を開発者に意識させない:クラウドネイティブ開発基盤設計/cloudnative-kaigi-golden-path
mhrtech
0
420
Agent の「自由」と「安全」〜未来に向けて今できること〜
katayan
0
360
セキュリティ対策、何からはじめる? CloudNative環境の脅威モデリングと リスク評価実践入門 #cloudnativekaigi
varu3
5
910
2026年春のAgentCoreアプデ 細かいやつ全部まとめ
minorun365
4
230
JTCでRedmine利用者2700人を実現した手法 第二部
nobuonakamura
0
110
アプリブロック機能のつくりかたと、AIとHTMLの不合理な相性の良さについて
kumamotone
1
260
Featured
See All Featured
Unsuck your backbone
ammeep
672
58k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
1.9k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
180
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.2k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.4k
Facilitating Awesome Meetings
lara
57
6.8k
Done Done
chrislema
186
16k
Designing Powerful Visuals for Engaging Learning
tmiket
1
360
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
270
The Limits of Empathy - UXLibs8
cassininazir
1
330
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
110
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
190
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