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
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
katayan
January 19, 2026
Technology
0
120
Cacheは銀の弾丸か?
katayan
January 19, 2026
Tweet
Share
More Decks by katayan
See All by katayan
CyberAgentの生成AI戦略 〜変わるものと変わらないもの〜
katayan
0
130
Bigtable論文から学ぶシンプルなデザイン
katayan
0
27
Other Decks in Technology
See All in Technology
DevOpsエージェントで実現する!! AWS Well-Architected(W-A) を実現するシステム設計 / 20260307 Masaki Okuda
shift_evolve
PRO
3
700
[2026-03-07]あの日諦めたスクラムの答えを僕達はまだ探している。〜守ることと、諦めることと、それでも前に進むチームの話〜
tosite
0
210
僕、S3 シンプルって名前だけど全然シンプルじゃありません よろしくお願いします
yama3133
1
210
わからなくて良いなら、わからなきゃだめなの?
kotaoue
1
330
オレ達はAWS管理をやりたいんじゃない!開発の生産性を爆アゲしたいんだ!!
wkm2
4
510
楽しく学ぼう!コミュニティ入門 AWSと人が つむいできたストーリー
hiroramos4
PRO
1
190
Shifting from MCP to Skills / ベストプラクティスの変遷を辿る
yamanoku
4
830
NewSQL_ ストレージ分離と分散合意を用いたスケーラブルアーキテクチャ
hacomono
PRO
4
320
Kubernetesにおける推論基盤
ry
1
360
Claude Codeが爆速進化してプラグイン追従がつらいので半自動化した話 ver.2
rfdnxbro
0
520
Go標準パッケージのI/O処理をながめる
matumoto
0
190
クラウド × シリコンの Mashup - AWS チップ開発で広がる AI 基盤の選択肢
htokoyo
2
240
Featured
See All Featured
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
1.8k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
0
450
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
290
Testing 201, or: Great Expectations
jmmastey
46
8.1k
Abbi's Birthday
coloredviolet
2
5.3k
Designing for Performance
lara
611
70k
First, design no harm
axbom
PRO
2
1.1k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2k
Paper Plane (Part 1)
katiecoart
PRO
0
5.5k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.1k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
120
Bash Introduction
62gerente
615
210k
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