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
Cacheは銀の弾丸か?
Search
katayan
January 19, 2026
Technology
140
0
Share
Cacheは銀の弾丸か?
katayan
January 19, 2026
More Decks by katayan
See All by katayan
Agent の「自由」と「安全」〜未来に向けて今できること〜
katayan
0
170
CyberAgentの生成AI戦略 〜変わるものと変わらないもの〜
katayan
0
610
Bigtable論文から学ぶシンプルなデザイン
katayan
0
39
Other Decks in Technology
See All in Technology
拝啓、あの夏の僕へ〜あなたも知っているApp Runnerの世界〜
news_it_enj
0
200
Fabric MCPの紹介と使い分け
ryomaru0825
1
110
エージェント時代の UIとAPI、CLI戦略
coincheck_recruit
0
110
Agents CLI と Gemini Enterprise Agent Platform で マルチエージェント開発が楽しくなる!
kaz1437
0
220
AgentCore×VPCでの設計パターンn選と勘所
har1101
4
370
QAエンジニアはどうやって プロダクト議論の場に入れるのか?
moritamasami
2
330
AI時代の品質はテストプロセスの作り直し #scrumniigata
kyonmm
PRO
4
1.1k
AWS Transform CustomでIaCコードを自由自在に変換しよう
duelist2020jp
0
240
EMから幅を広げるために最近挑戦していること / Recent challenges I'm undertaking to expand my horizons beyond EM
hiro_torii
1
180
Shipping AI Agents — Lessons from Production
vvatanabe
0
310
ハーネスエンジニアリング入門
knishioka
0
100
20年前の「OSS革命」に学ぶ AI時代の生存戦略
samakada
0
530
Featured
See All Featured
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
200
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
340
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
180
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
900
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.4k
The browser strikes back
jonoalderson
0
1k
Navigating Team Friction
lara
192
16k
Site-Speed That Sticks
csswizardry
13
1.2k
Paper Plane
katiecoart
PRO
1
49k
Ethics towards AI in product and experience design
skipperchong
2
270
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
290
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