×

動的コンテンツをキャッシュする方法とは?

2022/04/11

Webサイトのレスポンスを上げるにはコンテンツのキャッシュが効果的です。しかし現代のWebサイトで主流の動的コンテンツは、一般にキャッシュが難しいとされています。今回は動的コンテンツのキャッシュを可能にする技術とその仕組みについて、簡単に解説していきます。

 

動的コンテンツはキャッシュできるか

動的コンテンツのキャッシュとは、オリジンサーバーから配信される動的コンテンツを別のサーバーにコピー(キャッシュ)することです。

 

コンテンツをキャッシュする目的

動的・静的を問わず、コンテンツをキャッシュする目的はWebサイト表示の高速化です。たとえばAというオリジンサーバー「だけ」でコンテンツを配信する場合、閲覧者とサーバーの距離が物理的に遠くなるほどレスポンスは悪化しますし、一度に大量のアクセスがAに集中した場合、サーバーがダウンするおそれもあります。

これに対しAが配信するコンテンツをBCDといった複数のサーバーにキャッシュしておけば、閲覧者に最も近いサーバーからコンテンツを配信してレスポンスを高速化させたり、大量のアクセスを分散させてレスポンスの悪化やサーバーダウンを防ぐことができます。

 

 

動的コンテンツのキャッシュは難しい

ここで問題になるのが、静的コンテンツと動的コンテンツの性格の違いです。

静的コンテンツとは閲覧者の属性やリクエストに関係なく常に同じ結果を返すコンテンツで、動的コンテンツとは閲覧者によって異なる結果を返すコンテンツのことを指します。閲覧者の閲覧履歴、位置、デバイスなどを元にパーソナライズされたコンテンツになります。例えば、Facebookのニュースフィードは、下記の3つの指標によってパーソナライズされています。

・投稿した人: Facebookで頻繁に交流している友達や家族、参照の頻度が高いニュースサイト、ビジネス、公人・著名人の投稿が優先されます。

・コンテンツの種類: ニュースフィードでシェアされる写真、動画、リンクなどのうち、利用者本人が反応する頻度が高いコンテンツの種類が優先されます。

・投稿への反応: 「いいね!」、リアクション、コメント、シェアなど(特に利用者がよく交流している相手からの反応)の数が多い投稿。

静的コンテンツは相手が誰であっても「あらかじめ用意したコンテンツ」を表示するため、キャッシュしておくことも容易です。しかし動的コンテンツは閲覧者からのリクエストや閲覧のタイミングによって表示するコンテンツを生成するため、あらかじめコンテンツをキャッシュしておくことが困難です。

仮に一部のコンテンツをキャッシュしておいたとしても、そのコンテンツの内容が必ずしも閲覧者のリクエスト通りであるとは限らないうえ、キャッシュしておく時間が長くなればなるほど、古いコンテンツを配信してしまうというリスクがあります。

 

動的コンテンツをキャッシュする方法

長年にわたり、動的コンテンツのキャッシュは不可能とされてきました。しかし近年ではテクノロジーの進化により、動的コンテンツのキャッシュが「可能」になっています。

 

静的コンテンツとしてキャッシュする

動的コンテンツのキャッシュにはCDNContent Delivery Network)サービスを利用します。そもそもCDNとはオリジンサーバー上のコンテンツをコピーしておくキャッシュサーバー群のことで、閲覧者は世界中に張り巡らされたCDNの中から、物理的に近い場所にあるサーバーから配信を受けるという仕組みです。とはいえすでに説明した通り、動的コンテンツはそのままキャッシュしても使い物になりません。

動的コンテンツをキャッシュする方法は製品・サービスによって異なります。ここでは、動的コンテンツを実現するためのいくつかの手法を紹介します。

ひとつの方法はコンテンツを「静的な部分」と「動的な部分」に切り分け、静的な部分をキャッシュするというものです。例えば、動的コンテンツの中に「リクエストの度に画像をリサイズする」という処理が含まれる場合、最初のアクセス時にリサイズした画像をCDNにキャッシュしておき、次のリクエストから(画像部分については)CDN上のコンテンツを返すことで応答スピードの高速とオリジンサーバーの負荷軽減を実現します。

他の手法としては、JSP(Javaサーバーページ)に含まれているJavaScriptで生成したコンテンツをキャッシュする方法もあります。JavaScriptの一部をキャッシュすることで、動的コンテンツをキャッシュします。

また、閲覧者のブラウザにキャッシュされたコンテンツに対し、アクセスのタイミングに応じた「差分情報」だけを送信することで「閲覧者のブラウザ上で動的コンテンツを再現する」という方法もあります。

Limelightがどのように動的コンテンツをキャッシュするかについては、お問い合わせください。

 

 

キャッシュを回避すべきコンテンツ

動的コンテンツの一部をCDNにキャッシュしておく場合、キャッシュ・ルールを決めなくてはなりません、特に注意すべきなのは「キャッシュすべきでない」コンテンツです。たとえばECサイトで利用される個人情報(顧客名や住所、連絡先)や決済情報などがこれに相当します。

こうした情報は、万に一つも他の閲覧者に配信されてはいけません。事故を回避するためにも、あらかじめキャッシュしない(リクエストのたびにオリジンサーバーで生成する)ようにチューニングしておく必要があるでしょう。

 

まとめ

動的コンテンツも静的コンテンツと同様、キャッシュが可能です。CDNサービスを利用する際はコンテンツのどの部分をキャッシュするか、どのようなデータをキャッシュさせないかといったキャッシュ・ルールをしっかり設計することで、効率的なコンテンツ配信が可能になります。