Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Cacheは銀の弾丸か?
Search
katayan
January 19, 2026
Technology
150
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Cacheは銀の弾丸か?
katayan
January 19, 2026
More Decks by katayan
See All by katayan
Agent の「自由」と「安全」〜未来に向けて今できること〜
katayan
0
450
CyberAgentの生成AI戦略 〜変わるものと変わらないもの〜
katayan
0
680
Bigtable論文から学ぶシンプルなデザイン
katayan
0
56
Other Decks in Technology
See All in Technology
USB PDを使ってスマホを労わりたい
raspython3
0
180
スキマバイトという雇用形態は存在しないので、雇用期間1日のアルバイト契約を事業者とワーカーが結ぶ手続きを支えるのがタイミーなんです
akitoshiga
0
200
Temporal 最高!でも改めて「日付」について調べたら人類の負債すぎる件
riyaamemiya
0
150
Getting Started with Google Antigravity
glaforge
0
310
How to Design Configuration for Rails Applications
willnet
1
790
AI駆動開発の時代になったのでトヨタ生産方式から見直す
terurou
7
6k
Active Record Connection Adaptersにおける長年の課題に再び取り組む
yahonda
0
150
Rust で関数型ドメインモデリング
takonda
0
140
実践! SRE × AI - ABEMA における AIOps -
tetsuya28
8
3.1k
自作バイナリを動かす「入口」8選
puhitaku
2
1.3k
フロントエンドカンファレンス関西2026 - 速すぎるUIに、待ち時間を
teamlab
PRO
0
130
アウトプット初心者、半年間のふりかえり
4o1sobblue
0
430
Featured
See All Featured
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
2
330
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
20k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.8k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
260
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
A Modern Web Designer's Workflow
chriscoyier
699
190k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.7k
Exploring anti-patterns in Rails
aemeredith
4
540
Crafting Experiences
bethany
1
380
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
320
A designer walks into a library…
pauljervisheath
211
25k
Transcript
Cacheは銀の弾丸か? 〇〇で雪崩を防ぐ 1day技術ワークショップ ~パフォーマンスチューニングはここから始めよう~ in 関西
かたやん 株式会社AJA DSP Division • Golang / Google Cloud /
Kubernetes • 大阪出身 • 24新卒 バックエンドエンジニア • 動画広告配信システムの開発してます daisuke0x17 wwktyn Profile 2
今日のゴール 「Cache入れたから大丈夫」で終わらないエンジニアになる 学ぶこと • Cacheだけでは防げない問題がある • 現場で実際に行っている対策を紹介 • 銀の弾丸は存在しない 3
Cacheの基本をおさらい Cacheの役割 • DBへのアクセスを減らす • レスポンスを高速化する 一般的なフロー これで完璧...?🤔 4
問題:Cacheが切れた瞬間、何が起きる? シナリオ • とあるCacheが失効 • その瞬間、大量のリクエストが同時に到達 結果 • すべてのリクエストが「Cache Miss」
• そしてDBへ突撃 • DBのCPUスパイク、レイテンシ悪化 • 最悪の場合、システム停止 😱 5
君の名前は... Cache Stampede 6
君の名前は... Cache Stampede 「Thundering Herd」とも呼ばれたりします。 なぜ起きるのか? • 全てのリクエストが「Cacheが無い」と同時に判断 • 全員が同じデータをDBに取りに行ってしまう
→ Cacheするだけでは、スパイクは防げない 7
解決策:Singleflight(リクエストの集約) アイデア • 同じ瞬間に、同じデータを欲しがっている人が複数いるなら 代表者1人だけが取りに行く • 結果は待機している全員で共有 例えば 1,000 Requests
→ 1 DB Call 8
実装はシンプル • golang.org/x/sync/singleflight を利用 • 数行の改善でDBへの負荷を下げることが可能 9
実装はシンプル 実際にやってみよう:https://github.com/daisuke0x17/singleflight-demo 10
実験:Singleflightの効果を体感しよう シナリオ • 人気番組中の広告タイミングで同時に1,000人が広告リクエスト • その瞬間Cacheが消えた! 11 DB 広告リクエスト Cache
Misses 100ms以内に レスポンスしたい!
実験:Singleflightの効果を体感しよう パターン① Cacheのみ(GET /api/without-singleflight) • Cache Miss時に全リクエストがDBに殺到(Cache Stampede) • DB負荷がスパイク
パターン② Singleflight導入(GET /api/with-singleflight) • Cache Miss時もDBアクセスは代表者のみ • DB負荷が安定 12
実験:Singleflightの効果を体感しよう ※ デモではDBアクセスを200msのスリープでシミュレート 13
実験:Singleflightの効果を体感しよう 効果を証明するために、メトリクスを可視化することが重要 14
結果:DBへのアクセス数 Singleflight無 1K Calls 15
結果:DBへのアクセス数 Singleflight無 Singleflight有 1K Calls 1 Call 16
Singleflightは銀の弾丸か? Complexity(複雑さ) • 状態共有が発生するため、デバッグ難易度が上がる Panic Propagation(エラー伝播) • もし代表者の処理がPanicを起こすと、待機している全リクエストが 巻き込まれる可能性 Stall
/ Timeout(待機とタイムアウト) • DBコールがハングアップすると、待機している全リクエストも 道連れでタイムアウト 17
さらに防御を固める ① Negative Caching • 存在しないデータへの無駄なDB問い合わせを防ぐ • 「データが無い」という結果もCache ② Pre-Caching
/ Warm-up • キャッシュが切れる前に、裏側で先に更新しておく • ユーザーリクエストがCache Missになる確率を減らす 18
さらに防御を固める ③ SWR (Stale-While-Revalidate) • 古いキャッシュ (stale cache) を即座に返し、裏で非同期更新 •
タイムアウトしてもstaleデータを返せる ④ Timeout + Fallback • タイムアウト時は stale cache / デフォルト値 で応答 19
まとめ:銀の弾丸は存在しない 01. 問題を知る Cacheだけでは「Cache Stampede」を 防げない 02. 集約で守る Singleflightで N
Requests → 1 DB Call を実現 03. エッジケースをケアする Negative Cache,Pre-Cache SWR,Timeout + Fallback の導入 04. 可視化し続ける メトリクスで効果と健全性を 常に監視する 20
Appendix:Singleflightの内部実装(簡略) 1. Lock取得 → mapに同じkeyがあるか確認 2-A. keyが存在する(実行中) → Unlock →
wg.Wait() で待機 → 結果を共有 2-B. keyが存在しない(新規) → callを作成してmapに登録 → Unlock → 実際の処理を実行 → 結果をcallに保存 → wg.Done() → mapからkeyを削除 21