サロゲートキーの操作

サロゲートキーは、処理目的でコンテンツのグループに割り当てる固有の識別子です。サロゲートキーのユースケースは多数ありますが、Fastly で使用する場合の主な活用方法の1つが、パージをより効率的に行うことです。

サロゲートキーにより、関連するコンテンツを選択的にパージすることができます。Surrogate-Key ヘッダーを使い、コンテンツに任意の文字列から成るキータームをタグ付けできます。あるキーに関連するすべてのレスポンスをパージしたい場合は、キーによるパージリクエストを送信すると、そのキーに関連するすべてのオブジェクトがパージされます。このプロセスにより、急速に予測不可能に変化するコンテンツのキャッシュとパージが容易になり、キャッシュ全体をパージする必要がなくなります。

設定作業の前に

このガイドは、一般的なコンテンツ配信ネットワーク (CDN) の仕組みと、特に Fastly の CDN の仕組みについて、すでに理解していることを前提としています。また、HTTP リクエストとレスポンスへのヘッダーの追加に関するガイドを確認することをお勧めします。

Surrogate-Keyヘッダーの理解

サロゲートキーの仕組みを理解するには、特にコンテンツパージのコンテキストで、サロゲートキーヘッダーとは何か、それがどのように動作するかを理解する必要があります。

Surrogate-Keyヘッダーについて

オリジンがコンテンツに対するリクエストに応答するたびに、それが送信するレスポンスは、レスポンスの実際の本文の前にヘッダーと呼ばれるコードのビットが含まれます。これらのヘッダーは、追加情報を記載し、レスポンス自体のボディにコンテキストを提供するために使用されます。レスポンスの一部として送信された HTTP ヘッダーは、通常以下のようになります。

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

サーバーが対応するヘッダーを追加または変更して追加情報をコントロールすることで、コンテンツの配信方法をコントロールできます。Surrogate-Keyヘッダーはその1つです。これは、特定のグループの一部としてコンテンツを分類または「タグ」するものです。選択するタグはキーと呼ばれ、コンテンツグループ共有の各要素に共通の特性について説明します。

例えば、タコスのレシピを公開する Web サイトを運営していると仮定します。レシピのカテゴリー全体をパージする必要がある場合、パージするレシピカテゴリーを Surrogate-Key ヘッダーにキーとして含めることができます。サーバーが送信するレスポンスは、以下のようになります。

1
2
3
4
HTTP/1.1 200 OK
Surrogate-Key: veggie seasonal central-mexico
Content-Type: text/html
...

サロゲートヘッダーの追加により、コンテンツに、将来の使用のために分類された特定の識別子がタグ付けされていることが分かります。このレスポンスには veggieseasonalcentral-mexico の3つのサロゲートキーが含まれています。Fastly はこのようなレスポンスを受信すると、サロゲートキーを使用して各キーからキャッシュされたコンテンツへのマッピングを作成し、読者へのレスポンスに含まれないように Surrogate-Key ヘッダーを除去します。

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

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

1
2
3
4
5
6
GET /blog/healthy-taco-recipes HTTP/1.1
Host: www.tacolabs.com

HTTP/1.1 200 OK Content-Type: text/html
Content-Length: 1234
Surrogate-Key: mainpage low-carb
1
2
3
4
5
6
7
GET /recipes/low-carb-cheese-taco-shell HTTP/1.1
Host: www.tacolabs.com

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 2345
Surrogate-Key: low-carb cheese

この例では、3つのキー (mainpagelow-carbcheese) を持つ2つのオブジェクト (/blog/healthy-taco-recipes/recipes/low-carb-cheese-taco-shell) があります。2つのキー (mainpage および cheese) は1つのオブジェクトに関連付けられ、3つ目のキー (low-carb) は両方のオブジェクトに関連付けられています。

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

2つの異なるコンテンツが関係している場合、サロゲートキーを使用してそれらを分類しておくと便利な場合があります。

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

Surrogate-Key ヘッダーを設定するには、Fastly コントロールパネルでヘッダーを追加する方法と、独自のアプリケーションでキーを生成する方法の2つがあります。独自のアプリケーションサーバーでサロゲートキーの関連付けを行い、Fastly に送信する HTTP レスポンスに含めることができます。すべてのレスポンスに必要なキーを正確に割り当てることができるため、これはより便利な方法です。

ただし、Fastly コントロールパネルで Surrogate-Key ヘッダーを設定したい場合は、以下の手順に従ってください。

  1. Fastly コントロールパネルにログインします。
  2. Home ページから、適切なサービスを選択します。検索ボックスを使用すると、ID、名称、ドメインでの検索が行えます。
  3. Edit configuration ボタンをクリックし、アクティブなバージョンをクローンするオプションを選択します。ドメインページが表示されます。
  4. Content をクリックします。Content ページが表示されます。
  5. Create header ボタンをクリックします。Create a header ページが表示されます。

    Header ページ

  6. 以下の要領で Create a header ページの各フィールドに入力します。
    • Name フィールドに分かりやすいヘッダー名を入力します。この名前は Fastly コントロールパネルに表示されます。
    • Type メニューから Cache を選択し、Action メニューから Set を選択します。
    • Destination フィールドに http.Surrogate-Key と入力します。
    • Source フィールドに、そのヘッダーに設定されるコンテンツのソースの値を入力します。
    • Ignore if set メニューから No を選択します。
    • Priority フィールドに 10 を入力します。
  7. Create ボタンをクリックすると、ヘッダーが作成されます。
  8. Activate ボタンをクリックして設定変更をデプロイします。

トラブルシューティング

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

制約事項

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

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

今後の予定

Surrogate-Keyヘッダーの仕組みと設定方法理解できたので、サロゲートキーでオブジェクトをパージする方法をご覧ください。

Back to Top