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
AdTech on Azure - Cosmos DBを利用した配信システムの全て -
Search
Shinichi Morimoto
February 27, 2019
Technology
2
2.7k
AdTech on Azure - Cosmos DBを利用した配信システムの全て -
Shinichi Morimoto
February 27, 2019
Tweet
Share
More Decks by Shinichi Morimoto
See All by Shinichi Morimoto
Actor Model meets the Kubernetes - CNDT 2019
shnmorimoto
6
5.2k
Akka Cluster 超入門 - 2019 Fringe81 大新年勉強会
shnmorimoto
1
420
頑張らないKubernetes/ Real World Kubernetes
shnmorimoto
4
2.1k
circeから学ぶ GenericProgramming入門 - Scala関西Summit 2018
shnmorimoto
4
3.7k
Other Decks in Technology
See All in Technology
Building a cloud native business on open source
lizrice
0
180
可観測性は開発環境から、開発環境にもオブザーバビリティ導入のススメ
layerx
PRO
2
1k
re:Inventに行くまでにやっておきたいこと
nagisa53
0
420
AI時代におけるデータの重要性 ~データマネジメントの第一歩~
ryoichi_ota
0
720
マルチエージェントのチームビルディング_2025-10-25
shinoyamada
0
190
20251027_マルチエージェントとは
almondo_event
1
450
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
14
82k
ヘンリー会社紹介資料(エンジニア向け) / company deck for engineer
henryofficial
0
400
GraphRAG グラフDBを使ったLLM生成(自作漫画DBを用いた具体例を用いて)
seaturt1e
1
150
20251029_Cursor Meetup Tokyo #02_MK_「あなたのAI、私のシェル」 - プロンプトインジェクションによるエージェントのハイジャック
mk0721
PRO
0
330
オブザーバビリティと育てた ID管理・認証認可基盤の歩み / The Journey of an ID Management, Authentication, and Authorization Platform Nurtured with Observability
kaminashi
1
740
SOTA競争から人間を超える画像認識へ
shinya7y
0
560
Featured
See All Featured
Docker and Python
trallard
46
3.6k
Build The Right Thing And Hit Your Dates
maggiecrowley
38
2.9k
A designer walks into a library…
pauljervisheath
209
24k
The Language of Interfaces
destraynor
162
25k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
How to train your dragon (web standard)
notwaldorf
97
6.3k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.2k
Facilitating Awesome Meetings
lara
57
6.6k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
BBQ
matthewcrist
89
9.9k
Navigating Team Friction
lara
190
15k
jQuery: Nuts, Bolts and Bling
dougneiner
65
7.9k
Transcript
Ad Tech on Azure Cosmos DBを利用した配信システムの全て Fringe81 株式会社 技術開発本部 森本 真一
© 2019 Fringe81 Co.,Ltd.
広告配信について © 2019 Fringe81 Co.,Ltd. スマホ 広告配信システム ① 広告をリクエスト 〜な方が訪問されたので、広告をく
ださい。 ②広告情報を返却 その方に最適な広告はこれです。 ③広告を表示 -------------------- -------------------- -------------------- --------------------
広告配信で重要なこと © 2019 Fringe81 Co.,Ltd. • 広告配信システムは可用性が高くなくてはならない ◦ 広告はメディアにとって収益源の一つ ◦
もし広告配信システムが落ちた場合、落ちている間、収益は0 • 広告配信システムはレスポンスが早くなければならない ◦ レスポンスが返るまで、広告枠(広告が表示される場所)は真っ白なまま ◦ レスポンスが遅い場合、メディアのUXを著しく損なう
広告配信で重要なこと © 2019 Fringe81 Co.,Ltd. • 広告配信システムは可用性が高くなくてはならない ◦ 広告はメディアにとって収益源の一つ ◦
もし広告配信システムが落ちた場合、落ちている間、収益は0 • 広告配信システムはレスポンスが早くなければならない ◦ レスポンスが返るまで、広告枠(広告が表示される場所)は真っ白なまま ◦ レスポンスが遅い場合、メディアのUXを著しく損なう 落ちると、非常にまずい 高可用性 レスポンスが速くなくてはならない(数十ms) 低レイテンシ
広告配信について(再) © 2019 Fringe81 Co.,Ltd. スマホ 広告配信システム ① 広告をリクエスト 〜な方が訪問されたので、広告をく
ださい。 ②広告情報を返却 その方に最適な広告はこれです。 ③広告を表示 -------------------- -------------------- -------------------- -------------------- より詳細に見てみる
広告が配信されるまで © 2019 Fringe81 Co.,Ltd. スマホ 有効な広告セット取得 (一般的にはキャッシュで持つ) 有効な広告をフィルタリング -
広告枠にマッチするか - デバイスはマッチするか( iOS/Android) - etc... ユーザー属性情報でフィルタリング リアルタイムな情報でフィルタリング - 広告の予算 - Frequency(同じ広告を何回も表示しな い) 表示する広告を決定 ① 広告をリクエスト OS情報、広告識別子、どの広告枠 か、etc ②最適な広告情報を返却 広告主、メディア双方に最も利益を もたらす広告
広告が配信されるまで © 2019 Fringe81 Co.,Ltd. スマホ 有効な広告セット取得 (一般的にはキャッシュで持つ) 有効な広告をフィルタリング -
広告枠にマッチするか - デバイスはマッチするか( iOS/Android) - etc... ユーザー属性情報でフィルタリング リアルタイムな情報でフィルタリング - 広告の予算 - Frequency(同じ広告を何回も表示しな い) 表示する広告を決定 ① 広告をリクエスト OS情報、広告識別子、どの広告枠 か、etc ②最適な広告情報を返却 広告主、メディア双方に最も利益を もたらす広告 プログラム内部の処理で頑張れる部 分 速い処理 プログラム外 (別システム?DB?KVS?) への問い合わせが必要な部分 遅い処理
外部(他システム、DB、KVS)問い合わせ © 2019 Fringe81 Co.,Ltd. • ユーザー属性情報問い合わせ ◦ ユーザ毎に属性情報を管理している ◦
通常データ量が多い(ユーザ数 × 属性数)ため、プログラム内でキャッシュできな い • リアルタイムな情報の問い合わせ(広告予算の消化額等) ◦ 広告がクリックされる度に予算が消化される ◦ 常に最新の情報を参照しないと予算を超過して、広告が表示されることがある ◦ 複数のサーバで同一の情報を参照/更新しないといけない DB/KVSに問い合わせ/更新するために、時間がかかる処理になる
ここまでのまとめ © 2019 Fringe81 Co.,Ltd. • 広告配信システムには高可用性が必要 • 広告配信システムには低レイテンシが必要 ◦
広告配信の仕組み上、外部への問い合わせ/更新が必要 ◦ 外部への問い合わせ/更新は時間がかかる処理
ここまでのまとめ © 2019 Fringe81 Co.,Ltd. • 広告配信システムには高可用性が必要 • 広告配信システムには低レイテンシが必要 ◦
広告配信の仕組み上、外部への問い合わせ/更新が必要 ◦ 外部への問い合わせ/更新は時間がかかる処理 Azure の Managed Service を活用して 高可用性 × 低レイテンシ なシステムを構築する!!!
© 2019 Fringe81 Co.,Ltd. 広告配信システムアーキテクチャ 配信システム 属性情報システム Internal LB Public
LB Cosmos DB Azure Cache for Redis Azure Database for MySQL
© 2019 Fringe81 Co.,Ltd. 広告配信システムアーキテクチャ 配信システム 属性情報システム Internal LB Public
LB Cosmos DB Azure Cache for Redis Azure Database for MySQL
配信システムの可用性(Virtual Machine) © 2019 Fringe81 Co.,Ltd. • LoadBalancer配下に複数台を並べる構成 • 可用性セットを利用
◦ 全台がメンテナンスで一斉に停止するのを防ぐ ◦ 本当は可用性ゾーンを利用したいが、まだ東日本リージョンでGAにならず …。 • Azure Site Recoveryについては検討中 ◦ 数種類のDB/KVSを利用しているので、それらのレプリケーション方法の 検証中
© 2019 Fringe81 Co.,Ltd. 広告配信システムアーキテクチャ 配信システム 属性情報システム Internal LB Public
LB Cosmos DB Azure Cache for Redis Azure Database for MySQL 属性情報の問い合わせ
属性情報システム(属性情報の管理) © 2019 Fringe81 Co.,Ltd. • 配信サーバからの属性情報の問い合わせに対して低レイテンシ で返答するシステム • 属性情報は容量が大きいデータの為、プログラム内にキャッシュ
はしない • RocksDBを利用して、属性情報を格納し管理する ◦ Facebookが開発した組み込み用KVS ◦ 高速なストレージを効率よく利用できる
© 2019 Fringe81 Co.,Ltd. 広告配信システムアーキテクチャ 配信システム セグメントシステム Internal LB Public
LB Cosmos DB Azure Cache for Redis Azure Database for MySQL データの問い合わせ
データの問い合わせ © 2019 Fringe81 Co.,Ltd. • DB/KVSを特性に合わせて使い分ける • 非リアルタイムなデータ(頻繁に更新されないデータ) ◦
Azure Database for MySQL ▪ 管理画面から更新される広告情報マスター ▪ 定期的にロードし、プログラム上でキャッシュする • リアルタイムなデータ(広告配信システム上で更新、頻繁に更新されるデータ) ◦ Azure Cache for Redis ▪ データが消えてもビジネスには多大な影響を与えないデータ ◦ Cosmos DB ▪ 広告予算の消化額等 ▪ 永続化が必須となるデータ
データの問い合わせ © 2019 Fringe81 Co.,Ltd. • DB/KVSを特性に合わせて使い分ける • 非リアルタイムなデータ(頻繁に更新されないデータ) ◦
Azure Database for MySQL ▪ 管理画面から更新される広告情報マスター ▪ 定期的にロードし、プログラム上でキャッシュする • リアルタイムなデータ(広告配信システム上で更新、頻繁に更新されるデータ) ◦ Azure Cache for Redis ▪ データが消えてもビジネスには多大な影響を与えないデータ ◦ Cosmos DB ▪ 広告予算の消化額等 ▪ 永続化が必須となるデータ 問い合わせに低レイテンシーが要求されるデータを担う
データの問い合わせ © 2019 Fringe81 Co.,Ltd. • DB/KVSを特性に合わせて使い分ける • 非リアルタイムなデータ(頻繁に更新されないデータ) ◦
Azure Database for MySQL ▪ 管理画面から更新される広告情報マスター ▪ 定期的にロードし、プログラム上でキャッシュする • リアルタイムなデータ(広告配信システム上で更新、頻繁に更新されるデータ) ◦ Azure Cache for Redis ▪ データが消えてもビジネスには多大な影響を与えないデータ ◦ Cosmos DB ▪ 広告予算の消化額等 ▪ 永続化が必須となるデータ インメモリなので速い。データの永続化は必要なし。
データの問い合わせ © 2019 Fringe81 Co.,Ltd. • DB/KVSを特性に合わせて使い分ける • 非リアルタイムなデータ(頻繁に更新されないデータ) ◦
Azure Database for MySQL ▪ 管理画面から更新される広告情報マスター ▪ 定期的にロードし、プログラム上でキャッシュする • リアルタイムなデータ(広告配信システム上で更新、頻繁に更新されるデータ) ◦ Azure Cache for Redis ▪ データが消えてもビジネスには多大な影響を与えないデータ ◦ Cosmos DB ▪ 広告予算の消化額等 ▪ 永続化が必須となるデータ データの永続化が必要。それでも速い…?
Cosmos DB © 2019 Fringe81 Co.,Ltd. • AzureのManaged NoSQL Service
• グローバル規模にレプリケーション可能 • 要求ユニット(RU)単位でのコスト課金 • 高速なデータアクセス • 選べるAPI ◦ SQL, Cassandra, MongoDB, etc • 選べる整合性 ◦ 厳密、有界整合性、セッション、一貫性のあるプレフィックス、結果的
広告配信 - CosmosDBの利用 - © 2019 Fringe81 Co.,Ltd. 配信システム Cosmos
DB Cosmos DB レプリケーション 東日本リージョン 西日本リージョン Read/Write 数msでの レスポンス
Cosmos DBの利用 © 2019 Fringe81 Co.,Ltd. • 可用性を担保したい ◦ グローバル規模にレプリケーション可能な為、最悪Regionが落ちてもなん
とかなる ◦ 現在は西日本にのみレプリケート • 低レイテンシー ◦ Readであれば、数msでデータアクセス可能 ◦ アクセスするPartitionが異なる場合だと十分性能がスケールする • 運用が楽 ◦ Managed Serviceなので運用が楽 ◦ 自動スケールはしないが、スケーリング(RUを増やす)はAzure のコンソー ルからできる
Cosmos DBのここがちょっと…。 © 2019 Fringe81 Co.,Ltd. • Atomic Counterが欲しい…。 ◦
単純に加算のみをしたいユースケースが多い。 ◦ 現状ではread -> write or ストアドプロシージャを駆使するしかない • RUの自動スケール ◦ 現状、事前にRUを見積もらなければならない ◦ リクエストがスパイクした場合を考えて、現状かなりの余裕を持たせている ◦ 自動スケールがあると、運用も費用面でも嬉しい…。
まとめ © 2019 Fringe81 Co.,Ltd. • 広告配信システムでは 高可用性 と 低レイテンシー
が重要 • 高可用性を担保するための仕組みを利用する ◦ 可用性セット、Azure Site Recovery • 高可用性と低レイテンシーを実現する為に各種データストアを使 い分ける ◦ MySQL, Redis, CosmosDBの用途にあった組み合わせ • CosmosDBは是非利用しよう ◦ グローバル規模でのレプリケーション(マルチマスターも可) ◦ Partitionをきちんと設計すれば高速なデータアクセスも可