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
Takafumi ONAKA
PRO
July 21, 2023
Technology
1
1.8k
Cache Stampede
2023-07-21 サブカル業界Developers 勉強会 Vol.5 #subcul_dev
https://subculturedev.connpass.com/event/287823/
Takafumi ONAKA
PRO
July 21, 2023
Tweet
Share
More Decks by Takafumi ONAKA
See All by Takafumi ONAKA
すこやかなサービス運営のための PWG (Performance Working Group)
onk
PRO
0
12
オブザーバビリティの Primary Signals
onk
PRO
2
3k
ORM - Object-relational mapping
onk
PRO
1
3.3k
デュアルトラックアジャイルとの向き合い方
onk
PRO
4
10k
技術記事を書く&楽しむチームの作り方
onk
PRO
0
43
グルーミングしながら進めるプロダクト開発
onk
PRO
0
44
エンジニアの個人ブランディングと技術組織
onk
PRO
0
47
Hatena::Letの式年遷宮
onk
PRO
0
34
アプリケーションを作るときに考える25のこと
onk
PRO
0
4
Other Decks in Technology
See All in Technology
【shownet.conf_】コンピューティング資源を統合した分散コンテナ基盤の進化
shownet
PRO
0
310
KDD2024参加報告
cyberagentdevelopers
PRO
1
220
Oracle GoldenGate 23ai 導入Tips
oracle4engineer
PRO
1
210
業務ヒアリングと知識の呪い
tamai_63
0
140
LeSSはスクラムではない!?LeSSにおけるスクラムマスターの振る舞い方とは / Scrum Master Behavior in LeSS
toma_sm
0
150
不感対策ソリューション
jtes
0
240
低コストで実現する社内文書RAG機能を搭載したAIチャットボット開発
takapy
3
620
Authenticator のエミュレーションによる パスキーのログインテスト/nikkei-tech-talk-25
nikkei_engineer_recruiting
0
140
ORM と向き合う
hoto17296
8
6k
AWSへのNIST SP800-171管理策 導入に向けての整備/20240930 Mitsutoshi Matsuo
shift_evolve
0
160
Oracle Cloud Infrastructure:2024年9月度サービス・アップデート
oracle4engineer
PRO
0
370
【インフラエンジニアbooks】30分でわかる「AWS継続的セキュリティ実践ガイド」
hssh2_bin
4
1.3k
Featured
See All Featured
What's new in Ruby 2.0
geeforr
341
31k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
225
22k
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
44
2k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
37
1.7k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
249
21k
Git: the NoSQL Database
bkeepers
PRO
425
64k
Bootstrapping a Software Product
garrettdimon
PRO
304
110k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
26
1.9k
Clear Off the Table
cherdarchuk
91
320k
How GitHub (no longer) Works
holman
311
140k
Gamification - CAS2011
davidbonilla
80
5k
Transcript
Cache Stampede id:onk 2023-07-21 サブカル業界Developers 勉強会 Vol.5 1
自己紹介 • 大仲 能史 a.k.a. id:onk • 株式会社はてな ◦ チーフエンジニア
◦ 今日は京都から来ました 2
3 はてな×サブカル?
はてなの事業 | コンテンツプラットフォームサービス 提供開始から10年を超える「はてなブログ」「はてなブックマーク」など、 個人ユーザー向けコンテンツプラットフォームサービスを提供 「はてなブログ」はユーザーの「書きたい」気持ちに応えるブログサービスです。手軽に書きたい人も、しっか り書きたい人も満足できる便利な機能を備えています。シンプルかつモダンなブログサービスとして継続的な機 能開発に取り組むとともに、検索流入に寄与する要件への対応や機能改善、「はてなブックマーク」との連携な ど、ユーザーの書いたコンテンツが読まれる仕組みも用意しています。 「はてなブックマーク」は国内最大級のソーシャルブックマークサービスです。ニュースやブログのなかから気
になった記事をクラウド上に保存し、ほかのユーザーと共有することができます。オンラインブックマークツー ルとしての利用だけでなく、時々刻々と移り変わるインターネットの人気ページや旬の話題が集まるメディアと しても多くのユーザーにご利用いただいています。
はてなの事業 | テクノロジーソリューションサービス マンガサイト、マンガアプリとしての魅力を引き出せるマンガビューワ「GigaViewer」は、 ユーザーが快適にマンガ作品を楽しむための各種機能に加え、サービス提供者の運用コストを 削減する管理機能、広告によるマネタイズ支援などにより集英社様、講談社様、小学館様などが 提供するマンガサービスに採用されています。 2017年から提供しているWeb版に加え、2021年よりアプリ版をスタートしました。 マンガビューワ GigaViewer
GigaViewer for Web 2017年~ GigaViewer for Apps 2021年~ GigaViewerが採用されたマンガサービス(15社・21サービス / 2023年2月時点)
はてなの事業 | テクノロジーソリューションサービス 株式会社集英社との協業サービス マンガノ 株式会社集英社との共同開発 ジャンプルーキー! あしたのヤングジャンプ マンガ投稿・販売プラットフォーム(Web) マンガ投稿・公開サービス(Web/アプリ)
マンガ投稿・公開サービス(Web)
はてなの事業 | テクノロジーソリューションサービス 株式会社KADOKAWAとの共同開発 カクヨム 小説投稿・収益還元プラットフォーム(Web / アプリ) エンタテインメントサイト(Web) リニューアル開発・運用支援
魔法のiらんど
はてなの事業 | テクノロジーソリューションサービス 任天堂株式会社のゲーム連動サービスのデザイン、サービス企画、サービス開発に協力 スマプラス イカリング2/イカリング3 Nintendo Switch™ソフト「大乱闘スマッシュブラザーズ SPECIAL」 (発売元:任天堂株式会社)のゲーム連動サービス Nintendo
Switch™ソフト「スプラトゥーン2」 (発売元:任天堂株式会社)のゲーム連動サービス ※Nintendo Switchは任天堂の商標です。 イカリング2 © 2017 Nintendo 大乱闘スマッシュブラザーズ SPECIAL / スマプラス © 2018 - 2019 Nintendo Original Game: © Nintendo / HAL Laboratory, Inc. Characters: © Nintendo / HAL Laboratory, Inc. / Pokémon. / Creatures Inc. / GAME FREAK inc. / SHIGESATO ITOI / APE inc. / INTELLIGENT SYSTEMS / Konami Digital Entertainment / SEGA / CAPCOM CO., LTD. / BANDAI NAMCO Entertainment Inc. / MONOLITHSOFT / CAPCOM U.S.A., INC. / SQUARE ENIX CO., LTD. / ATLUS / Microsoft / SNK CORPORATION. / Mojang AB / Disney イカリング3 © Nintendo Nintendo Switch™ソフト「スプラトゥーン3」 (発売元:任天堂株式会社)のゲーム連動サービス
9 はてな=サブカル
10 今日の話
11 Cache Stampede
Cache Stampedeとは 12 • 異世界ダンジョンでお馴染みのスタンピード ◦ 押し寄せる様子。殺到する ◦ 日本では「Thundering Herd」の方が馴染みかも?
▪ Kazuho@Cybozu Labs: キャッシュシステムの Thundering Herd 問題 (2007)
Cache Stampedeの別名 • Thundering Herd ◦ 雷鳴のように鳴り響く群れ • Dog Piling
◦ 犬の積み重ね ◦ 人間が積み重なる野球の乱闘状態もDog Pile 13
Cache Stampedeとは 14 cache origin cacheで返せていたresponseが
Cache Stampedeとは 15 cache origin cacheが切れたら、originに殺到する
Cache Stampedeとは 16 cache origin originに大量に来るとoriginが死ぬ
Cache Stampedeとは 17 cache origin 新たなcacheとなるresponseを 返せないので、ずっと死に続ける
はてな×Cache 18
• CacheはRead Heavyなサービスに向く ◦ Write Heavyだとキャッシュしづらい • UGCはだいたいRead Heavy ◦
書く人は読む人の1/10も居ない • はてなと言えばUGC ◦ 20年間Cacheと一緒に生きてきました はてな×Cache 19
20 今日は主にマンガでの Cacheの話をします
マンガ×Cache 21 • TOPページは雑誌の顔 • 定期更新 ◦ 毎日だったり毎週だったり ◦ 例:ジャンプ33号→34号
• 0時や12時に切り替える
• 0時に一斉に切り替える ◦ 一斉にキャッシュを飛ばすということ • ユーザさんは更新を待っている ◦ F5連打状態。0時はアクセスが増える • アクセス増の中でキャッシュを飛ばす……?
マンガ×Cache 22
23 Stampede発生!
• Q: 昨今はクラウドだし耐えられない? • オートスケーリングは入れている ◦ 負荷に合わせて自動で増やすとか ◦ 更新直前にスケジュールで増やすとか •
とはいえStampedeは避けたい マンガ×Cache 24
Cache Stampede対策 25
• Locking • External recompute • PER (Probabilistic early recomputation)
• SWR (Stale-While-Revalidate) Cache Stampede対策 26
• Locking • External recompute • PER (Probabilistic early recomputation)
• SWR (Stale-While-Revalidate) Cache Stampede対策 27
Locking 28 cache origin originに大量に来るとoriginが死ぬ
Locking 29 cache origin originに1リクエストだけ通す ① ② ③ ④ ①
Locking 30 cache origin 残りは待たせておく ① ① ② ③ ④
Locking 31 cache origin responseが返ってきたらcacheして まとめて返す ① ③ ② ④
• Varnishがデフォルトでこの挙動 • CDNも同じ動きをする ◦ Edgeの数だけ貫通することも ◦ originは貫通してくるreq数に耐える必要がある Locking 32
• Locking • External recompute • PER (Probabilistic early recomputation)
• SWR (Stale-While-Revalidate) Cache Stampede対策 33
External recompute 34 cache origin ユーザリクエスト起因のresponseを キャッシュするのではなく
External recompute 35 cache origin 別プログラムからキャッシュを 定期的に更新し続ける external
External recompute 36 cache origin originを使うかもしれない external
• キャッシュを消さない! ◦ キャッシュが切れるからStampedeになるので、 キャッシュは切らさない。更新し続ける • cronでキャッシュを作るのが定番 External recompute 37
• 時間ぴったりに更新したい要求には弱い ◦ recomputeに時間が掛かるからキャッシュしている ◦ 0:00のcronで動いたら0:01にやっと更新されるとか • CDNのようなキャッシュだと実現しづらい ◦ リクエストに対するレスポンスをキャッシュするため
External recompute 38
• 外部連携でよく使う ◦ 外部サービスが落ちていると タイムアウトまで待ちがち ◦ 本体に影響が出ないようにする • responseを全てキャッシュする External
recompute 39 YouTube Instagram Blog
Cache Stampede対策 • Locking • External recompute • PER (Probabilistic
early recomputation) • SWR (Stale-While-Revalidate) 40
Probabilistic early recomputation 41 cache origin キャッシュが切れそうになったら確率的に originに通して、キャッシュを更新する
Probabilistic early recomputation 42 cache origin 最適な確率を計算するxfetchという アルゴリズムもある(らしい)
• 時間ぴったりに更新したい要求には弱い ◦ 0:00に更新したいページで23:59に生成しても まだ先週のコンテンツが表示されている ◦ expireを0:01にして0:00〜0:01の間に確率的に更新 することになる? Probabilistic early
recomputation 43
• Locking • External recompute • PER (Probabilistic early recomputation)
• SWR (Stale-While-Revalidate) Cache Stampede対策 44
• Stale ◦ 期限切れ (expired) なキャッシュのこと • Revalidate ◦ まだ有効か確認する。ダメなら最新化する?
• Stale-While-Revalidate ◦ 最新の生成物が届くまで期限切れのキャッシュを使う Stale-While-Revalidate 45
• staleキャッシュを返 しつつ、非同期に revalidateリクエスト Stale-While-Revalidate 46 https://yusukebe.com/posts/2021/varnish-stale-while-revalidate/
• HTTP Response Headerでも規定されている ◦ RFC 5861 ◦ https://developer.mozilla.org/en-US/docs/Web/ HTTP/Headers/Cache-Control
◦ Cache-Control ヘッダの値に使う Stale-While-Revalidate 47
• VarnishはGraceモードで実現できる ◦ Fastlyももちろん実現可能 • CDNにも実装されている ◦ Google Cloud CDN、CloudflareはHTTPヘッダに対応
◦ CloudFrontにも最近実装された (2023-05) ▪ Amazon CloudFront now supports stale-while-revalidate and stale-if-error cache control directives Stale-While-Revalidate 48
• https://github.com/vercel/swr も有名 ◦ フロントエンドのデータフェッチライブラリ ▪ Stale-While-Revalidateを実装してあり、いい感じになる Stale-While-Revalidate 49
• stale済みのキャッシュをまだ使える? ◦ originが落ちているときにも有効 • originが落ちているとき、エラーを返すのと 古いキャッシュを返すのと、どちらが良いか ◦ SWRは古すぎる場合にはエラーとなるが Stale-While-Revalidate
50
我々はどうしているか 51
52 未来時間 × ダブルバッファリング
• タイムトラベルして未来のデータを取得する ◦ 時限式のコンテンツを事前に動作確認できる ◦ 明日のトップページとか、キャンペーン開始後のバ ナー表示とか価格とか ◦ 「現在時刻」を外部入力とする設計と、その実装のこ と
- クックパッド開発者ブログ 未来時間 53
ダブルバッファリング • 古のゲームでよく使われていた手法 • バッファを2つ持ち、表示していない方のバッ ファに対して演算しつつ描画する • 表示は描画済みのバッファを表示するだけ ◦ 高速に切り替えられる
54
• 未来のデータを裏でキャッシュしておく • 時間になったら事前に計算済みのキャッシュ を表示する 未来時間×ダブルバッファリング 55
未来時間×ダブルバッファリング 56 12:00-12:15 のcache 12:15-12:30 のcache キャッシュ 作成さん 現在の コンテンツ
未来時間の コンテンツ 12:00 12:15 12:30
まとめ 57
• Cache Stampedeという現象 ◦ リクエストが一斉にoriginに押し寄せてしまう ◦ originを守る様々なテクニックが必要になる • 期限が切れたキャッシュの扱いに着目する ◦
stale済みでも使える場合がある • 時間ぴったりに更新するために試行錯誤した まとめ 58