Skip to content
Latchkey

cacheレイヤーとは? 遅いストレージの前に置く速いストレージ

cacheレイヤーは、頻繁にアクセスされるデータを高速なストレージに保存し、繰り返しの読み取りがデータベースやリモートAPIのような遅いソースを避けられるようにします。

cacheは、わずかな古さを大きな速度と引き換えにします。ホットなデータを、遅いソースの前にある高速なメモリに保つことで、cacheレイヤーはレイテンシを削り、記録の源泉への負荷を軽減します。有名な警句「コンピュータサイエンスで難しいものは二つだけ、cacheの無効化と名前付けだ」は、そのトレードオフのコストについてのものです。

cacheレイヤーの仕組み

読み取りはまずcacheを確認します。ヒットすれば、cacheされた値を高速に返します。ミスすれば、ソースから取得し、結果を保存して返します。頻繁に読まれ、めったに変わらないデータが最も恩恵を受けます。

得られるもの

  • ホットな読み取りのより低いレイテンシ。
  • データベースやupstreamサービスへの負荷の軽減。
  • 読み取りの多いトラフィック下でのより高いスケーラビリティ。
  • 読み取りのスパイクを吸収するバッファ。

無効化の問題

cacheは、ソースが変わった後に古いデータを提供しうります。戦略 (time-to-liveによる期限切れ、write-through、明示的な無効化) がその古さを管理します。誤った戦略を選ぶと、ユーザーに古いデータを与えるか、cacheの利点を消してしまうため、cacheのバグはここに集中します。

cacheと整合性

cacheはデータの二つ目のコピーを持ち込むため、小さな結果整合性の問題になります。テストや機能は、cacheが常に最新だと仮定するのではなく、cacheとソースが食い違う期間を許容しなければなりません。

buildパイプラインでのcache

同じ考えがCIを支えます。依存関係やbuildのcacheは高価な作業の結果を保存し、次の実行がそれをスキップできるようにします。どんなcacheとも同じく、古いまたは誤ったcache keyは微妙なバグを引き起こすため、cache keyは出力に影響するすべてを捉えなければなりません。

マネージドrunnerでのbuild cache

すべての依存関係を一から取得するコールドなパイプラインは遅くなります。Latchkeyのrunnerは、依存関係とlayerのcacheをウォームに保ち、繰り返しのbuildが毎回取り直す代わりに以前の作業を再利用できるようにします。

重要なポイント

  • cacheレイヤーは、遅いソースの前にある高速なストレージにホットなデータを保ちます。
  • その中心的な課題は無効化、すなわちある程度の古さを許すことのコストです。
  • 同じcacheの考え方が、依存関係やlayerのcacheを介してCIのbuildを高速化します。

関連ガイド