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

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

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>