Antipatrón: Configura cuotas no distribuidas

Estás viendo la documentación de Apigee y Apigee Hybrid.
Consulta la documentación de Apigee Edge.

Apigee proporciona la capacidad de configurar la cantidad de solicitudes permitidas para un proxy de API durante un período específico mediante la política de cuotas.

Antipatrón

Uno o más de los componentes distribuidos de Apigee llamados Message Processor pueden entregar una solicitud de proxy de API. Si hay varios Message Processor configurados para la entrega de solicitudes a la API, probablemente se excederá la cuota, ya que cada Message Processor mantiene su propio “recuento” de las solicitudes que procesa.

Explicaremos esto con un ejemplo. Considera la siguiente política de cuotas para un proxy de API:

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

La configuración anterior permite una cantidad total de 100 solicitudes por hora.

Sin embargo, en la práctica, cuando varios Message Processor entregan las solicitudes a la API, sucede lo siguiente:

Por definir

En la ilustración anterior se muestra lo siguiente:

  • La política de cuotas se configuró para permitir 100 solicitudes por hora.
  • Las solicitudes al proxy de API las entregan dos Message Processor.
  • Cada Message Processor mantiene su propia variable de recuento de cuota, quota_count_mp1 y quota_count_mp2, a fin de llevar un registro de la cantidad de solicitudes que procesan.
  • Por lo tanto, cada uno de los Message Processor permite 100 solicitudes a la API de forma independiente. El efecto neto es que se procesa un total de 200 solicitudes en vez de 100.

Impacto

Esta situación interrumpe el propósito de la configuración de la cuota y puede tener efectos perjudiciales en los servidores de backend que entregan las solicitudes.

Lo siguiente puede sucederles a los servidores de backend:

  • Estar sobrecargados debido a un tráfico entrante más alto que el esperado
  • No responder a solicitudes a la API más recientes, lo que causa errores 503

Práctica recomendada

Considera configurar el elemento <Distributed> en true en la política de cuotas, a fin de garantizar que se use un contador común para llevar el registro de las solicitudes a la API en todos los Message Processor. El elemento <Distributed> se puede configurar como se muestra en el siguiente fragmento de código:

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