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
16k
高スループット・低レイテンシを実現する技術
https://cyberagent.connpass.com/event/291186/
tokku5552
September 01, 2023
Tweet
Share
More Decks by tokku5552
See All by tokku5552
他責思考で考える、EMとICの本音
tokku5552
1
160
Google CloudとAWSのコンテナ実行環境比較
tokku5552
0
230
AWS CDKのススメ
tokku5552
1
530
Messaging APIのメッセージオブジェクトを検証できるChrome拡張機能を作った話
tokku5552
1
140
FlutterにLINEログインを仕込んで通知メッセージを送る
tokku5552
2
1k
AWS CDK × Reactでliffをつくる
tokku5552
1
560
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
tokku5552
1
120
ネットワーク基礎 - WEBページが表示されるまで
tokku5552
1
290
インフラエンジニアのお仕事(オンプレ)
tokku5552
0
160
Other Decks in Technology
See All in Technology
Bill One急成長の舞台裏 開発組織が直面した失敗と教訓
sansantech
PRO
1
190
SREのプラクティスを用いた3領域同時 マネジメントへの挑戦 〜SRE・情シス・セキュリティを統合した チーム運営術〜
coconala_engineer
2
560
15 years with Rails and DDD (AI Edition)
andrzejkrzywda
0
160
GitLab Duo Agent Platform × AGENTS.md で実現するSpec-Driven Development / GitLab Duo Agent Platform × AGENTS.md
n11sh1
0
120
サイボウズ 開発本部採用ピッチ / Cybozu Engineer Recruit
cybozuinsideout
PRO
10
73k
モダンUIでフルサーバーレスなAIエージェントをAmplifyとCDKでサクッとデプロイしよう
minorun365
2
110
会社紹介資料 / Sansan Company Profile
sansan33
PRO
15
400k
Amazon Bedrock AgentCore 認証・認可入門
hironobuiga
2
500
Context Engineeringが企業で不可欠になる理由
hirosatogamo
PRO
2
230
2026年、サーバーレスの現在地 -「制約と戦う技術」から「当たり前の実行基盤」へ- /serverless2026
slsops
2
200
変化するコーディングエージェントとの現実的な付き合い方 〜Cursor安定択説と、ツールに依存しない「資産」〜
empitsu
4
1.3k
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
5
1.5k
Featured
See All Featured
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
0
1.1k
It's Worth the Effort
3n
188
29k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
290
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
640
How STYLIGHT went responsive
nonsquared
100
6k
Raft: Consensus for Rubyists
vanstee
141
7.3k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
60
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.3k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
580
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.8k
Speed Design
sergeychernyshev
33
1.5k
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を使って非同期化
• 複雑なロジックが必要な部分のうち、予め計算しておけるところは バッチ処理で計算