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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
tokku5552
September 01, 2023
Technology
16k
3
Share
高スループット・低レイテンシを実現する技術
https://cyberagent.connpass.com/event/291186/
tokku5552
September 01, 2023
More Decks by tokku5552
See All by tokku5552
他責思考で考える、EMとICの本音
tokku5552
1
170
Google CloudとAWSのコンテナ実行環境比較
tokku5552
0
240
AWS CDKのススメ
tokku5552
1
540
Messaging APIのメッセージオブジェクトを検証できるChrome拡張機能を作った話
tokku5552
1
140
FlutterにLINEログインを仕込んで通知メッセージを送る
tokku5552
2
1k
AWS CDK × Reactでliffをつくる
tokku5552
1
570
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
tokku5552
1
120
ネットワーク基礎 - WEBページが表示されるまで
tokku5552
1
310
インフラエンジニアのお仕事(オンプレ)
tokku5552
0
160
Other Decks in Technology
See All in Technology
最大のアウトプット術は問題を作ること
ryoaccount
0
260
FlutterでPiP再生を実装した話
s9a17
0
240
AWSで2番目にリリースされたサービスについてお話しします(諸説あります)
yama3133
0
110
GitHub Advanced Security × Defender for Cloudで開発とSecOpsのサイロを超える: コードとクラウドをつなぐ、開発プラットフォームのセキュリティ
yuriemori
1
120
非同期・イベント駆動処理の分散トレーシングの繋げ方
ichikawaken
1
250
自分をひらくと次のチャレンジの敷居が下がる
sudoakiy
5
1.6k
Blue/Green Deployment を用いた PostgreSQL のメジャーバージョンアップ
kkato1
1
220
20260326_AIDD事例紹介_ULSC.pdf
findy_eventslides
0
340
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
11k
【AWS】CloudTrail LakeとCloudWatch Logs Insightsの使い分け方針
tsurunosd
0
130
Embeddings : Symfony AI en pratique
lyrixx
0
440
制約を設計する - 非決定性との境界線 / Designing constraints
soudai
PRO
4
790
Featured
See All Featured
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
260
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
310
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.7k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
200
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
160
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.6k
Odyssey Design
rkendrick25
PRO
2
560
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
What does AI have to do with Human Rights?
axbom
PRO
1
2.1k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
500
The untapped power of vector embeddings
frankvandijk
2
1.7k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.7k
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を使って非同期化
• 複雑なロジックが必要な部分のうち、予め計算しておけるところは バッチ処理で計算