セグメントキャッシュ
Last updated September 27, 2019
Fastly の セグメントキャッシュ を利用するとファイルサイズに関わらずキャッシュさせることが出来ます。セグメントキャッシュはファイルを 1MB の小さなセグメントに分割してからキャッシュを行い、キャッシュしたオブジェクトをクライアントからの byte-range リクエストの内容に応じて再結合、分割します。
セグメントキャッシュを有効化することで range-get リクエストに対するパフォーマンスを改善し、サイズに関わらず Fastly 上に効果的にキャッシュを行うことが可能となります。 セグメントキャッシュが有効化されていない場合にはストリーミングミスを利用時で 5GB、ストリーミングミス非利用時で 2GB 以上のサイズのファイルに対するリクエストはエラーとなります。
セグメントキャッシュの仕組み
エンドユーザーがセグメントキャッシュが有効化されているファイルに range リクエストを送信し、キャッシュミスが発生した(リクエストされたレンジの一部分でもキャッシュに存在しない)場合、Fastly はオリジンに対して適切な range リクエストを送ります。 この際にセグメントキャッシュが有効な場合はファイル全体を取得するのではなく、エンドユーザーからリクエストされた range を満たすために必要な部分のみを取得してキャシュします。 キャッシュが部分的にヒットした場合、キャッシュヒットした部分はキャッシュから取得され足りない部分がオリジンから取得されます。(ファイル全体の取得リクエストは 0 からファイルの最後までの byte range リクエストとして処理されます。)
エンドユーザーに返答するのに必要なオブジェクトがすべて揃うと、セグメントキャッシュ機能がオブジェクトの必要な部分を結合してエンドユーザーへのレスポンスを作成します。
オリジンへのリクエストは "inner request(インナーリクエスト)"と呼ばれ、segmented_caching.is_inner_req
変数に true
が設定されます。一方エンドユーザーからのリクエストは "outer request(アウターリクエスト)"と呼ばれ segmented_caching.is_outer_req
変数に true
が設定されます。セグメントキャッシュが有効化されていないオブジェクトに対するリクエストには両方の変数に対して FALSE が設定されます。
注意: 本機能ではエンドユーザーからのリクエストを処理するために必要な部分がない場合のみオリジンにリクエストを送信します。エンドユーザーからの range リクエストの内容に関わらず、リクエストを処理するのに必要な部分がすべてキャッシュされている場合にキャッシュヒットと判断されます。
制約事項と注意点
本機能を利用するにあたっては以下のような制約事項と注意点を考慮する必要があります。
- HTTP chunked transfer encoding はサポートされません オリジンは range リクエストへのレスポンスに必ず
Content-Length
を付与する必要があります。 If-Modified-Since
とIf-None-Match
ヘッダーはサポートされません Fastly はHTTP 200 OK
またはHTTP 206 Partial Content
のみを返却します。- URL パージに認証を有効化して下さい URL パージに認証を有効化すると、URL パージでセグメントキャッシュ利用対象の特定のURLに関するすべての部分オブジェクトをまとめて削除することが出来ます。URL パージに認証を有効化するを参照して URL パージに認証を有効化して下さい。
- セグメントキャッシュをファイルサイズに応じて有効化することは出来ません VCL を利用してファイルの拡張子やパスなどセグメントキャッシュを利用する対象を明示的に指定する必要があります。拡張子を指定してセグメントキャッシュをを有効にするサンプルを後述します。
- セグメントキャッシュを有効化する前にキャッシュされたオブジェクトは利用されません セグメントキャッシュを既存のサービスに有効化する場合、キャッシュされているファイルは利用されずリクエストされたオブジェクトの range を取得するためにオリジンに新たにリクエストが送信されます。キャッシュされていたオブジェクトはパージすることも出来ますし、時間が立つとキャッシュから追い出されるので無視することも出来ます。
- キャッシュヒット率 (CHR) は実際よりも低く表示されます アウターリクエストのみがキャッシュのヒット率計算に利用されます。例えばあるファイルの最初の100MB がリクエストされ、Fastly がそのうちの99MBをキャッシュに保持していた場合、実際には1MBのみをオリジンから取得したのでオフロード率は 99% と考えることが出来ますが、このリクエストはキャッシュミスとして計算されます。
セグメントキャッシュの有効化
セグメントキャッシュは以下の手順で有効化することが出来ます。
-
セグメントキャッシュを有効化する対象を決定します。
ヒント: 拡張子、またはパスなどのファイルを区別することが可能な URL の構成を利用して必要なファイルのみに機能を有効化することをお勧めします。
- サービスメニューから設定対象のサービスを選択します。
- Edit configuration ボタンをクリックし、Clone active を選択すると設定画面が開きます。
- VCL Snippets をクリックして下さい。VCL Snippets ページが表示されます。
- Create your first VCL snippet ボタンをクリックして下さい。Create a VCL snippet ページが表示されます。
- Name フィールドに適当な名前を入力して下さい。(例,
Enable segmented caching
). - Type (placement of the snippets) から within subroutine を選択して下さい。
- Select Subroutine リストから recv (vcl_recv) を選択して下さい。
-
VCL フィールドに、
req.enable_segmented_caching
VCL 変数true
を設定する VCL スニペットを追加して下さい。例えば MPEG-2 ビデオデータを対象とした場合、追加するコードは以下のようになります:1 2 3 4
# my custom enabled Segmented Caching code if (req.url.ext == "ts") { set req.enable_segmented_caching = true; }
このコードでは拡張子が
ts
のファイルを対象としてセグメントキャッシュを有効化します。 - Create をクリックして下さい。
- Activate ボタンをクリックしてサービスをデプロイします。