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
高スループット・低レイテンシを実現する技術
Search
tokku5552
September 01, 2023
Technology
3
14k
高スループット・低レイテンシを実現する技術
https://cyberagent.connpass.com/event/291186/
tokku5552
September 01, 2023
Tweet
Share
More Decks by tokku5552
See All by tokku5552
他責思考で考える、EMとICの本音
tokku5552
1
130
Google CloudとAWSのコンテナ実行環境比較
tokku5552
0
200
AWS CDKのススメ
tokku5552
1
500
Messaging APIのメッセージオブジェクトを検証できるChrome拡張機能を作った話
tokku5552
1
130
FlutterにLINEログインを仕込んで通知メッセージを送る
tokku5552
2
970
AWS CDK × Reactでliffをつくる
tokku5552
1
540
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
tokku5552
1
100
ネットワーク基礎 - WEBページが表示されるまで
tokku5552
1
270
インフラエンジニアのお仕事(オンプレ)
tokku5552
0
150
Other Decks in Technology
See All in Technology
【初心者向け】ローカルLLMの色々な動かし方まとめ
aratako
7
3k
Language Update: Java
skrb
2
240
Grafana Meetup Japan Vol. 6
kaedemalu
1
200
AIエージェントの活用に重要な「MCP (Model Context Protocol)」とは何か
masayamoriofficial
0
280
AI時代に非連続な成長を実現するエンジニアリング戦略
sansantech
PRO
3
1k
エニグモ_会社紹介資料(エンジニア職種向け).pdf
enigmo_hr
0
2.2k
Skrub: machine-learning with dataframes
gaelvaroquaux
0
110
AWSで推進するデータマネジメント
kawanago
0
930
開発者を支える Internal Developer Portal のイマとコレカラ / To-day and To-morrow of Internal Developer Portals: Supporting Developers
aoto
PRO
1
110
おやつは300円まで!の最適化を模索してみた
techtekt
PRO
0
270
Flutterでキャッチしないエラーはどこに行く
taiju59
0
210
AI エージェントとはそもそも何か? - 技術背景から Amazon Bedrock AgentCore での実装まで- / AI Agent Unicorn Day 2025
hariby
3
760
Featured
See All Featured
Java REST API Framework Comparison - PWX 2021
mraible
33
8.8k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
11
1.1k
Scaling GitHub
holman
463
140k
What's in a price? How to price your products and services
michaelherold
246
12k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.8k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Optimising Largest Contentful Paint
csswizardry
37
3.4k
A designer walks into a library…
pauljervisheath
207
24k
RailsConf 2023
tenderlove
30
1.2k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Typedesign – Prime Four
hannesfritz
42
2.8k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
126
53k
Transcript
高スループット・低レイテンシを実現する技術 株式会社CyberAgent AI事業本部 徳田真之介
自己紹介 • 徳田真之介(@tokkuu) • 略歴 ◦ 2023/05 〜
▪ CyberAgent AI事業本部 ◦ 2021/10 - 2023/04 ▪ ミロゴス株式会社(Web系) ◦ 2017/04 - 2021/09 ▪ 日鉄日立システムエンジニアリング(SIer) • 好きな技術 ◦ TypeScript/Next.js/AWS/Golang/Terraform/Flutter • 趣味 ◦ バンド(ex. ggrks) ◦ 娘 ◦ ディズニーランド
RTBの仕組みをおさらい
AD AD AD SSP SSP SSP 秒間 数十万リクエスト に対して 50ms
でレスポンス ・ ・ ・ ・ ・ ・ DSP ユーザー 広告主 キャンペーン1 キャンペーン2 キャンペーン3 ・ ・ ・ 再掲
AD AD AD SSP SSP SSP 秒間 数十万リクエスト に対して 50ms
でレスポンス ・ ・ ・ ・ ・ ・ DSP ユーザー 広告主 キャンペーン1 キャンペーン2 キャンペーン3 ・ ・ ・ 再掲 • どのキャンペーンの広告をいくらで 出すのか? • 入札したあと、勝ったのか?それを 見たのか?クリックしたのか?
AD AD AD SSP SSP SSP 秒間 数十万リクエスト に対して 50ms
でレスポンス ・ ・ ・ ・ ・ ・ DSP ユーザー 広告主 キャンペーン1 キャンペーン2 キャンペーン3 ・ ・ ・ 再掲 ・bid SSPからのリクエストを受けて 入札額を返す ・imp 広告が表示されたら リクエストが来る ・その他 計測用
AD AD AD SSP SSP SSP 秒間 数十万リクエスト に対して 50ms
でレスポンス ・ ・ ・ ・ ・ ・ DSP ユーザー 広告主 キャンペーン1 キャンペーン2 キャンペーン3 ・ ・ ・ 再掲 ・bid SSPからのリクエストを受けて 入札額を返す ・imp 広告が表示されたら リクエストが来る ・その他 計測用 ・ユーザー情報から候補となる広告を選定 ・ユーザーの属性に合わせて入札額を決定 ・入札額と広告内容をSSPへ応答
AD AD AD SSP SSP SSP 秒間 数十万リクエスト に対して 50ms
でレスポンス ・ ・ ・ ・ ・ ・ DSP ユーザー 広告主 キャンペーン1 キャンペーン2 キャンペーン3 ・ ・ ・ 再掲 ・bid SSPからのリクエストを受けて 入札額を返す ・imp 広告が表示されたら リクエストが来る ・その他 計測用 ・どのキャンペーンの広告が見られたかを計測 ・消化額++ ・予算に到達していたらストップ
アーキテクチャ概観
None
• SSPからbidサーバーへ入 札リクエストが飛んでくる • 広告のマスターデータや最 適化パラメータはAuroraや DynamoDBに格納されてお り、これを元に入札額を決定 し、広告データをレスポンス
• 最適化パラメータはパー トナーのユーザー情報DB からS3を経てCA側の Snowflakeで計算し、 DynamoDBに格納
• SSPからbidサーバーへ入 札リクエストが飛んでくる • 広告のマスターデータや最 適化パラメータはAuroraや DynamoDBに格納されてお り、これを元に入札額を決定 し、広告データをレスポンス
• 最適化パラメータはパー トナーのユーザー情報DB からS3を経てCA側の Snowflakeで計算し、 DynamoDBに格納
• SSPからbidサーバーへ入 札リクエストが飛んでくる • 広告のマスターデータや最 適化パラメータはAuroraや DynamoDBに格納されてお り、これを元に入札額を決定 し、広告データをレスポンス
• 最適化パラメータはパー トナーのユーザー情報DB からS3を経てCA側の Snowflakeで計算し、 DynamoDBに格納
bid処理を高速化する
None
bid処理の基本構成と高速化 • 使用言語はGolang • 標準出力をfluentdでKinesis Data Streams->Kinesis Data Firehose->S3へと流している •
Auroraにあるマスタデータはインメ モリキャッシュへ • DynamoDBへの情報はMemcached などを挟んで取得
bid処理の基本構成と高速化 • 使用言語はGolang • 標準出力をfluentdでKinesis Data Streams->Kinesis Data Firehose->S3へと流している •
Auroraにあるマスタデータはインメ モリキャッシュへ • DynamoDBへの情報はMemcached などを挟んで取得 多段キャッシュでread処理を高速化 出力は標準出力のみ
imp処理の高速化 • impではDynamoDBへの書き込みが発生する • DynamoDBにそのまま書き込んでもある程度耐えられるはずだが、bidレスポンスほどの即時性 は必要ないため、SQSを挟んで非同期化
最適化ロジック周り
AD AD AD SSP SSP SSP 秒間 数十万リクエスト に対して 50ms
でレスポンス ・ ・ ・ ・ ・ ・ DSP ユーザー 広告主 キャンペーン1 キャンペーン2 キャンペーン3 ・ ・ ・ 再掲 • どのキャンペーンの広告をいくらで 出すのか? • 入札したあと、勝ったのか?それを 見たのか?クリックしたのか?
• SSPからbidサーバーへ入 札リクエストが飛んでくる • 広告のマスターデータや最 適化パラメータはAuroraや DynamoDBに格納されてお り、これを元に入札額を決定 し、広告データをレスポンス
• 最適化パラメータはパー トナーのユーザー情報DB からS3を経てCA側の Snowflakeで計算し、 DynamoDBに格納
最適化ロジック • どの広告をいくらで出すのかを決めるため に、配信実績をもとに定期的にパラメーターを 更新している • 配信実績はS3のログからSFnのworkflowでリ フレッシュをかけてSnowflakeに保存 •
DynamoDBへテーブルを分けてユーザー毎、 広告毎に一意にパラメーターが取得できる
まとめ • read処理はインメモリ→ memcached/redis → Aurora/DynamoDBと多段にキャッシュすることで 高速化 • writeが必要な処理はSQSを使って非同期化
• 複雑なロジックが必要な部分のうち、予め計算しておけるところは バッチ処理で計算