セグメントキャッシュ

Fastly のセグメントキャッシュを利用すると、ファイルサイズにかかわらずキャッシュすることができます。セグメントキャッシュは、リソースを Fastly のキャッシュ内でより小さなセグメントに分割し、これらのリソースを再結合または分割することで、クライアントからの任意のサイズのバイト範囲 (Range:) リクエストに対応します。Range:セグメントキャッシュを有効にすると、 リクエストに対するパフォーマンスが向上し、Fastly であらゆるサイズのリソースを効率的にキャッシュできるようになります。

セグメントキャッシュの仕組み

セグメントキャッシュが有効化されているリソースにエンドユーザーが Range: リクエストを送信し、キャッシュミスが発生した (つまり、リクエストされた範囲の少なくとも一部がキャッシュされていない) 場合、Fastly はオリジンに適切な Range: リクエストを送信します。その際、セグメントキャッシュが有効な場合はリソース全体ではなく、エンドユーザーがリクエストしたリソースの特定の部分のみがキャッシュされます (オブジェクトのサイズに応じて丸められます)。キャッシュが部分的にヒットした場合、キャッシュヒットした部分はキャッシュから取得され、足りない部分がオリジンから取得されます。(リソース全体へのリクエストは、0からリソースの最後のバイトまでの Range: リクエストとして扱われます)。

エンドユーザーのリクエストに応えるのに必要なオブジェクトがすべて揃ったら、セグメントキャッシュ機能によって、必要なオブジェクトやオブジェクトの一部が連結され、レスポンスが作成されます。オリジンへのリクエストは「インナーリクエスト」と呼ばれ、segmented_caching.is_inner_req 変数に true が設定され、エンドユーザーからのリクエストは「アウターリクエスト」と呼ばれ、segmented_caching.is_outer_req 変数に true が設定されます。 セグメントキャッシュが有効化されていないオブジェクトに対するリクエストの場合、両方の変数に対して FALSE が設定されます。

制約事項と注意点

本機能を利用するにあたり、以下のような制約事項と注意点を考慮する必要があります。

  • セグメントキャッシュは、オブジェクトの圧縮機能ESI とは互換性がありません。 これらの機能を使用する場合は、セグメントキャッシュを必ず無効にしてください。
  • セグメントキャッシュは、Fastly の イメージオプティマイザー (IO) とは互換性がありません。 IO が有効化されると、セグメントキャッシュは自動的に無効になります。
  • Fastly とオリジン間の HTTP チャンク転送エンコーディングはサポートされていません。 オリジンサーバーは、Range: リクエストに対するレスポンスに必ず Content-Length ヘッダーを使用する必要があります。
  • If-Modified-SinceIf-None-Match の HTTP ヘッダーはサポートされていません。 Fastly は、HTTP 200 OK または HTTP 206 Partial Content の成功ステータスのレスポンスコードのみを返します。
  • URL パージの認証を有効化する必要があります。 セグメントキャッシュでは、URL パージによってリソースのすべての範囲オブジェクトをまとめてパージすることができますが、他に影響を与える可能性があるため、URL パージの認証を有効化する必要があります。パージに関するドキュメントで説明されているように、URL パージの認証トークンが提供されていることを確認してください。
  • リソースのサイズに応じてセグメントキャッシュを有効化することはできません。 セグメントキャッシュを有効にする VCL コードは、リソースがキャッシュから要求される前に実行されなければならないため、リソースのサイズを知ることはできません。ただし、URL (例:/video/) やファイルの拡張子 (例:*.m4v) に応じてセグメントキャッシュを行うことは可能であり、これによるメリットがあるリソースに対してよく使用されます。拡張子に応じてセグメントキャッシュを有効にする方法の例については、次のセクションをご覧ください。
  • セグメントキャッシュを有効化する前にキャッシュされたリソースは利用されません。 既存のサービスに対してセグメントキャッシュを有効にすると、すでにキャッシュされているリソースはすべて無視され、Varnish は範囲リクエストオブジェクトを構築するためにリクエストをオリジンに送信します。以前にキャッシュされたリソースはパージすることもできますし、放置した場合、時間が経つとキャッシュから削除されます。
  • キャッシュヒット率 (CHR) が実際よりも低く表示されます。これは、アウターリクエストのみが考慮されるためです。例えば、リソースの最初の 100 MB がリクエストされ、100 MB のうち 99 MB が Fastly のキャッシュに保持されていても、CHR の統計ではこのリクエストはキャッシュミスとしてカウントされます。しかし実際には、オリジンから取得したのは 1 MB のみで、オリジンのオフロード率は99%でした。

セグメントキャッシュを有効にする

セグメントキャッシュは以下の手順で有効化することができます。

  1. セグメントキャッシュを使用するリソースを決定します。

  2. All services ページから適切なサービスを選択します。検索ボックスを使用すると、ID、名称、ドメインでの検索が行えます。
  3. Edit configuration ボタンをクリックし、オプションを選択してアクティブバージョンをクローンします。設定画面が開きます。
  4. VCL Snippets をクリックします。VCL Snippets ページが表示されます。
  5. Create your first VCL snippet ボタンをクリックします。Create a VCL snippet ページが表示されます。
  6. Name フィールドに、適切な名前 (例:Enable segmented caching) を入力します。
  7. Type (placement of the snippets) から within subroutine を選択します。
  8. Select subroutine メニューから recv (vcl_recv) を選択します。
  9. VCL フィールドに、vcl_recvreq.enable_segmented_caching VCL 変数を true に設定する VCL スニペットを追加します。例えば、MPEG-2 で圧縮されたビデオデータを含む大容量のリソースを適切にキャッシュするために、以下のような VCL スニペットを vcl_recv に追加することができます。

    1
    2
    3
    4
    
    # my custom enabled Segmented Caching code
    if (req.url.ext == "ts") {
       set req.enable_segmented_caching = true;
    }
    

    このスニペットは、ts の拡張子を持つファイルへのリクエストを特定し、それらのファイルに対してセグメントキャッシュを有効にするよう Fastly に指示します。

  10. Create をクリックしてスニペットを作成します。
  11. Activate ボタンをクリックしてサービスをデプロイします。
Back to Top