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 Stampede をセマフォで対策する
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
najeira
September 27, 2016
Programming
19k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Cache Stampede をセマフォで対策する
najeira
September 27, 2016
More Decks by najeira
See All by najeira
Flutter with Platform
najeira
4
1.5k
Google I/O 2019 Extended Tokyo - Flutter
najeira
1
220
Flutter APP DOJO 2019-04
najeira
1
210
Flutterとの1年
najeira
4
1.6k
Flutter List View 概要
najeira
0
1.3k
Flutter / Google I/O 2018 報告会 信州
najeira
0
350
仕組みを知れば怖くない! Flutter入門
najeira
16
8.1k
FlutterでAndroid/iOS両対応のアプリ開発
najeira
0
4.7k
Google I/O 2017 報告会 Firebase/Cloud
najeira
1
190
Other Decks in Programming
See All in Programming
AWS CDK を「作」ってみた 〜フルスクラッチで見えた CDK の裏側〜 / aws-cdk-from-scratch
gotok365
3
2.8k
言葉の格闘技のススメ~紙とペンと言葉から始める、キャリアの描き方~
progresscicada
2
160
いまどきの Codex で開発する visionOS アプリの開発スタイルについて
karad
0
150
AI時代のPHPer生存戦略 ~「言語、もうなんでもよくない?」に本気で向き合う~
vivion
0
800
Flow は今どうなっているか
mizdra
PRO
0
610
GDG Korea Android: 2026 I/O Extended ~ What's new in Android development tools
pluu
0
230
Google Apps Script で Ruby を動かす
kawahara
0
270
Go言語とトイモデルで学ぶTransformerの気持ち / fukuokago23-transformer
monochromegane
0
180
AI時代に設計が 最大の生産性レバーになる 意図駆動開発とデータを消さない設計|Don't Delete Your Data or Your Intent — Design as the Deepest Lever in the AI Era
tomohisa
1
1k
KotlinConf Extended South Korea 2026 Keynote
l2hyunwoo
0
110
全PRの83%がAIレビューだけでマージできるようになった開発組織はその後どうなったか
athug
1
1.8k
Android CLI
fornewid
0
220
Featured
See All Featured
Are puppies a ranking factor?
jonoalderson
1
3.8k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
390
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
650
We Are The Robots
honzajavorek
0
300
Music & Morning Musume
bryan
47
7.3k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
25k
Automating Front-end Workflow
addyosmani
1369
210k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
470
How to build a perfect <img>
jonoalderson
1
5.9k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6.1k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
430
Transcript
Cache Stampede 対策として セマフォを使う najeira @ Gunosy Cache Night
Cache Stampede キャッシュの有効期限切れによって オリジン(データベースなど)へ アクセスが殺到する問題 Stampede = 殺到
典型的な使い方 # キャッシュからデータを取得する data = get_cache(key) if not data: #
キャッシュがなければデータベースから取得する data = get_data_from_database(...) # 新しいデータをキャッシュに保存する set_cache(key, data, ttl=60) # ユーザーにレスポンスを返す send_response(data)
アクセスが少ないと
アクセスが多いと
呼び方? 他にも • Cache miss storm • Dog-piling と呼ばれたりするらしい Thundering
Herdと呼ばれることも?
対策 • ロック • 別プロセスで定期更新 • 確率的な期限切れ 今日はロック(セマフォ)について
有名OSSは? • Rails ActiveSupport::Cache::Store race_condition_ttl • nginx proxy_cache_lock • Varnish
Grace mode いずれもロック系の対策
考え方 新しいキャッシュの作成は 「ひとりだけ」が実行すればよい 他のプロセスは、 それを待つか、 古いキャッシュを使う
ひとりだけ更新
セマフォ 並列環境での複数の実行単位が共有す る資源にアクセスするのを制御するもの。 ある資源が何個使用可能かを示す記録 で、使用や解放の際に記録を安全に書き 換え、資源が使用可能になるまで待つ操 作が結びついている。 by https://ja.wikipedia.org/wiki/セマフォ
セマフォ Webサーバは複数台に分散、 同一のサーバでも複数プロセス OSの(プログラミング言語上の) セマフォを使うことはできない。
セマフォ キャッシュが共有資源なので、 キャッシュのシステム上に セマフォを実現すればよい
Memcached Add add: データが存在しない場合のみ 保存する。
コードで見ると data = memcache.get(key_for_data) if not data: memcache.add(key_for_semaphore, 1, ttl=60)
data = get_data_from_database(...) #データベースから取得 memcache.set(key_for_data, data, ttl=120) # キャッシュを保存 else: #セマフォの獲得を試みる ret = memcache.add(key_for_semaphore, 1, ttl=60) if ret: # セマフォを獲得した場合は新しいキャッシュを作る data = get_data_from_database(...) memcache.set(key_for_data, data, ttl=120) return data
ポイント セマフォ用のキーは データ用のキーより 短い有効期限にしておく セマフォ < データ
ポイント addできるのはひとり ⇒オリジンへのアクセスはひとり セマフォ用のキーに有効期限がある ⇒セマフォの解放が非同期で自動 ⇒解放されると次のアクセスが新しい キャッシュを作る