キャッシュは、データへのアクセスが必要な際により高速にそのデータを取得できるよう一時的にデータを保存する場所を指します。「キャッシュする」ということは、そのようなデータを保存するプロセスを意味します。また、IT 以外の文脈で「便宜上何かを保存する場所」として「キャッシュ」という言葉が使用されているのを耳にしたことがあるかもしれません。例えば、キャンプやハイキングをする人が、通り道に食料を「キャッシュ」することがあり ます。しかしここでは、オンラインでキャッシュすることの意味についてご紹介します。
Webサイトにアクセスするユーザーが素早くサイトをレンダリングできるよう、すべてのデータアセットがローカルに保存されているのが理想的です。しかし実際にはデータセンターやクラウドサービスなど、アセットは別のところに置かれており、その取得に犠牲が伴います。ユーザーにとっての犠牲はスピードです。アセットを読み込んでサイトのページを生成するのに遅延が生じるためです。また、サイト運営者には金銭的なコストがかかります。料金には、コンテンツをホストするためのコストのみでなく、データ送信コストと呼ばれるものが含まれます。これは、サイト訪問者のリクエストに応じてストレージからコンテンツを取得して移動させるためのコストです。Webサイトが受信するトラフィックが多いほど、リクエストへのレスポンスとしてコンテンツを提供するためにコストがかさみます。そしてリクエストの多くが重複している可能性があります。
そこでキャッシュが役立ちます。キャッシュにコンテンツの複製を保存することで配信を加速できると同時に、リソースの消費も少なくて済みます。
キャッシュの仕組みを理解するには、まず HTTP リクエストとレスポンスの仕組みを理解する必要があります。ユーザーがリンクをクリックするか、またはアドレスバーに Webサイトの URL を入力すると、ブラウザ (クライアント) からコンテンツが置かれている場所 (オリジンサーバー) にリクエストが送信されます。次に、オリジンサーバーはリクエストを処理してレスポンスをクライアントに送信します。
このプロセスは瞬間的に行われているように見えるかもしれませんが、実際にはオリジンサーバーがリクエストを処理してレスポンスを生成し、それをクライアントに送信するのに時間を要します。さらに、Webサイトのレンダリングには多くの多様なアセットが必要とされるため、画像や HTML Web ページ、CSS ファイルなど、サイトを構成する各種さまざまなデータを求めて複数のリクエストが送信されなければなりません。
この時点でユーザーのローカルキャッシュが登場します。ユーザーのブラウザは、ロゴを含むヘッダー画像やサイトのスタイルシートなど、静的アセットの一部をデバイス上にキャッシュすることができ、これによりユーザーが次に同じサイトにアクセスする際にパフォーマンスが向上します。しかし、この種の キャッシュはそのユーザーに対してのみ有用です。
自社サイトを訪問するすべてのユーザーのためにアセットをキャッシュしたい場合、リバースプロキシなどのリモートキャッシュの利用をお勧めします。
インターネットインフラストラクチャのさまざまなレベルで実装可能な複数の種類のキャッシュ方法があり、それぞれ特定の用途に使用されます。以下では各種のキャッシュ方法と、それらがよりスムーズなブラウジング体験に貢献する理由をご紹介します。
CDN (コンテンツ配信ネットワーク) でキャッシュすることで、ユーザーにより近い場所からコンテンツを配信して遅延を短縮し、大幅に読み込み時間を改善してサイトパフォーマンスを向上できます。CDN キャッシュは、世界中に分散されたエッジサーバーにコンテンツの複製を保存する仕組みを意味します。ユーザーがコンテンツをリクエストするたびに、CDN はオリジンサーバーが応答するのを待つのではなく、最も近い場所にあるエッジサーバーからコンテンツを配信します。これにより、リクエストが複数のサーバーに分散されるため、オリジンサーバーのワークロードが減ると同時に、より多くのトラフィックを処理できるようになります。
CDN キャッシュと異なり、サーバーサイドキャッシュでは、すぐに使用可能な状態のデータの複製がオリジンサーバーに保存されるため、ユーザーのブラウザはページを読み込むたびにコンテンツの各要素を新たにリクエストせずに済みます。このように再利用可能なデータオブジェクトを保存できることで、データベースクエリの数を最小限に抑え、Webサイトのパフォーマンスを強化できます。サーバーサイドキャッシュには以下を含む複数の形式があります。
ページキャッシュ : HTML ページの複製を保存
オブジェクトキャッシュ : 再利用可能なデータオブジェクトを保存
オペコードキャッシュ : 事前にコンパイルされた PHP コードを保存
データベースキャッシュ : データベースクエリの結果を保存
サーバーサイドキャッシュはコンテンツ以外にも使用され、完全な Web ページから個々のデータベースクエリの結果まで、さまざまな種類のデータの複製を保存できます。
DNS (ドメインネームシステム) 解決は、www.fastly.com のようなドメイン名を、その Webサイトをホストしているオリジンサーバーの特定の IP アドレスに変換するために Web ブラウザが使用するプロセスです。Web ブラウザは DNS キャッシュを使用して DNS クエリの結果をローカルに保存することで後続のアクセスでリクエストをより高速に解決し、プロセスを加速できます。基本的にブラウザはグローバル DNS サーバーを確認する前に、ブラウザ独自の DNS キャッシュに正しい IP アドレスが存在するかどうかを確認します。これにより、ドメイン名の解決に要する時間を大幅に削減し、Webサイトへのアクセスを加速できます。
上記の2種類のキャッシュ方法とは異なり 、DNS キャッシュはサーバーベースではなく、ユーザーにローカライズされます。また DNS キャッシュは、コンテンツの配信やデータベースクエリのストリーミングではなく、ドメイン名の解決に特化しています。
コンテンツキャッシュは、ユーザーへの配信をより効率的に行うためにさまざまなタイプの Web コンテンツを複製して保存する、より一般的なキャッシュカテゴリーです。(サーバーサイドキャッシュや CDN キャッシュと同様に) コンテンツキャッシュはサーバーレベルで実行されます。ただし、サーバーサイドキャッシュは以下を含む他のレベルでも実行可能です。
ブラウザキャッシュ : Web コンテンツをユーザーのデバイスにローカルに保存することで、サイトに再度アクセスした際により高速な再読み込みが可能になります。
プロキシキャッシュ : Web コンテンツがネットワーク上でユーザーとオリジンサーバーの間に位置する中間サーバー (プロキシ) に保存されます。
ゲートウェイキャッシュ : データの複製が組織ネットワーク内のゲートウェイに保存されます。
コンテンツキャッシュは、複数のレベルで実行でき、画像や動画、完全な HTML ページを含む多様なコンテンツタイプをサポートできるという点において、非常に高い可変性があります。コンテンツキャッシュによって、サイトの読み込みを効率化し、ネットワーク上の全体的な帯域の使用を削減できます。その結果、コンテンツの複製により簡単にアクセスできるようになるため、さらに高速でスムーズなブラウジング体験をユーザーに提供することが可能になります。
キャッシュは、後で使用するためにデータの複製を身近に置く仕組みであるため、これらの複製がすでに存在することがネットワークシステムによって認識される必要があります 。コンテンツがキャッシュで見つかると、「キャッシュヒット」が起こります。キャッシュヒットによって、コンテンツがエッジサーバーからユーザーに直接配信されるよう自動的にトリガーされるため、読み込み時間の短縮につながります。「キャッシュヒット率」は、クエリがキャッシュヒットである回数の割合を指します。
一般的に CDN ソリューションでは、他のサーバーサイドのキャッシュシステムよりもキャッシュヒット率が高くなります。理由は、CDN では多数のエッジサーバーがグローバルにデプロイされ、エンドユーザーの近くに戦略的に配置されているためです。通常 CDN は大規模なユーザーベースに配信するため、地理的に近いユーザーによる過去のリクエストによって必要なデータの複製がすでにその地域のエッジサーバーに保存されている可能性が高くなります。
しかし、ユーザーリクエストの結果が常にキャッシュヒットとは限りません。サーバーがコンテンツをエッジから取得できず、結果的にオリジンサーバーから取得しなければならない場合があります。これは「キャッシュミス」と呼ばれ、さまざまな理由で発生します。
初回リクエスト (コールドキャッシュ)
キャッシュの無効化またはパージ
容量の限界
コンテンツの更新
また、コンテンツミスはコンテンツが失効した場合にも生じます。コンテンツは TTL (Time-to-Live) の値、すなわち有効期限に基づいて CDN エッジネットワークにキャッシュされます。有効期限が過ぎると、コンテンツはキャッシュから削除されます。開発者やネットワークエンジニアは、キャッシュされるコンテンツの種類に応じて TTL 値を設定します。ニュース記事などの動的コンテンツは数秒から数分の短い TTL 値が使用される傾向があります。対象的に、CDN キャッシュでは数日から数週といったより長めの TTL 値が設定されることが多く、これは画像や動画、CSS、JavaScript データなどのコンテンツが静的であるためです。
状況によってはキャッシュをクリアするメリットがありますが、常にそうとは限らず、推奨されない場合もあります。以下では、キャッシュをクリアすべき最も一般的な理由の一部をご紹介します。
ローカルにキャッシュされたデータが時間の経過とともに蓄積し、システム上で大きなストレージスペースを占めることがあります。例えば、特にネットブックをはじめとするノートパソコンなど、ストレージ容量が限られた個人のデバイスで、これが問題になります。キャッシュをクリアすることで、貴重なストレージスペースが解放され、デバイスのパフォーマンスがスムーズになることがよくあります。
キャッシュされたデータが破損したり、時間とともに古くなり、適切でなくなったりする場合があります。これにより、Webサイトの速度がスローダウンしたり、バグか発生したりして重要な機能へのアクセスが妨げられる可能性があります。キャッシュをクリアすることで、破損した、または古くなったファイルを削除してこうした問題を解決できることがよくあります。
キャッシュされたデータには、ログインクレデンシャル やブラウジング履歴を含む個人情報が含まれることがあります。キャッシュをクリアしてシステムからこのような個人情報を削除することで、簡単に個人情報を保護できます。
一方、キャッシュのクリアが不要または推奨されないケースもあります。
ユーザーがキャッシュをクリアするとデータが削除され、Webサイトやアプリケーションの読み込みが加速します。一方、キャッシュのクリアによるデメリットは、Webサイトやアプリケーションがリソースを一から再読み込みする必要が発生することです。これにより、キャッシュが再構築されるまで読み込みが遅くなります。
キャッシュのクリアによってパフォーマンス問題が解決されることもありますが、多くの場合、解決は一時的に過ぎません。根本にある原因が解決されない限り、キャッシュが再構築されるとパフォーマンス問題が再発する可能性があります。長期的な解決を達成するには、問題の根本原因を特定して対処する必要があります。
キャッシュによる主なメリットのひとつにパフォーマンスの改善が挙げられます。しかしキャッシュされたデータを削除することで、この付加価値が失われることになります。
Fastly のキャッシュ機能
Fastly の CDN では、キャッシュを利用してユーザーへのコンテンツ配信 を加速させています。コンテンツとまったく同じ複製を世界中のサーバーに保存することによって、Fastly CDN はレイテンシとサーバへの負荷を削減し、最も近いサーバーからエンドユーザーがコンテンツに最速でアクセスできるようにしています。
Fastly のキャッシュ機能には、素早いコンテンツの更新を可能にするインスタントパージが含まれ、キャッシュルールのカスタマイズも可能です。Fastly のアプローチを通じて、コンテンツへのアクセスを加速させてユーザーエクスペリエンスを向上させながら帯域の使用とデータ送信コストを削減できます。
CDN でキャッシュするメリットの詳細