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
30msの広告配信を支える レイテンシ短縮の技術
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
やーびー
March 25, 2026
140
0
Share
30msの広告配信を支える レイテンシ短縮の技術
DMM.go #12 登壇資料
やーびー
March 25, 2026
More Decks by やーびー
See All by やーびー
slogパッケージの深掘り
integral0515
0
770
range over funcで始めるグラフアルゴリズム
integral0515
0
350
Featured
See All Featured
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.6k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.9k
Navigating Team Friction
lara
192
16k
Docker and Python
trallard
47
3.8k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
490
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
Visualization
eitanlees
150
17k
Evolving SEO for Evolving Search Engines
ryanjones
0
180
Become a Pro
speakerdeck
PRO
31
5.9k
A Tale of Four Properties
chriscoyier
163
24k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
150
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
210
Transcript
30msの広告配信を支える レイテンシ短縮の技術 DMM.go #12 屋比久怜央
自己紹介 屋比久怜央 やびくれお 名前 開発統括本部 マーケティングテクノロジー部 所属 ビリヤード・リアル脱出ゲーム 趣味 2
3 こんな開発をしています
4 bytedance/sonic
5 bytedance/sonicパッケージ 広告配信に、bytedance/sonic パッケージを利用しています 本日の主役 出典: https://pkg.go.dev/github.com/bytedance/sonic
6 bytedance/sonic とは 高速なJSONシリアライザ つまり、高速に動作するencoding/json bytedance/sonicパッケージの特徴 { “key”: “value”, “name”:
“yabiku” } type Hoge struct { Key string Name string } JSON 構造体
7 bytedance/sonic の使い方 sonic.Marshal()によるエンコード sonic.Unmarshal()によるデコード 基本的には encoding/jsonと全く同じ { “key”: “value”,
“name”: “yabiku” } type Hoge struct { Key string Name string } JSON 構造体 sonic.Marshal() sonic.Unmarshal()
8 bytedance/sonicの速さを示すベンチマーク 出典: https://github.com/bytedance/sonic 公式が提供するベンチマーク
9 bytedance/sonic 速さの理由 汎用性故に抱えるオーバーヘッドがボトルネックになる encoding/jsonのパフォーマンス上の弱点 構造体に特化したアセンブリを生成して高速化する 解決策としての JITコンパイル
10 encoding/jsonのパフォーマンス上の弱点 パッケージとしては、任意の構造体に対応する必要がある 変換するまで構造体のフィールドがわからない reflectパッケージで構造体を読み取る時に メモリアロケーションとGCが頻発 動的な型解釈によるオーバーヘッド
11 encoding/jsonのパフォーマンス上の弱点 reflectが利用されている様子 出典: https://cs.opensource.google/go/go/+/refs/tags/go1.25.6:src/encoding/json/encode.go;l=439-466
12 解決策としてのJITコンパイル
13 JITコンパイルとは 事前に機械語を生成する通常のコンパイルに対し、実 行時に機械語を生成する形式のこと Just-In-Timeコンパイル 通常のコンパイル JITコンパイル ソースコード 機械語 実行中のソース
機械語 実行 環境 実行 環境
14 JITコンパイルの恩恵 実行環境に合わせて機械語が生成される 単一のソースコードを、異なる環境で使い回せる ソースコードがプラットフォームに依存しない 実行時のプロファイルや入力値に応じた最適化を行うことができる 実行環境を加味した最適化
15 解決策としての JITコンパイル 変換対象の構造体に特化したJITコンパイルを行う JITコンパイル JSONパーサ・シリアライザをJITコンパイルして高速化
16 bytedance/sonic はなぜ高速なのか - まとめ 構造体やJSONの構造に応じたJITコンパイルを行う encoding/jsonのパフォーマンス上の弱点を克服 異なるサイズのデータの混在に適応するためのSIMD 自作のasm2asmツールによる高度な最適化 ASTパーサーにおけるLazy
Load そのほかにも ... 出典: https://github.com/bytedance/sonic/blob/main/docs/INTRODUCTION.md
17 bytedance/sonicの導入事例
18 広告配信基盤での bytedance/sonic利用 DMM.com社内で利用される内製の広告配信基盤 社員が登録した広告バナーを、DMMが管理するWebサイトに配信する 広告配信基盤とは DMMが管理するWebサイトに対して、低レイテンシでの広告 配信を実現する bytedance/sonicパッケージが果たす役割
19 広告配信基盤のアーキテクチャ 利用者 オンメモリキャッシュ Cloud Run 配信サーバ Memorystore キャッシュ Cloud
SQL 広告データ
20 配信までの大雑把な流れ 利用者 オンメモリキャッシュ Cloud Run 配信サーバ Memorystore キャッシュ Cloud
SQL 広告データ 社員による 広告入稿
21 配信までの大雑把な流れ 利用者 オンメモリキャッシュ Cloud Run 配信サーバ Memorystore キャッシュ Cloud
SQL 広告データ 社員による 広告入稿 広告データを 配信サーバに保存
22 配信までの大雑把な流れ 利用者 オンメモリキャッシュ Cloud Run 配信サーバ Memorystore キャッシュ Cloud
SQL 広告データ 社員による 広告入稿 広告データを 配信サーバに保存 広告を配信
23 もっと詳しく 利用者 オンメモリキャッシュ Cloud Run 配信サーバ Memorystore キャッシュ Cloud
SQL 広告データ
24 もっと詳しく 利用者 オンメモリキャッシュ Cloud Run 配信サーバ Memorystore キャッシュ Cloud
SQL 広告データ 社員による 広告入稿
25 もっと詳しく 利用者 オンメモリキャッシュ Cloud Run 配信サーバ Memorystore キャッシュ Cloud
SQL 広告データ 社員による 広告入稿 sonicによるJSON へのエンコード
26 もっと詳しく 利用者 オンメモリキャッシュ Cloud Run 配信サーバ Memorystore キャッシュ Cloud
SQL 広告データ 社員による 広告入稿 sonicによるJSON へのエンコード 文字列化された 配信の取り込み
27 もっと詳しく 利用者 オンメモリキャッシュ Cloud Run 配信サーバ Memorystore キャッシュ Cloud
SQL 広告データ 社員による 広告入稿 sonicによるJSON へのエンコード 文字列化された 配信の取り込み sonicによる デコード
28 もっと詳しく 利用者 オンメモリキャッシュ Cloud Run 配信サーバ Memorystore キャッシュ Cloud
SQL 広告データ 社員による 広告入稿 sonicによるJSON へのエンコード 文字列化された 配信の取り込み sonicによる デコード リクエストを受けて 動くのはここだけ
29 広告配信基盤の速さの秘訣 Cloud SQLに記録された広告情報を、Memorystoreを介して Cloud Runのメモリに保存している 事前に広告情報をメモリにロードしておく 配信サーバが動作するCloud Runの外に広告情報を取りに行かずに 高速に広告情報を返却する
リクエストを受けたら、メモリの情報を返却
30 広告配信基盤の速さの秘訣 利用者 オンメモリキャッシュ Cloud Run 配信サーバ Memorystore キャッシュ Cloud
SQL 広告データ
31 広告配信基盤の速さの秘訣 利用者 オンメモリキャッシュ Cloud Run 配信サーバ メモリ上のJSON Goの構造体 sonicによるデコード
32 速いのはわかったけど ... 配信情報が全てサーバのメモリに積まれている メモリに配信情報載せて大丈夫なの? コンテナ起動時にメモリが空だったりとか コンテナ終了時にデータが消えたりとか コンテナはスケールするけど大丈夫なの?
33 メモリに配信情報を載せて大丈夫なの? リクエストを受けてメモリから配信を返すということは 全ての配信情報がメモリに積まれており、その中から選んでいる 大量の配信情報によって、メモリが枯渇しないのか? 配信情報をJSON化する時に、文字列を圧縮などしない bytedance/sonicが提供するのは高速なシリアライズのみ
34 メモリに配信情報を載せて大丈夫なの? 出典: https://dmm-corp.com/figures/
35 メモリに配信情報を載せて大丈夫なの? DMM会員数やリクエスト量はまた別の話 社内用の広告配信基盤では、広告量が膨大にならない メモリの量は配信情報の量
36 速いのはわかったけど ... 配信情報が全てサーバのメモリに積まれている メモリに配信情報載せて大丈夫なの? コンテナ起動時にメモリが空だったりとか コンテナ終了時にデータが消えたりとか コンテナはスケールするけど大丈夫なの?
37 コンテナはスケールするけど大丈夫なの? プロセス起動時にキャッシュサーバを参照すれば良い コンテナ起動時にメモリが空にならないの? オンメモリキャッシュ Cloud Run 配信サーバ Memorystore キャッシュ
38 コンテナがスケールしても大丈夫 あくまでキャッシュサーバから取得した情報なので問題ない コンテナ終了時にメモリは揮発するけどいいの? オンメモリキャッシュ Cloud Run 配信サーバ Memorystore キャッシュ
39 速いのはわかったけど ... 配信情報が全てサーバのメモリに積まれている メモリに配信情報載せて大丈夫なの? コンテナ起動時にメモリが空だったりとか コンテナ終了時にデータが消えたりとか コンテナはスケールするけど大丈夫なの?
40 まとめ
41 ご清聴ありがとうございました • bytedance/sonicは高速なJSONシリアライザ • JITコンパイルにより、reflectのオーバーヘッドを削減 • DMMの広告配信基盤は、レスポンスの高速化のために3層のデー タを保持するアーキテクチャ •
オンメモリキャッシュのシリアライズにsonicを利用し、高速な広告配 信を実現 まとめ