mybook

プロローグ — 遅い、が命取りになる日

午前2時のアラート

深夜2時、マナミのスマホが鳴った。

「本番サーバーのレスポンスタイムが10秒を超えています」

ECサイト「FreshMarket」のバックエンドエンジニアであるマナミは、寝ぼけた目でダッシュボードを開いた。テレビCMの放映直後、アクセスが通常の50倍に跳ね上がっていた。

データベースの CPU 使用率は 98%。同じ商品情報を毎秒数千回クエリしている。ページの表示に12秒——ユーザーの53%は3秒で離脱するという統計を、マナミは嫌というほど知っていた。

WARNING

Google の調査: ページ表示が1秒から3秒に遅延すると、直帰率は 32% 増加する。1秒から5秒では 90% 増加する。

「なんで同じデータを何千回も DB に取りに行ってるんだ……」

答えは明白だった。キャッシュがなかったのだ。

キャッシュとは何か

キャッシュとは、一度取得したデータを高速にアクセスできる場所に一時保存し、再利用する仕組みだ。

Loading diagram...

日常のキャッシュ

キャッシュはソフトウェアだけの概念ではない。日常にもある:

  • 冷蔵庫 — スーパー(オリジン)に毎回行かず、食材を手元に保存
  • 教科書のしおり — 毎回最初から読まず、前回の続きから
  • 脳の短期記憶 — よく使う電話番号は覚えている

ソフトウェアの世界でも同じ原理が働く。頻繁にアクセスされるデータを、より高速な場所に置く

キャッシュの階層

Web システムには複数のキャッシュ層がある。

Loading diagram...
Loading chart...

キャッシュの2つの難問

キャッシュは強力だが、2つの根本的な難問がある。

INFO

「コンピュータサイエンスには2つの難問がある: キャッシュの無効化と、命名である」— Phil Karlton

1. キャッシュの無効化(Cache Invalidation)

データが更新されたとき、キャッシュの古いデータをどう処理するか? 古いデータを返し続ければ不整合が起き、頻繁に無効化すればキャッシュの意味がなくなる。

2. キャッシュの一貫性(Cache Consistency)

複数のサーバーにキャッシュがある場合、すべてのキャッシュが同じデータを持っているか? サーバーAでは新価格、サーバーBでは旧価格——これは致命的だ。

マナミの決意

障害を乗り越えた翌週、マナミは先輩エンジニアのケンジに相談した。

「キャッシュを導入したいんですが、何から始めればいいですか?」

ケンジは笑った。「キャッシュは銀の弾丸に見えるけど、設計を間違えると新たな障害の原因になる。まずは基礎から学ぼう」

こうしてマナミのキャッシュ戦略の旅が始まった。

Loading chart...

この本では、マナミと一緒にキャッシュの世界を旅する。各章で一つずつキャッシュの層を学び、最終的には本番で使える包括的なキャッシュ戦略を手に入れる。

次の章では、キャッシュの最も基本的な読み書き戦略から始めよう。