8.2. デフォルトのキャッシング
キャッシュされていないリクエストの場合には、フローは以下のようになります。
- APIcast は、マッチするマッピングルールから使用状況のメトリックを抽出します。
- APIcast は、メトリックおよびアプリケーションのクレデンシャルを 3scale バックエンドサーバーに送信します。
3scale バックエンドサーバーは、以下の処理を実施します。
- アプリケーションキーおよび報告されたメトリックの使用状況が定義された制限内であることを確認する。
- 報告されたメトリックの使用状況を増やすバックグラウンドジョブをキューに入れる。
- リクエストを承認すべきかどうかを APIcast に応答する。
- リクエストが承認されると、リクエストがアップストリームに送信されます。
この場合、3scale バックエンドサーバーが応答するまで、リクエストはアップストリームに到着しません。
一方、デフォルトで有効になっているキャッシングメカニズムを使用した場合には、フローは以下のようになります。
- 3scale バックエンドサーバーへの承認呼び出しが承認された場合、APIcast はその結果をキャッシュに保存します。
- 同じクレデンシャルおよびメトリックが使用される次のリクエストは、3scale バックエンドサーバーに照会する代わりに、キャッシュされたその承認を使用します。
- リクエストが承認されなかった場合、または APIcast がそのクレデンシャルを初めて受け取る場合には、APIcast は上述のように同期した状態で 3scale バックエンドサーバーに呼び出しを行います。
認証がキャッシュされている場合には、APIcast はまずアップストリームに呼び出しを行い、続いて ポストアクション と呼ばれるフェーズで 3scale バックエンドサーバーに呼び出しを行い、次のリクエスト用に承認をキャッシュに保存します。3scale バックエンドサーバーへの呼び出しはリクエスト時に行われる訳ではないので、レイテンシーが生じない点に注意してください。ただし、同じ接続で送信されたリクエストは、ポストアクション フェーズが終了するまで待つ必要があります。
クライアントが キープアライブ を使用していて、1 秒ごとにリクエストを送信するシナリオを考えてみます。アップストリームの応答時間が 100 ミリ秒で 3scale バックエンドサーバーへのレイテンシーが 500 ミリ秒の場合、クライアントは毎回 100 ミリ秒でレスポンスを得ます。アップストリームのレスポンスとレポートの合計は 600 ミリ秒かかります。これにより、次のリクエストを受け取るまでにさらに 400 ミリ秒かかります。
以下の図で、上述のデフォルトのキャッシュ動作を説明します。キャッシュメカニズムの動作は、Caching ポリシー を使用して変更することができます。