有効期限 (TTL) とは?

Fastly のような CDN のコンテキストにおいて、有効期限 (TTL) 値とは、特定のオブジェクトがキャッシュに保持される時間のことです。TTL はオブジェクトの「新鮮保持期間 (freshness lifetime)」とも呼ばれます。TTL を超えると、オブジェクトは「古い (stale)」と見なされます。これは、より新しい「新鮮な」バージョンが存在する可能性があることを意味しています。

TTL の仕組み

すべてのオブジェクトには、リクエストやレスポンスでクライアントとオリジンサーバー間の情報のやり取りを可能にするための HTTP ヘッダーが含まれています。レスポンスに特定の HTTP ヘッダーを設定することで、どのコンテンツをキャッシュするか、およびその TTL を制御できます。たとえば、Cache-Control や Expires のようなヘッダーにより、オリジンサーバーに問い合わせることなく、キャッシュ内のオブジェクトがリクエストへの応答に使用される最大時間を決定できます。TTL が切れた場合、オブジェクトはストレージ内に保持される場合がありますが、オリジンで再検証されるまでリクエストに使用されることはません。

TTLが重要なのはなぜですか?

コンテンツの配信において、あなた側にはデータ送信コスト (ストレージからコンテンツを移動させるためにホスティングプロバイダーが課す料金) がかかり、顧客側にはレイテンシ (コンテンツを待機する時間) が生じます。

これらコストは両方、TTL を戦略的に設定することで管理できます。たとえば、静的コンテンツには TTL を長めに設定するのが一般的です。これは、静的コンテンツが比較的変更されにくく、オリジンに新しいバージョンがない可能性が高いためです (画像、CSS、JavaScript ファイルなど)。このようなコンテンツをキャッシュに長く保持することで、オリジンからのコンテンツ取得を減らし、データ送信コストを削減できます。また、コンテンツはキャッシュから配信されるため、顧客へのレイテンシも短縮されます。

一方で、動的コンテンツや予測不能な間隔で変化するコンテンツには、TTL を短く設定するのが適しています。これにより、常に最新の情報を提供できます。例としては、ニュース速報、ユーザー生成コンテンツ、現在の店舗在庫などが挙げられます。適切な TTL を設定することで、ユーザーのニーズとビジネスコストのバランスを取ることができます。  

TTL のベストプラクティス

適切な TTL を設定することで、パフォーマンス、コスト、可用性のバランスを取ることができます。

  • TTL が長いほど、「新鮮な」コンテンツのためにオリジンからコンテンツを取得する回数が減ります。

  • TTL が低いほど、キャッシュされたオブジェクトの有効期限が早く切れ、キャッシュからの更新がより頻繁に行われます。

大きな変更が発生しない静的コンテンツ (画像、CSS、JavaScript ファイルなど) には長めの TTL を設定し、予測不能な間隔で変更される動的コンテンツには短めの TTL を設定します。これにより、ユーザーが常に新鮮なコンテンツを利用できるようになります。

Fastly のような CDN では、エンドユーザーの Web ブラウザのキャッシュを無効化することはできないため、キャッシュからオブジェクトをパージする方が一般的に容易で、より制御しやすくなっています。そのため、キャッシュ内に保持するコンテンツとユーザーの Web ブラウザに保存されるコンテンツで異なる TTL を設定するのが合理的です。

このような異なる TTL の設定は、W3C で定義されている Surrogate-Control HTTP ヘッダーを使用することで実現できます。これらの HTTP ヘッダーを使えば、キャッシュに保持されるオブジェクトには長めの TTL を設定しつつ、ユーザーによる閲覧のために Web ブラウザに保存されるオブジェクトには短めの TTL を設定できます。

Fastly における TTL

キャッシュに万能な方法はありません。ユーザーのニーズによって最適な方法は異なります。実際のシナリオにおいて、キャッシュ要件はさまざまな要因に依存するため、静的コンテンツと動的コンテンツで異なるキャッシュ期間を柔軟に設定できることが求められます。

Fastly サービスでは、単一の URL、タグ付けされたリソースのグループ、あるいはサービス全体のキャッシュであっても非常に簡単にパージできるため、Fastly Cache への保存時には長めの TTL を設定しても問題ありません。TTL を長くすると、キャッシュヒット率が高まり、エンドユーザーにとってのサイトの応答性も向上します。また、新しいコンテンツのためにパージが必要な場合でも、通常は数秒しかかかりません。

TTL を柔軟に制御したい場合のために、Fastly は以下のようなオプションを提供しています。

  • グローバルデフォルト TTL (別名フォールバック TTL) を設定することで、TTL 設定が一貫していない複数のオリジンやサーバーアプリケーションが存在しても、すべてのオブジェクトを一貫した方法でキャッシュできます。

  • HTTP ヘッダーを使用することで、ユーザーのブラウザにコンテンツがキャッシュされる期間を制御できます。

  • コンテンツの有効期限が切れたにもかかわらず、再検証のためにオリジンへ到達できない場合、古いコンテンツが提供されるよう設定できます

次のステップ

さまざまな HTTP ヘッダーが TTL やその他のキャッシュ動作にどのように影響するかの詳細については、「キャッシュのベストプラクティス」ガイドをご覧ください。

Fastly CDN の詳細

デモをリクエスト