セグメントキャッシュ

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

警告

サイズの大きなリソースを配信するサービスでは、セグメントキャッシュを有効にすることをお勧めします。セグメントキャッシュが有効化されていない場合、アカウントのリソースサイズ制限は、お客様が Fastly の使用を開始した時期によって異なります。

  • 2020年6月17日以降に作成したアカウント - セグメントキャッシュを利用しない場合に配信可能なオブジェクトサイズの上限は 20 MB です。
  • 2020年6月17日より前に作成したアカウント - セグメントキャッシュ を利用しない場合にキャッシュ可能なファイルサイズの上限は、ストリーミングミス を使用しないリクエストでは 2 GB、ストリーミングミスを使用するリクエストでは 5 GB となります。

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

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

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

注意

この機能では、エンドクライアントからのバイト範囲 (Range:) リクエストを処理するのに必要なオブジェクトがない場合にのみ、オリジンにリクエストを送信します。エンドユーザーのバイト範囲リクエスト自体が一意であっても、リクエストを処理するのに必要なオブジェクトがすべてキャッシュされている場合はキャッシュヒットと判断されます。

制約と考慮事項

この機能には以下のような考慮すべき制約があります。

  • セグメントキャッシュは動的に生成されたコンテンツを対象としていません。 コンテンツが完全に静的でない場合 (ユーザーが生成したコメントなどの動的コンテンツがある場合など) は、データの破損を防ぐため、コンテンツが変更されたときに必ずパージを設定してください。
  • セグメントキャッシュはオブジェクト圧縮ESI と互換性がありません。 これらの機能を使用する場合は、セグメントキャッシュを必ず無効にしてください。
  • セグメントキャッシュは、Fastly のイメージオプティマイザー (IO) と互換性がありません。 IO が有効化されると、セグメントキャッシュは自動的に無効になります。
  • Fastly とオリジン間の HTTP チャンク転送エンコーディングはサポートされていません。 オリジンサーバーは、Range: リクエストに対するレスポンスに必ず Content-Length ヘッダーを使用する必要があります。
  • URL パージの認証を有効化する必要があります。 セグメントキャッシュでは、URL パージによってリソースのすべての範囲オブジェクトをまとめてパージすることができますが、その基盤の実装のために URL パージの認証を有効化する必要があります。パージに関するドキュメントで説明されているように、URL パージの認証トークンが提供されていることを確認してください。
  • リソースのサイズに応じてセグメントキャッシュを有効化することはできません。 セグメントキャッシュを有効にする VCL コードは、リソースがキャッシュから要求される前に実行されなければならないため、リソースのサイズを知ることはできません。ただし、URL (例:/video/) やファイルの拡張子 (例:*.m4v) に応じてセグメントキャッシュを行うことは可能であり、これによるメリットがあるリソースに対してよく使用されます拡張子に応じてセグメントキャッシュを有効にする方法の例については、以下の説明をご覧ください。

この機能の使用において以下の点を考慮する必要があります。

  • セグメントキャッシュを有効化する前にキャッシュされたリソースは利用されません。 既存のサービスに対してセグメントキャッシュを有効にすると、すでにキャッシュされているリソースはすべて無視され、Varnish は範囲リクエストオブジェクトを構築するためにリクエストをオリジンに送信します。以前にキャッシュされたリソースはパージすることもできますが、放置した場合は、時間が経つとキャッシュから削除されます。
  • キャッシュヒット率 (CHR) が実際よりも低く表示されます。これは、アウターリクエストのみが考慮されるためです。例えば、リソースの最初の 100 MB がリクエストされ、100 MB のうち 99 MB が Fastly のキャッシュに保持されていても、CHR の統計ではこのリクエストはキャッシュミスとしてカウントされます。しかし実際には、オリジンから取得したのは 1 MB のみで、オリジンのオフロード率は99%でした。

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

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

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

ファイルの拡張子や明確な URL 構造のパスを使用してリソースを区別し、必要なリソースのみにこの機能を有効にすることをお勧めします。

  1. Home ページから、適切なサービスを選択します。検索ボックスで ID、名称、ドメインによる検索が行えます。
  2. Edit configuration をクリックし、アクティブなバージョンをクローンするオプションを選択します。
  3. VCL Snippets をクリックします。

  4. Create your first VCL snippet をクリックします。

  5. 以下の要領で、Create a VCL snippet の各フィールドに入力します。

    • Name フィールドに、適切な名前 (例: Enable segmented caching) を入力します。
    • Type (placement of the snippets) メニューで、within subroutine を選択します。
    • Select subroutine メニューから、recv (vcl_recv) を選択します。
    • 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 に指示します。

  6. Create をクリックしてスニペットを作成します。

  7. Activate をクリックして設定への変更をデプロイします。

翻訳についての注意事項
このガイドは役に立ちましたか?

このフォームを使用して機密性の高い情報を送信しないでください。サポートが必要な場合は、サポートチームまでご連絡ください。このフォームは reCAPTCHA によって保護されており、Google のプライバシーポリシー利用規約が適用されます。