プロキシ キャッシュ

Kong が優れたパフォーマンスを提供する方法の 1 つに、キャッシュがあります。Proxy Cache プラグインは、設定可能なレスポンス コード、コンテンツ タイプ、およびリクエスト メソッドに基づいてレスポンスをキャッシュすることで、パフォーマンスを向上します。キャッシュが有効な場合、Kong Gateway が代わりにキャッシュされた結果で応答するため、アップストリーム サービスは繰り返しのリクエストに煩わされることがありません。キャッシュは、特定の Kong Gateway オブジェクト、またはグローバルにすべてのリクエストで有効にできます。

Cache TTL (Time To Live)

TTL は、キャッシュされたコンテンツの更新レートを管理し、クライアントが古いコンテンツを取得しないようにするために重要です。TTL を 30 秒に設定すると、30 秒以上前のコンテンツは期限切れと見なされ、その後のリクエストでリフレッシュされます。TTL の設定は、アップストリーム サービスが提供するコンテンツの種類に応じて、調整する必要があります。

Kong Gateway は、RFC-7234 セクション 5.2 に従い、キャッシュ制御されたオペレーションを行います。TTL 設定の詳細は、仕様書と Proxy Cache プラグインのパラメーター リファレンスを参照してください。

キャッシュの有効化

以下のチュートリアルでは、Kong Gateway でプロキシ キャッシュを管理する方法を説明します。

必要なもの

このページは、「Kong 入門」チュートリアルの一部です。チュートリアルは最初から順にお読みになることを推奨します。

ステップ 1 の「Kong を始める」では、ツールに必要なものとローカルの Kong Gateway を実行する手順を説明しています。

ステップ 2 の「サービスとルート」では、チュートリアルで使用するモック サービスをインストールする手順を説明しています。

これらのステップをまだ完了していない場合は、先に完了してください。

グローバル プロキシ キャッシュ

このプラグインをグローバルにインストールすると、Kong Gateway へのすべてのプロキシ リクエストがキャッシュされる可能性があります。

  1. プロキシ キャッシュの有効化

    Kong Gateway には Proxy Cache プラグインがデフォルトでインストールされており、Admin API 上の plugins オブジェクトに POST リクエストを送信することで有効にできます。

    curl -i -X POST http://localhost:8001/plugins \
      --data "name=proxy-cache" \
      --data "config.request_method=GET" \
      --data "config.response_code=200" \
      --data "config.content_type=application/json; charset=utf-8" \
      --data "config.cache_ttl=30" \
      --data "config.strategy=memory"
    

    設定に成功すると、201 レスポンス コードが返されます。

    この Admin API リクエストは、レスポンス コードが 200レスポンスの Content-Type ヘッダーが application/json; charset=utf-8等しいすべての GET リクエストに対して Proxy Cache プラグインを設定します。cache_ttl は、30 秒後に値をフラッシュするよう、プラグインに指示します。

    最後のオプション config.strategy=memory は、キャッシュされたレスポンスのバッキング データ ストアを指定します。strategy の詳細は、Proxy Cache プラグインのパラメーター リファレンスを参照してください。

  2. 検証

    GET リクエストを送信し、返されたヘッダーを調べることで、Proxy Cache プラグインが動作していることを確認できます。この入門ガイドのステップ 2 「サービスとルート」で設定した /mock ルートとサービスが、プロキシ キャッシュの動作を確認するのに役立ちます。

    まず、/mock ルートに最初のリクエストを送信します。Proxy Cache プラグインは、先頭に X-Cache が付いたステータス情報ヘッダーを返すので、grep を使ってその情報をフィルタリングします。

    curl -i -s -XGET http://localhost:8000/mock/requests | grep X-Cache

    最初のリクエストでは、キャッシュされたレスポンスはないはずです。X-Cache-Status: Miss ヘッダーはそのことを示しています。

    X-Cache-Key: c9e1d4c8e5fd8209a5969eb3b0e85bc6
    X-Cache-Status: Miss
    

    最初のリクエストから 30 秒以内に、同じリクエストを送信するコマンドを繰り返すと、キャッシュにヒットしたことを示す Hit がヘッダーに表示されます。

    X-Cache-Key: c9e1d4c8e5fd8209a5969eb3b0e85bc6
    X-Cache-Status: Hit
    

    X-Cache-Status ヘッダーは、以下のキャッシュ結果を返します。

    ステータス 説明
    Miss キャッシュにリソースのエントリが見つからず、アップストリームにプロキシされました。
    Hit キャッシュでリクエストを満たすことができました。
    Refresh リソースはキャッシュで見つかりましたが、Cache-Control の動作、またはハードコードされた cache_ttl のしきい値に達したため、リクエストを満たすことができませんでした。
    Bypass プラグインの設定に基づき、キャッシュからリクエストを満たすことができませんでした。

サービス レベルのプロキシ キャッシュ

Proxy Cache プラグインは、特定のサービスに対して有効にできます。リクエストの内容は上記と同じですが、リクエストはサービス URL に送信されます。

curl -X POST http://localhost:8001/services/example_service/plugins \
   --data "name=proxy-cache" \
   --data "config.request_method=GET" \
   --data "config.response_code=200" \
   --data "config.content_type=application/json; charset=utf-8" \
   --data "config.cache_ttl=30" \
   --data "config.strategy=memory"

ルート レベルのプロキシ キャッシュ

Proxy Cache プラグインは、特定のルートに対して有効にできます。リクエストの内容は上記と同じですが、リクエストはルート URL に送信されます。

curl -X POST http://localhost:8001/routes/example_route/plugins \
   --data "name=proxy-cache" \
   --data "config.request_method=GET" \
   --data "config.response_code=200" \
   --data "config.content_type=application/json; charset=utf-8" \
   --data "config.cache_ttl=30" \
   --data "config.strategy=memory"

コンシューマー レベルのプロキシ キャッシュ

Kong Gateway では、コンシューマーはサービスのユーザーを定義する抽象化です。コンシューマー レベルのプロキシ キャッシュを使用して、コンシューマーごとにレスポンスをキャッシュできます。

  1. コンシューマーの作成

    コンシューマーは、Admin API の consumers オブジェクトを使用して作成されます。

    curl -X POST http://localhost:8001/consumers/ \
      --data username=sasha
    
  2. コンシューマー レベルのキャッシュの有効化
    curl -X POST http://localhost:8001/consumers/sasha/plugins \
       --data "name=proxy-cache" \
       --data "config.request_method=GET" \
       --data "config.response_code=200" \
       --data "config.content_type=application/json; charset=utf-8" \
       --data "config.cache_ttl=30" \
       --data "config.strategy=memory"
    

キャッシュ エンティティの管理

Proxy Cache プラグインは、キャッシュ エンティティを管理するためのエンドポイントをサポートしています。管理者は、Admin API にリクエストを送信することで、キャッシュ エンティティを表示、削除したり、キャッシュ全体を消去できます。

キャッシュ エンティティを取得するには、Admin API の /proxy-cache エンドポイントに、既知のキャッシュ値の X-Cache-Key 値を指定してリクエストを送信します。このリクエストは TTL の期限切れ前に送信する必要があります。そうしないと、キャッシュ エンティティは消去されます。

たとえば、上記のレスポンス ヘッダーを使用して、X-Cache-Keyc9e1d4c8e5fd8209a5969eb3b0e85bc6 を Admin API に渡します。

curl -i http://localhost:8001/proxy-cache/c9e1d4c8e5fd8209a5969eb3b0e85bc6

200 OK レスポンスには、キャッシュ エンティティの完全な詳細が含まれます。

Proxy Cache 固有の Admin API エンドポイントの一覧は、Proxy Cache プラグインのドキュメントを参照してください。


« 前へ
レート制限

次へ »
キー認証