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
10k
高スループット・低レイテンシを実現する技術
https://cyberagent.connpass.com/event/291186/
tokku5552
September 01, 2023
Tweet
Share
More Decks by tokku5552
See All by tokku5552
Google CloudとAWSのコンテナ実行環境比較
tokku5552
0
170
AWS CDKのススメ
tokku5552
1
470
Messaging APIのメッセージオブジェクトを検証できるChrome拡張機能を作った話
tokku5552
1
120
FlutterにLINEログインを仕込んで通知メッセージを送る
tokku5552
2
910
AWS CDK × Reactでliffをつくる
tokku5552
1
510
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
tokku5552
1
84
ネットワーク基礎 - WEBページが表示されるまで
tokku5552
1
230
インフラエンジニアのお仕事(オンプレ)
tokku5552
0
130
hooks riverpod + state notifier + freezed でのドメイン駆動設計
tokku5552
0
360
Other Decks in Technology
See All in Technology
PHPカンファレンス名古屋-テックリードの経験から学んだ設計の教訓
hayatokudou
0
220
The Future of SEO: The Impact of AI on Search
badams
0
190
管理者しか知らないOutlookの裏側のAIを覗く#AzureTravelers
hirotomotaguchi
2
350
TAMとre:Capセキュリティ編 〜拡張脅威検出デモを添えて〜
fujiihda
2
240
AndroidXR 開発ツールごとの できることできないこと
donabe3
0
130
Oracle Cloud Infrastructure:2025年2月度サービス・アップデート
oracle4engineer
PRO
1
200
エンジニアのためのドキュメント力基礎講座〜構造化思考から始めよう〜(2025/02/15jbug広島#15発表資料)
yasuoyasuo
16
6.6k
Platform Engineeringは自由のめまい
nwiizo
4
2.1k
自動テストの世界に、この5年間で起きたこと
autifyhq
10
8.4k
明日からできる!技術的負債の返済を加速するための実践ガイド~『ホットペッパービューティー』の事例をもとに~
recruitengineers
PRO
3
390
N=1から解き明かすAWS ソリューションアーキテクトの魅力
kiiwami
0
130
目の前の仕事と向き合うことで成長できる - 仕事とスキルを広げる / Every little bit counts
soudai
24
7k
Featured
See All Featured
Designing Experiences People Love
moore
140
23k
Being A Developer After 40
akosma
89
590k
Java REST API Framework Comparison - PWX 2021
mraible
28
8.4k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
StorybookのUI Testing Handbookを読んだ
zakiyama
28
5.5k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
129
19k
Optimizing for Happiness
mojombo
376
70k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Building Applications with DynamoDB
mza
93
6.2k
Statistics for Hackers
jakevdp
797
220k
Site-Speed That Sticks
csswizardry
4
380
The Invisible Side of Design
smashingmag
299
50k
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を使って非同期化
• 複雑なロジックが必要な部分のうち、予め計算しておけるところは バッチ処理で計算