views4GCPのストレージサービスについてまとめてみた。Exp:543システム開発部所属。バックエンドの開発を主に担当しています。Apigeeを勉強中です。TweetShareHatenaAPIを運用するにあたっては乗り越えなければならないさまざまな課題がありますが、その中の一つにトラフィック管理があります。トラフィック管理とは、想定以上のHTTPリクエストを受信することでAPIサービスのシステムダウンやレスポンス遅延が発生しないように、リクエスト数を制限するしくみのことです。Apigeeにはトラフィック管理を実現するためのポリシーがいくつも用意されていて、トラフィック管理機能をお手軽に実装することができます。本記事では、Apigeeに用意されている3つのトラフィック管理ポリシーについて紹介し、実際の動作を確認します。Apigeeの概要についてはコチラをご覧ください。今回ご紹介するApigeeのトラフィック管理ポリシーは以下の3つです。各ポリシーの使用目的と機能について以下に説明していきます。トラフィック管理ポリシーには他にキャッシュ機能を実現するためのポリシーがありますが、本記事では割愛します。キャッシュ関連のポリシーについてはコチラの記事をご覧ください。ポリシーの目的は、悪意のある攻撃者によるDOS攻撃や、アプリケーションのバグ等による予期しないトラフィックの急上昇(スパイク)からバックエンドサービスを保護することです。具体的には、バックエンドサービスに送信される単位時間あたりのリクエスト数を制限します。「1秒間あたりのリクエスト数」もしくは「1分間あたりのリクエスト数」を指定することにより制限します。ポリシーは、APIの使用制限などの業務要件やSLAの適用を実現します。プロキシが一定の期間内に処理できるリクエスト数を構成します。期間の指定は(数値+単位)の形式で記述します。いずれかを指定します。ポリシーの目的は、バックエンドサービスへの同時接続数を制限することです。プロキシとバックエンドサービス間の接続において許可する同時接続数を指定することにより制限します。上記3つのポリシーは、使用目的が異なるため組み合わせて使用することが可能です。2.トラフィック管理ポリシーを試してみる各ポリシーの概要がつかめたところで、トラフィック管理ポリシーを実際に動作させてみましょう。Proxyに先ほどご紹介した3つのポリシーを適用します。各ポリシーの適用先は、マニュアルの記載に従って推奨されるFlowに適用することで、悩まずに実装することができます。今回の適用イメージは下図のようになります。Proxyを新たに作成します。右端の「+Proxy」をクリックします。選択されている状態で「Next」をクリックします。「Traffic-Example」と入力しています。APIにはバックエンドAPIのURLを入力します。ここでは国立国会図書館サーチAPI(https://iss.ndl.go.jp/api/)を設定しています。これは国立国会図書館が提供しているサービスで、APIで所蔵資料の検索ができるものです。入力したら「Next」をクリックします。(none)」を選択し、「Next」をクリックします。全てチェックされている状態で「Next」をクリックします。Deploy」をクリックします。ポリシーを実装します。DEVELOPタブをクリックします。EndpointsのPreFlowを選択した状態で、画面中央部分のREQUEST側(上側)の「+Step」をクリックします。デフォルトのまま「Add」をクリックします。ポリシーのXMLを編集し、Rate要素を「2pm」に設定します。これは、1分あたりのリクエスト数を2リクエストに制限することを意味します。その他不要な項目は削除します。「Save」をクリックして設定を保存します。ProxyEndpointのXMLを確認してみましょう。ポリシーのStepが追加されています。ポリシーの動作を確認します。Proxyの通信状況を表示することができます。Sesstion」をクリックします。ProxyにHTTPリクエストを送信します。上記はタイトルに”gafam”を含む資料を検索するためのGETリクエストです。ポリシー制限が適用され、ステータスコード429が返りました。ポリシーの実装では、Rate要素を「2pm」に設定したので3回目のリクエストから制限されると考えるのが普通ですが、これにはApigeeのメッセージプロセッサ数(以降MP数)が関係しています。デフォルトの動作では、Rate×MP数までリクエスト数が許容されます。クラウド環境のデフォルトMP数は2です。従って、4回までのリクエストが許容される実装となっています。ポリシーの動作が確認できたので、次のポリシー実装に備えて制限値を拡張しておきましょう。ポリシーのXMLを編集し、Rate要素を「200pm」に変更して保存しておきます。ポリシーを実装します。Proxyに認証系のポリシーを実装している場合、その後に実装します。ポリシーの後に実装することになります。EndpointsのPreFlowを選択した状態で、画面中央部分のREQUEST側(上側)の「+Step」をクリックします。デフォルトのまま「Add」をクリックします。ポリシーのXMLを編集し、Allow要素のcountを「2」、Interval要素を「1」、TimeUnit要素を「minute」に設定します。これは、1分あたりのリクエスト数を2リクエストに制限することを意味します。メッセージプロセッサ間でカウンタを共有させるためにDistributed要素及びSynchronous要素を「true」に設定します。設定値を確認したら「Save」をクリックして設定を保存します。ProxyEndpointのXMLを確認してみましょう。ポリシーのStepが追加されています。ProxyにHTTPリクエストを送信します。ポリシー制限が適用され、ステータスコード429が返りました。ポリシーの動作が確認できたので、次のポリシー実装に備えて制限値を拡張しておきましょう。ポリシーのXMLを編集し、Allow要素のcountを「200」に変更して保存しておきます。ポリシーを実装します。ResponseのPostFlowに実装します。併せてDefaultFaultRuleを追加する必要があります。EndpointsのPreFlowを選択した状態で、画面中央部分のREQUEST側(上側)の「+Step」をクリックします。デフォルトのまま「Add」をクリックします。ポリシーのXMLを編集し、AllowConnections要素のcountを「1」に設定します。これは、バックエンドへの同時接続数を1つに制限することを意味します。TargetIdentifier要素のnameを「default」に設定します。Endpointのname属性の値です。設定値を確認したら「Save」をクリックして設定を保存します。TargetEndpointのXMLを確認してみましょう。ポリシーのStepが追加されています。ポリシーのStepが自動追加され、DefaultFaultRuleも自動追加されていることが確認できます。ProxyにHTTPリクエストを送信します。Proxyに対して同時に送信しました。ポリシー制限が適用され、ステータスコード503が返りました。3.まとめいかがだったでしょうか。Apigeeのトラフィック管理ポリシーを使うことで、短時間で簡単にトラフィック制御を実装することができました。最後に、今回取り上げたトラフィック管理ポリシーを表にまとめておきますのでポリシー検討時の参考にして下さい。