現在、Apigee と Apigee ハイブリッドのドキュメントを表示しています。
Apigee Edge のドキュメントはこちらをご覧ください。
Apigee では、割り当てポリシーを使用して、一定時間内に API プロキシへ送信できるリクエスト件数を構成できます。
アンチパターン
API プロキシ リクエストは、Message Processor と呼ばれる 1 つ以上の分散 Apigee コンポーネントによって処理されます。API リクエストを処理するために構成された Message Processor が複数存在する場合は、割り当てが超過する可能性があります。これは、個々の Message Processor がそれぞれ処理するリクエストの「カウント」を保持するためです。
例を挙げて説明します。API プロキシに、次のような 割り当てポリシーがあるとします。
<!-- /antipatterns/examples/1-6.xml --> <Quota name="CheckTrafficQuota"> <Interval>1</Interval> <TimeUnit>hour</TimeUnit> <Allow count="100"/> </Quota>
上の構成では、1 時間に合計 100 件のリクエストが許可されるはずです。
ただし、複数の Message Processor が API リクエストを処理している場合は、次のようになります。
上の図は以下のことを示しています。
- 割り当てポリシーは、1 時間に 100 件のリクエストを許可するように構成されています。
- API プロキシへのリクエストが 2 つの Message Processor によって処理されています。
- それぞれの Message Processor が独自の割り当てカウント変数(
quota_count_mp1
とquota_count_mp2
)を保持し、処理するリクエスト件数を追跡しています。 - そのため、各 Message Processor が 100 件の API リクエストを個別に許可します。つまり、実際には 100 件のリクエストではなく、合計 200 件のリクエストが処理されるということです。
影響
このような状況では、割り当ての構成の目的が損なわれ、リクエストを処理するバックエンド サーバーに悪影響が及ぶ可能性があります。
バックエンド サーバーには次のことが起きる可能性があります。
- 受信トラフィックが想定外に多くなるため負担がかかる
- 新しい API リクエストに応答できず、503 エラーが発生する
ベスト プラクティス
割り当てポリシーで <Distributed>
要素を true
に設定し、すべての Message Processor で共通のカウンタを使用して API リクエスト件数を追跡することを検討してください。<Distributed>
要素は、以下のコード スニペットに示すように設定できます。
<!-- /antipatterns/examples/1-7.xml --> <Quota name="CheckTrafficQuota"> <Interval>1</Interval> <TimeUnit>hour</TimeUnit> <Distributed>true</Distributed> <Allow count="100"/> </Quota>