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
430
CyberAgentの生成AI戦略 〜変わるものと変わらないもの〜
katayan
0
670
Bigtable論文から学ぶシンプルなデザイン
katayan
0
56
Other Decks in Technology
See All in Technology
ソフトウェアDNAとクラウドエージェントのススメ
cloudace
0
110
山手線を徒歩で一周してわかった、 位置情報アプリは「足」が最強のデバッガー
hinakko
0
160
AIを活用するために決めた "やらないこと" - 価値に注目する / Not betting on AI
soudai
PRO
2
550
Reactの設計論
uhyo
24
14k
Railsのように考える: See through the Master
snoozer05
PRO
4
1k
HHKBエバンジェリストになる方法
941
0
110
映像変換サーバーなしで端末内でHLSを生成してライブ配信
hikarusato
0
120
あけおめLINE 傾向とその対策
nasa9084
0
120
おい、エージェントを使って終わらせろ
nwiizo
1
640
あるけみー式LTスライド作成術
alchemy1115
2
220
AgentCore Runtime上にAgentic Coding基盤を構築・展開する際の設計ポイントと限界点 / Design considerations and limitations when building an agentic coding platform on AgentCore Runtime
har1101
4
250
aws-iot-platform-architecture-use-cases.pdf
ma2shita
0
290
Featured
See All Featured
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3.1k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
So, you think you're a good person
axbom
PRO
2
2.2k
Documentation Writing (for coders)
carmenintech
77
5.5k
Optimising Largest Contentful Paint
csswizardry
37
4k
Ethics towards AI in product and experience design
skipperchong
2
380
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.6k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
67
58k
GitHub's CSS Performance
jonrohan
1033
470k
Statistics for Hackers
jakevdp
799
230k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
330
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
330
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