クラウド同上

続・Apigeeでお手軽にトラフィック制御を実装しよう!(キャッシュ編)

Author
kurata
Lv:2 Exp:543

システム開発部所属。バックエンドの開発を主に担当しています。
Apigeeを勉強中です。

前回の記事では、Apigeeのトラフィック管理ポリシーの中から、トラフィック制御を司る3つのポリシーについて、機能の紹介と動作確認を行いました。今回は前回の記事で割愛したキャッシュ関連のポリシーを紹介します。キャッシュ関連ポリシーを利用すれば、Apigeeにキャッシュサーバー機能をお手軽に実装することができます。キャッシュサーバーの導入を検討されている運用管理者の方々は検討材料としてもしくは検証ツールとして活用できると思います。前回と同様に、実際にポリシーを実装して動作を確認するところまで行いますので、皆さんも試してみてください。

1.Apigeeのキャッシュには2種類ある

Apigeeのキャッシュ機能では2種類のキャッシュを扱います。1つは、バックエンドのレスポンスデータを保持するためのキャッシュです。これは一般的なキャッシュサーバーのキャッシュと同様にWebサーバーのレスポンスデータを丸ごと一定期間保持します。もう一つは、リクエストデータもしくはレスポンスデータの一部の文字列を保持するためのキャッシュで、汎用キャッシュと呼ばれます。

1-1.レスポンスキャッシュはレスポンスを丸ごとキャッシュ

ResponseCache ポリシーを使用するとバックエンドのレスポンスデータ全体をキャッシュに保持することができます。これにより、バックエンドへの負荷及びネットワークトラフィックの低減とレスポンス性能の向上を実現することができます。ResponseCache ポリシーの定義において、キャッシュキーと呼ばれるキャッシュデータの識別子を指定することができます。キャッシュキーに利用者の識別子を埋め込むことで、利用者毎にキャッシュを保持することも可能です。

1-2.汎用キャッシュは特定データをキャッシュ

汎用キャッシュには、リクエストデータやバックエンドレスポンスデータに含まれる文字列の一部を保持することができます。キャッシュされたデータは複数のリクエストをまたがって利用することができます。汎用キャッシュを制御するためのポリシーとして、以下の3つのポリシーが用意されています。

汎用キャッシュポリシー 機能
PopulateCache ポリシー データを汎用キャッシュに書き込む。
LookupCache ポリシー 汎用キャッシュからデータを読み出す。
InvalidateCache ポリシー 汎用キャッシュのデータを破棄する。

2.キャッシュポリシーを実装する

それではキャッシュポリシーをApigeeに実装し、実際にキャッシュ動作を確認しましょう。1つのAPIProxyに対してレスポンスキャッシュと汎用キャッシュの両機能を実装します。適用イメージは下図のようになります。AssignMessageポリシーはリクエストメッセージやレスポンスメッセージを書き換えることができるもので、今回は汎用キャッシュから読み出したデータをレスポンスメッセージに付加するために使用します。

2-1.API Proxyを作成する

まずはAPI Proxyを新たに作成します。
Apigee Edgeにログインし、左側のメニューで [Develop] – [API Proxies] を選択します。

そして、右端の「+Proxy」をクリックします。


Reverse proxy が選択されている状態で「Next」をクリックします。


Proxy Name に「Cache-Example」と入力しています。Existing APIにはバックエンドAPIのURLを入力します。ここではApigeeの疑似ターゲットAPI(http://mocktarget.apigee.net)を設定しています。疑似ターゲットAPIはApigeeが提供しているRESTful API で、APIProxy作成時にバックエンドサービスの代わりとして利用できます。入力したら「Next」をクリックします。


Authorization は「Pass through (none)」を選択し、「Next」をクリックします。


全てチェックされている状態で「Next」をクリックします。


Deploy Environments の test が選択されている状態で「Build and Deploy」をクリックします。


API Proxy が作成できました。「Exit」をクリックします。

2-2.レスポンスキャッシュ機能を実装する

続いて、レスポンスキャッシュ機能を実装しましょう。まずは先程作成したAPIProxy「Cache-Example」にResponseCache ポリシーを実装します。
API Proxy の一覧にて、「Cache-Example」 を選択し、画面が開いたらDEVELOPタブをクリックします。


ResponseCache ポリシーを、Proxy Endpoint のRequestのPreFlow に実装します。画面左側のNavigatorにてProxy EndpointsのPreFlowを選択した状態で、画面中央部分のREQUEST側(上側)の「+Step」をクリックします。


Add Step ダイアログで、「Response Cache」ポリシーを選択し、Display Name とNameとTargetEndpoint はデフォルトのまま「Add」をクリックします。


ResponseCache ポリシーのXMLを編集し、TimeoutInSec要素を「300」に設定します。これはキャッシュの有効期限が5分であることを意味します。「Save」をクリックして設定を保存します。


ProxyEndpointのXMLを確認してみましょう。PreFlowのRequest にResponseCache ポリシーのStepが追加されています。


TargetEndpointのXMLを確認してみましょう。PostFlowのResponse にResponseCache ポリシーのStepが追加されていることがわかります。これはProxyEndpointにResponseCacheポリシーを追加した際にTargetEndpointにも自動的に追加されたものです。

2-3.レスポンスキャッシュの動作を確認する

レスポンスキャッシュの動作を確認していきましょう。
ApigeeのTRACE機能を使ってAPI Proxyの動作状況を確認できます。


TRACEタブをクリックした後、「Start Trace Sesstion」をクリックします。


API Proxyに下記のGETリクエストを送信します。
URL:http://kurata-eval-test.apigee.net/cache-example/iloveapis


もう一度同じリクエストを送信します。


1回目のトレースと2回目のトレースを比較してみてください。
1回目はバックエンドサービスにリクエストが送られ、レスポンスデータがキャッシュに保存されました。
2回目は1回目に保存したキャッシュがヒットしたためバックエンドサービスへ送信することなく、キャッシュデータをクライアントへ送信しています。また、ターンアラウンドタイムも87msから51msに短くなっています。
バックエンドレスポンスのキャッシュ動作が確認できました。


次のポリシー実装に備えてResponseCache ポリシーを無効にしておきましょう。ResposeCache ポリシーのXMLを編集し、タグの属性をenable=”false”に変更して保存しておきます。

2-4.汎用キャッシュ機能を実装する

続いて、汎用キャッシュ機能を実装しましょう。実装内容は以下の通りです。
(1)LookupCache ポリシーを使って汎用キャッシュから値を読み出す。
(2)PopulateCache ポリシーを使ってリクエストのクエリーパラメタの値を汎用キャッシュに保存する。
(3)AssignMessage ポリシーを使って上記(1)で読み出した値(前回のリクエストパラメタの値)と今回のリクエストのクエリーパラメタの値をレスポンスBodyに付加する。
(4)上記クエリーパラメータの名前は「param1」とする。


まずはLookupCache ポリシーを、Proxy Endpoint のRequestのPreFlow に実装します。画面左側のNavigatorにてProxy EndpointsのPreFlowを選択した状態で、画面中央部分のREQUEST側(上側)の「+Step」をクリックします。


Add Step ダイアログで、「Lookup Cache」ポリシーを選択し、Display Name とNameはデフォルトのまま「Add」をクリックします。


LookupCache ポリシーのXMLを下記の手順に従って編集します。
手順1)KeyFragment要素に「keyparam1」を設定します。これはキャッシュデータの識別子となります。
手順2)AssignTo要素に「valueparam1」を設定します。汎用キャッシュから読み出したデータはvalueparam1という変数に入ります。
手順3)キャッシュ領域として共有キャッシュを使用するために、CacheResourceタグを削除します。
手順4)編集が完了したら「Save」をクリックして設定を保存します。


ProxyEndpointのXMLを確認してみましょう。PreFlowのRequest にLookupCache ポリシーのStepが追加されています。


続いてPopulateCache ポリシーを、Proxy Endpoint のResponseのPreFlow に実装します。画面左側のNavigatorにてProxy EndpointsのPreFlowを選択した状態で、画面中央部分のRESPONSE側(下側)の「+Step」をクリックします。


Add Step ダイアログで、「Populate Cache」ポリシーを選択し、Display Name とNameはデフォルトのまま「Add」をクリックします。


PopulateCache ポリシーのXMLを下記の手順に従って編集します。
手順1)KeyFragment要素に「keyparam1」を設定します。これはキャッシュデータの識別子となります。
手順2)TimeoutInSec要素に「30」を設定します。これは汎用キャッシュの有効期限が30秒であることを意味します。
手順3)Source要素に「request.queryparam.param1」を設定します。これはリクエストのクエリーパラメタ「param1」の値がキャッシュされることを意味します。
手順4)キャッシュ領域として共有キャッシュを使用するために、CacheResourceタグを削除します。
手順5)編集が完了したら「Save」をクリックして設定を保存します。


ProxyEndpointのXMLを確認してみましょう。PreFlowのResponse にPopulateCache ポリシーのStepが追加されています。


続いてAssginMessage ポリシーを、Proxy Endpoint のResponseのPostFlow に実装します。画面左側のNavigatorにてProxy EndpointsのPostFlowを選択した状態で、画面中央部分のRESPONSE側(下側)の「+Step」をクリックします。


Add Step ダイアログで、「Assign Message」ポリシーを選択し、Display Name とNameはデフォルトのまま「Add」をクリックします。


AssignMessage ポリシーのXMLを下記の様に編集します。

<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
    <DisplayName>Assign Message-1</DisplayName>
    <Set>
        <Payload contentType="text/html">
            {response.content}
            lastparam1=[{valueparam1}]
            currenetparam1=[{request.queryparam.param1}]
        </Payload>
    </Set>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

前回リクエストのパラメタ値(valueparam1)と今回リクエストのパラメタ値をレスポンスのBodyに付加しています。編集が完了したら「Save」をクリックして設定を保存します。


ProxyEndpointのXMLを確認してみましょう。PostFlowのResponse にAssignMessage ポリシーのStepが追加されています。

2-5.汎用キャッシュの動作を確認する

汎用キャッシュの動作を確認していきましょう。


WebブラウザからAPI Proxyに下記のGETリクエストを送信します。
URL:http://kurata-eval-test.apigee.net/cache-example/iloveapis?param1=aaa
1回目ですので前回のパラメタ値はキャッシュされていないため表示されません。
汎用キャッシュの有効期限が切れる前(30秒以内)に下記のGETリクエストを送信します。
URL:http://kurata-eval-test.apigee.net/cache-example/iloveapis?param1=bbb


汎用キャッシュに保持されていた前回リクエストのパラメタの値が表示されました。

3.まとめ

いかがだったでしょうか。バックエンドレスポンスキャッシュと汎用キャッシュの基本機能を実装方法と共にご紹介しました。最後に、今回取り上げたキャッシュ関連ポリシーを表にまとめておきますのでポリシー検討時の参考にして下さい。

ポリシー 種類 機能 API Proxy
への配置
ResponseCache バックエンド
レスポンス
キャッシュ
バックエンド
レスポンス
キャッシュの制御
(1)ProxyEndpoint
/Request
/PreFlow
(2)TargetEndpoint
/Response
/PostFlow
PopulateCache 汎用キャッシュ キャッシュ書込み 任意
LookupCache 汎用キャッシュ キャッシュ読出し 任意
InvalidateCache 汎用キャッシュ キャッシュ破棄 任意
次の記事を読み込んでいます
次の記事を読み込んでいます
次の記事を読み込んでいます