Антипаттерн: настройка нераспределенной квоты

Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee
X.info

Apigee Edge предоставляет возможность настраивать количество разрешенных запросов к API-прокси на определенный период времени с помощью политики квот .

Антипаттерн

Запрос к API-прокси может обрабатываться одним или несколькими распределенными компонентами Edge, называемыми обработчиками сообщений . Если для обработки запросов к API настроено несколько обработчиков сообщений, то квота, скорее всего, будет превышена, поскольку каждый обработчик сообщений ведет свой собственный "счетчик" обрабатываемых запросов.

Давайте объясним это на примере. Рассмотрим следующую политику квот для API-прокси:

<!-- /antipatterns/examples/1-6.xml -->
<Quota name="CheckTrafficQuota">
  <Interval>1</Interval>
  <TimeUnit>hour</TimeUnit>
  <Allow count="100"/>
</Quota>

Приведенная выше конфигурация должна обеспечивать обработку в общей сложности 100 запросов в час.

Однако на практике, когда несколько обработчиков сообщений обрабатывают запросы к API, происходит следующее:

На приведенной выше иллюстрации:

  • Политика квотирования настроена таким образом, чтобы разрешать 100 запросов в час.
  • Запросы к API-прокси обрабатываются двумя обработчиками сообщений.
  • Каждый обработчик сообщений поддерживает собственные переменные количества квот, quota_count_mp1 и quota_count_mp2 , для отслеживания числа обрабатываемых запросов.
  • Таким образом, каждый обработчик сообщений будет обрабатывать 100 API-запросов отдельно. В итоге будет обработано в общей сложности 200 запросов вместо 100.

Влияние

Такая ситуация сводит на нет цель настройки квот и может оказать негативное воздействие на серверы, обрабатывающие запросы.

Серверная часть может:

  • Следует опасаться увеличения входящего трафика из-за более высокого, чем ожидалось, уровня.
  • Более новые API-запросы перестают отвечать, что приводит к ошибкам 503.

Передовая практика

Рекомендуется установить значение элемента <Distributed> в политике квот в true , чтобы обеспечить использование общего счетчика для отслеживания запросов API во всех обработчиках сообщений. Значение элемента <Distributed> можно установить, как показано в приведенном ниже фрагменте кода:

<!-- /antipatterns/examples/1-7.xml -->
<Quota name="CheckTrafficQuota">
  <Interval>1</Interval>
  <TimeUnit>hour</TimeUnit>
  <Distributed>true</Distributed>
  <Allow count="100"/>
</Quota>