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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
katayan
January 19, 2026
Technology
140
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
380
CyberAgentの生成AI戦略 〜変わるものと変わらないもの〜
katayan
0
630
Bigtable論文から学ぶシンプルなデザイン
katayan
0
44
Other Decks in Technology
See All in Technology
AmazonRoute 53ではじめてのドメイン取得!HTTPS化までの道のりを整理してみた
usanchuu
3
140
200個のGitHubリポジトリを横断調査したかった
icck
0
130
気づかぬうちにセキュリティ負債を生むAPIキー運用
sgwrmctk
0
160
非エンジニアがClaudeと挑んだ「1ヶ月間プロダクト30本ノック」
askokc
0
590
自宅LLMの話
jacopen
1
600
【2026年版】 ベクトル検索䛸 Embedding最前線
mocobeta
2
250
人材育成分科会.pdf
_awache
4
270
あなたの知らないPDFのアクセシビリティ
lycorptech_jp
PRO
0
200
Claude Codeをどのように キャッチアップしているか
oikon48
13
8.2k
On-behalf-of Token exchange with AgentCore Identity
hironobuiga
2
220
アンオフィシャルな、オフィシャルからのお願い
wyamazak_devrel
0
120
AIエージェントが名古屋の猛暑からあなたを守る
happysamurai294
0
130
Featured
See All Featured
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
Building an army of robots
kneath
306
46k
30 Presentation Tips
portentint
PRO
1
320
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.1k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
300
Ethics towards AI in product and experience design
skipperchong
2
310
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.5k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
430
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
How to train your dragon (web standard)
notwaldorf
97
6.7k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2k
How to Talk to Developers About Accessibility
jct
2
230
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