Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
大規模な広告配信の仕組み pixiv 広告のシステム例 pixiv Inc. saki 2022.03.27
Slide 2
Slide 2 text
2 Profile ● saki (@yensaki) ● 経歴 ○ - 2017: カカクコム(食べログ) ○ 2017 -: ピクシブ ■ 2017 - 2019: pixivFACTORY ■ 2019 - : 広告 ● 好きな技術 ○ Ruby on Rails ○ Kubernetes saki ピクシブ株式会社 アドプラットフォーム事業部
Slide 3
Slide 3 text
3 発表の流れ 1. 広告の概要 2. インフラ構成 3. アプリケーション構成 4. 重要ポイント
Slide 4
Slide 4 text
4 1.広告の概要
Slide 5
Slide 5 text
5 ピクシブの広告規模 リクエスト数 ● 月間500億件…超 ○ 年々増えてる 広告の リクエスト種類とは ● 広告取得 ● rendering通知 ● クリック ● コンバージョンなど https://www.wantedly.com/companies/pixiv/post_articles/283162
Slide 6
Slide 6 text
広告配信のフロー 6 広告配信サーバーから JavaScriptを取得 &実行して広告を描画
Slide 7
Slide 7 text
広告配信のフロー: 広告リクエスト 7
Slide 8
Slide 8 text
広告配信のフロー: rendering完了通知 8 impressionとして受領 (本当は画面内に表示されたことも計測するなどもう少し考えることはある )
Slide 9
Slide 9 text
広告配信のフロー: クリック遷移 9
Slide 10
Slide 10 text
10 データ登録やレポートなどのビジネスを支える管理画面 裏側には管理画面
Slide 11
Slide 11 text
11 これから紹介するもの 移行途中のものもあるので、実際の構成の中から クラウドを中心とした構成を紹介します
Slide 12
Slide 12 text
12 2. インフラ構成
Slide 13
Slide 13 text
13 アーキテクチャ
Slide 14
Slide 14 text
14 GKE(Google Kubernetes Engine) 広告配信サーバー・管理画面はGKE上
Slide 15
Slide 15 text
15 GKE(Google Kubernetes Engine) 「サーバーレス化できたほうが楽では?」 → GKE(GCE)のEgressはCloud Runより省費用 広告配信の特徴によるもの ● リクエスト数が多い ● リクエストあたりのサイズが小さい
Slide 16
Slide 16 text
16 pximg ● pixivのイラスト配信に使われているもの ○ 画像変換と高速配信を両立できる ● なぜCDNではない? ○ 広告用画像の要件を満たしつつ 費用減が両立可能 ○ 管理コストもほぼ増えない https://www.sakura.ad.jp/services/imageflux/image/ 使ってみたい方はこちらをご検討ください
Slide 17
Slide 17 text
17 配信ログ集積 ● 配信サーバーからCloud Loggingに送信 ○ BigQueryにexport ● BigQuery上で加工してDBにレポート記録 ● BIツールでの分析にも活用 ● 蓄積データ ○ 1日100GB超
Slide 18
Slide 18 text
18 3.アプリケーション構成
Slide 19
Slide 19 text
19 広告配信サーバー ● Golang + echo ● Pod: ○ 70〜200(移行途中の分も含む) ● レイテンシ: ○ 〜20ms ● リクエスト処理: ○ 最大300万件/min
Slide 20
Slide 20 text
20 管理画面 ● Ruby on Rails ○ CRUDをベースにした管理画面 ○ 社内にはRailsサービスが多い ● Pod: 2件前後
Slide 21
Slide 21 text
21 バッチ ● Argo Workflow ● Rails rakeタスクがメイン ● DB, Redis, BigQueryに対してアクセス・更新
Slide 22
Slide 22 text
22 4. 重要ポイント
Slide 23
Slide 23 text
23 データ反映 ● 配信サーバーはDBを参照しない ○ DBクエリでは遅くなるため ○ その分、反映時間は0秒ではない ■ バッチ実行間隔とキャッシュクリアに依存
Slide 24
Slide 24 text
24 シンプル化 ● 配信サーバーは責務に集中 ○ 高速な大量配信 ● そのために他の要素は完全分離 ○ 管理画面 ○ CTR予測 ○ ログ集計
Slide 25
Slide 25 text
25 まとめ
Slide 26
Slide 26 text
26 ● 各サービスに責務を分けてシンプル化 ● 分ける際は遅延反映や事前処理を検討 まとめ ※このシステム構成は私だけでなく、昔のチーム &今のチームで考えられたものです