キャッシュとは?
キャッシュは、何かがデータへのアクセスを必要とするときに、より高速に取得できるよう一時的にデータを保存する場所です。キャッシュとは、このデータを保存するプロセスを指します。また、技術的ではない文脈で、便宜上何かを保存する場所として「キャッシュ」という用語が使われているのを耳にしたことがあるかもしれません。例えば、キャンプやハイキングをする人が、通り道に食料を「キャッシュ」することがあります。しかし、オンラインでのキャッシュの意味を詳しく見ていきましょう。
理想的な世界では、Webサイトにアクセスするユーザーがサイトをすばやくレンダリングするために必要なすべてのデータアセットがローカルに保存されています。しかし、アセットは別の場所、おそらくデータセンターやクラウドサービスにあり、それらを取得するにはコストがかかります。ユーザーが負担するのはレイテンシ、つまりアセットを生成して読み込むのに必要な時間であり、一方でお客様は金銭的なコストを負担します。料金には、コンテンツをホストするためのコストだけでなく、データ送信コストと呼ばれるものも含まれます;これは、訪問者からリクエストがあった際に、そのコンテンツをストレージから移動するための料金です。Webサイトが受信するトラフィックが多いほど、リクエストにレスポンスしてコンテンツを配信するために支払う金額も増えます。その多くは重複したリクエストである可能性があります。
そこでキャッシュが役立ちます。キャッシュにコンテンツの複製を保存することで、その配信を高速化しながら、使用するリソースを抑えられます。
キャッシュの仕組み
キャッシュの仕組みを理解するには、まず HTTP リクエストとレスポンスの仕組みを理解する必要があります。ユーザーがリンクをクリックするか、またはアドレスバーにWebサイトの URL を入力すると、ブラウザ(クライアント)からコンテンツが置かれている場所(オリジンサーバー)にリクエストが送信されます。次に、オリジンサーバーはリクエストを処理してレスポンスをクライアントに送信します。

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




