💵

キャッシュ基礎〜キャッシュの格納場所とキャッシュの主要パターン〜

2023/10/22に公開

CDNのイラスト

はじめに

「Web 配信の技術」という書籍を読んだことをきっかけにキャッシュに関する基礎知識をまとめてみました。
この記事では、以下の 3 つの要点に焦点を当てて解説します。

  • キャッシュの定義
  • キャッシュが保存される場所
  • 各種キャッシュのパターン

キャッシュについてこれから学び始める方に、何か一つでも参考になれば幸いです。

キャッシュとは

キャッシュとは、オリジンサーバーから取得したデータ(画像、スタイルシート、JavaScript)を一時的にメモリやストレージに保存しておく技術です。
同じデータへのアクセスが発生した際に、キャッシュからデータを再利用することで、データの取得速度の向上や、通信帯域を節約できるというメリットが見込めます。
頻繁にアクセスされるデータや、物理的に離れたサーバーからデータを取得する必要がある際に特に効果を発揮します。
しかしキャッシュは本来表示すべきではないデータ(古いデータ、他人のデータ)を表示してしまう危険性もあるため、管理には注意が必要です。

キャッシュの格納場所

一口にキャッシュと言っても、その格納場所によって性質が異なります。
ここではキャッシュの格納場所による違いを説明します。

ローカルキャッシュ

主にブラウザに保管されるキャッシュです。
Web サイトを訪問した際にキャッシュされ、サイトを回遊している間や、サイトを再訪したときにキャッシュからデータを取得します。

配信経路上のキャッシュ

配信経路上のキャッシュには、主に CDN やプロキシサーバーが用いられます。
プロキシキャッシュは、ネットワークのゲートウェイに設置されたプロキシサーバーに保存されるキャッシュです。これは、多くのユーザーに共有され、特定のネットワーク内でのアクセス速度の向上や帯域の節約に寄与します。
一方、CDN (Content Delivery Network) は、世界中に分散されたサーバーネットワークを持ち、ユーザーに最も近いサーバーからコンテンツを配信します。これにより、コンテンツの配信速度が向上し、サーバーの負荷が分散されます。さらに、CDN は配信経路の最適化を行い、ユーザーにとって最も効率的な方法でコンテンツを提供することができます。

サーバーサイドキャッシュ

サーバーサイドキャッシュはオリジンサーバーやデーターベースサーバー上で動作するキャッシュのことを指します。
オリジンサーバーのキャッシュでは一度計算された結果やレンダリングされたページをキャッシュし、データベースでは頻繁にクエリされるデータなどをキャッシュします。
これによってサーバーの応答時間の短縮や、CPU の負荷軽減をおこうなうことができます。

主要なキャッシュのパターン

キャッシュアサイド

最も一般的なキャッシュのパターンがキャッシュアサイドです。
このパターンの特徴は、アプリケーションからキャッシュとデータベースの両方とやり取りを行う点です。
データの読み込み時には、まずキャッシュから確認を行い、キャッシュがヒットした場合はキャッシュからデータを返します。ヒットしなかった場合はアプリケーションがデータベースからデータを取得し返します。
データの書き込み時はデータベースのみに行い、キャッシュへの書き込みはキャッシュミスが発生した際に行われます。

メリット

  • 柔軟性:アプリケーション側でデータベースとキャッシュを区別するため、アプリケーションが実際に必要なデータのみをキャッシュするなど、柔軟に調整することが可能になります。
  • 書き込みがシンプル:データの書き込みはデータベースのみに行い、キャッシュミスが発生した際にキャッシュへの書き込みが行われます。

デメリット

  • 初回読み込みのコスト:キャッシュとデータベー両方にアクセスするため、初回の読み込みが遅くなる可能性があります。
  • 新しいデータはキャッシュミスする:データの書き込み時にはキャッシュされないため、初めて読み込まれるデータはデータベースから取得されることになる。

キャッシュアサイドの図

リードスルー/ライトスルー

キャッシュアサイドパターンではアプリケーションがキャッシュとデータベースの両方とやり取りをするのに対して、このパターンではアプリケーションはキャッシュとのみやり取りを行います。
アプリケーションがデータ取得時にキャッシュを最初に確認する点は変わりませんが、キャッシュにヒットしなかった場合、キャッシュサーバーがデータベースに問い合わせを行いデータを返却します。
ライトスルーパターンではアプリケーションはデータの書き込みをキャッシュに行います。その後キャッシュサーバーがデータベースに書き込みを行います。

メリット

  • コードがシンプル:アプリケーションからはキャッシュとデータベースを区別する必要がなくなるためコードがシンプルになります。
  • 新しいデータでもキャッシュヒットする:ライトスルーパターンでは書き込み時にキャッシュするため、まだ読み込まれてないデータもキャッシュされます。

デメリット

  • キャッシュの複雑性:キャッシュがデータベースと自動的にやり取りを行うためキャッシュの管理や設定が複雑になる可能性があります。
  • リソースの増加:キャッシュアサイドパターンでは実際に読み込まれたデータのみキャッシュするのに対して、ライトスルーパターンでは全ての書き込みをキャッシュします。その結果、一度も読み込まれないデータもキャッシュすることになります。

リードスルー/ライトスルーの図

最後まで読んでいただき、ありがとうございます。

参考

https://gihyo.jp/book/2021/978-4-297-11925-6

Discussion