サロゲートキーの使用方法

効率的なキャッシュの無効化は、Web サイトの高速性を維持するために不可欠です。Purge All 機能を使用してキャッシュをパージしすぎると、キャッシュが再構築されるまでの間、Web サイトの読み込み時間が長くなる可能性があります。週に1回以上、すべてのキャッシュをパージしている場合は、サロゲートキーを使用してよりターゲットを絞ったパージを行うことをお勧めします。

サロゲートキーは、処理目的でコンテンツのグループに割り当てる固有の識別子です。サロゲートキーを使用することで、関連するコンテンツを選択的にパージできます。Surrogate-Keyヘッダーを使い、オブジェクトのグループに任意の文字列であるキータームをタグ付けすれば、そのタームを使用して複数のコンテンツを一度にパージすることが可能です。このプロセスはアプリケーション内で自動的に行われるため、予測不可能で急速に変化するコンテンツのキャッシュやパージが容易になります。

サロゲートキーについて

Fastly に登録して1つ以上のサービスを追加すると、オリジンサーバーがリクエストにどのようにレスポンスするのかについて確認できます。オリジンサーバーが HTTP リクエストに応答してコンテンツを配信した場合、Fastly がまだそのコンテンツをキャッシュしていないか、キャッシュが期限切れになっていることを意味します。リクエストに対するサーバーのレスポンスは、以下の例のようになります。(なお、curl コマンドによって、サーバーのどのようなレスポンスでも検査することが可能です)。

1
2
3
4
HTTP/1.1 200 OK
Content-Type: text/html
Connection: keep-alive
...

オリジンサーバーのレスポンスに含まれるヘッダーを追加または変更することで、コンテンツがユーザーに配信され、Fastly によってキャッシュされるプロセスをコントロールすることができます。Surrogate-Keyヘッダーは、レスポンスに追加できるヘッダーのひとつです。画像やブログ記事などのオブジェクトに、1つまたは複数のキーを使用して「タグを付ける」ことができます。オブジェクトが変更されると、パージリクエストでそのキーを参照し、キャッシュからオブジェクトを削除できます。

以下のように、スペースで区切られた文字列を Surrogate-Key ヘッダーに追加できます。

1
2
3
4
HTTP/1.1 200 OK
Surrogate-Key: key1 key2 key3
Content-Type: text/html
...

このレスポンスには key1key2key3 の3つのサロゲートキーが含まれています。Fastly はこのようなレスポンスを受信すると、サロゲートキーを使用して各キーからキャッシュされたコンテンツへのマッピングを作成し、読者へのレスポンスに含まれないように Surrogate-Key ヘッダーを除去します。

キーとオブジェクトの関係構築

サロゲートキーの大きなメリットのひとつは、キーとオブジェクトの間に多対多の関係を構築できることです。オリジンサーバーのレスポンスでは、複数のキーをオブジェクトに関連付けることができ、同じキーを異なるレスポンスで提供することができます。以下の2つのリクエストとレスポンスをご覧ください。

1
2
3
4
5
6
GET /blog/ HTTP/1.1
Host: www.example.com

HTTP/1.1 200 OK Content-Type: text/html
Content-Length: 1234
Surrogate-Key: mainpage template-a
1
2
3
4
5
6
7
GET /blog/article/fastly-rocks HTTP/1.1
Host: www.example.com

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 2345
Surrogate-Key: template-a article-fastly-rocks

この例では、3つのキー (mainpagetemplate-aarticle-fastly-rocks) を持つ2つのオブジェクト (/blog/blog/article/fastly-rocks) があります。2つのキー (mainpage および article-fastly-rocks) は1つのオブジェクトに関連付けられ、3つ目のキー (template-a) は両方のオブジェクトに関連付けられています。

サロゲートキーでオブジェクトをパージする

Surrogate-Key ヘッダーを使用してキーを1つまたは複数のオブジェクトに関連付けることで、パージの際にキャッシュから削除されるオブジェクトを正確にコントロールできます。上記の例を見てみましょう。mainpage キーをパージすると、キャッシュから /blog オブジェクトのみが削除されます。一方、template-aキーをパージすると、/blog/blog/article/fastly-rocks の両方のオブジェクトがキャッシュから削除されます。

Fastly コントロールパネルを使用して、キーを用いてオブジェクトを手動でパージすることもできますし、パージ APIを使用することも可能です。Fastly を使用して API をキャッシュしている場合は、サロゲートキーによる API キャッシュのパージに関するガイドをチェックして、サロゲートキーの活用方法をご確認ください。

サロゲートキーの生成と設定

Surrogate-Key ヘッダーを設定するには、Fastly コントロールパネルでヘッダーを追加する方法と、独自のアプリケーションでキーを生成する方法の2つがあります。Fastly コントロールパネルの使用方法については、URL に基づいてサロゲートキーヘッダーを生成するためのガイドをご参照ください (Amazon S3 オリジンについては別のガイドがあります)。

ただし、独自のアプリケーションサーバーでサロゲートキーの関連付けを行い、Fastly に送信する HTTP レスポンスに含める方が便利です。そうすることで、すべてのレスポンスに必要なキーを正確に割り当てることができます。

トラブルシューティング

URL のサロゲートキーは、Fastly-Debug: 1 ヘッダーを使用して確認できます。詳細は、Fastly のデバッグヘッダーを curl コマンドで使用する方法についての説明をご参照ください。

制約事項

オリジンサーバーから送信されるサロゲートキーは、形式の制約に従いながら必要に応じて単純にすることも複雑にすることもできます。サロゲートキーには、スペースを含まない単一の文字列の形式を使用する必要があります。スペースはキーを分けることになります。

サロゲートキーにはサイズ制限があります。個々のサロゲートキーの長さは最大1,024バイトで、Surrogate-Key(スペースで区切られた1つまたは複数のキーからなる) ヘッダー値の長さは最大16,384バイトです。ヘッダーが解析される際にキーまたはキーヘッダーの値が制限に達している場合、Surrogate-Key解析中のキーとそれに続く同じヘッダー内のすべてのキーは無視されます。

Back to Top