アンチパターン: 分散されていない割り当てを構成する

現在、ApigeeApigee ハイブリッドのドキュメントを表示しています。
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_mp1quota_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>