Location via proxy:
[ UP ]
[Report a bug]
[Manage cookies]
No cookies
No scripts
No ads
No referrer
Show this form
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.9k
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
強いチームと開発生産性
onk
PRO
40
14k
ADRを運用して3年経った僕らの現在地
onk
PRO
19
7.9k
すこやかなサービス運営のための PWG (Performance Working Group)
onk
PRO
0
53
オブザーバビリティの Primary Signals
onk
PRO
2
3.9k
ORM - Object-relational mapping
onk
PRO
2
3.4k
デュアルトラックアジャイルとの向き合い方
onk
PRO
4
11k
技術記事を書く&楽しむチームの作り方
onk
PRO
0
130
グルーミングしながら進めるプロダクト開発
onk
PRO
0
410
エンジニアの個人ブランディングと技術組織
onk
PRO
0
130
Other Decks in Technology
See All in Technology
同一クラスタ上でのFluxCDとArgoCDのリソース最適化の話
kumorn5s
0
180
まだチケットを手動で書いてるの?!GitHub Actionsと生成AIでチケットの作成を自動化してみた話 / 20241207 Yoshinori Katayama
shift_evolve
1
820
ソフトウェアエンジニアとしてキャリアの螺旋を駆け上がる方法 - 経験と出会いが人生を変える / Career-Anchor-Drive
soudai
13
2.9k
マルチプロダクト開発の現場でAWS Security Hubを1年以上運用して得た教訓
muziyoshiz
1
110
AWS re:Invent 2024 re:Cap CloudFront編
yoshimi0227
0
210
スパイクアクセス対策としての pitchfork 導入
riseshia
0
210
多様なロール経験が導いたエンジニアキャリアのナビゲーション
coconala_engineer
1
180
属人化したE2E自動テストを ひも解く
honamin09
1
120
リクルートのデータ基盤 Crois 年3倍成長!1日40,000コンテナの実行を支える AWS 活用とプラットフォームエンジニアリング
recruitengineers
PRO
1
270
アップデート紹介:AWS Data Transfer Terminal
stknohg
PRO
0
110
Reliability Engineering at Studist
katsuhisa91
PRO
0
130
アジャイルテストの4象限で考える プロダクト開発の品質への向き合い方
nagano
1
980
Featured
See All Featured
A designer walks into a library…
pauljervisheath
204
24k
Scaling GitHub
holman
458
140k
Agile that works and the tools we love
rasmusluckow
328
21k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.9k
Reflections from 52 weeks, 52 projects
jeffersonlam
346
20k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
1.2k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
229
52k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
790
Rebuilding a faster, lazier Slack
samanthasiow
79
8.7k
The Power of CSS Pseudo Elements
geoffreycrofte
73
5.4k
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