Antipadrão: configurar uma cota não distribuída

Esta é a documentação da Apigee e da Apigee híbrida.
Confira a documentação da Apigee Edge.

A Apigee fornece a capacidade de configurar o número de solicitações permitidas para um proxy de API por um período específico usando a política de cotas.

Antipadrão

Uma solicitação de proxy de API pode ser atendida por um ou mais componentes distribuídos da Apigee, chamados de processadores de mensagens. Se houver vários processadores de mensagens configurados para atender a solicitações de API, a cota provavelmente será excedida, já que cada processador de mensagens mantém uma "contagem" das solicitações processadas própria.

Vamos explicar isso com a ajuda de um exemplo. Considere a seguinte política de cotas para um proxy de API:

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

A configuração acima permite um total de 100 solicitações por hora.

No entanto, na prática, quando vários processadores de mensagens atendem às solicitações da API, acontece a situação a seguir:

A definir

Na ilustração acima:

  • A política de cotas está configurada para permitir 100 solicitações por hora.
  • As solicitações para o proxy de API estão sendo atendidas por dois processadores de mensagens.
  • Cada processador de mensagens mantém uma variável própria de contagem de cota, quota_count_mp1 e quota_count_mp2, para rastrear o número de solicitações que está sendo processado.
  • Portanto, cada processador de mensagens permitirá 100 solicitações de API separadamente. O efeito esperado é que um total de 200 solicitações é processado em vez de 100 solicitações.

Impacto

Essa situação esvazia o propósito da configuração da cota e pode afetar negativamente os servidores de back-end que atendem às solicitações.

Os servidores de back-end podem:

  • ficar sobrecarregados devido ao tráfego de entrada maior que o esperado;
  • não responder a solicitações de API mais recentes, o que causa erros 503.

Prática recomendada

Considere definir o elemento <Distributed> como true na política de cotas para garantir que um contador comum seja usado no rastreamento das solicitações de API em todos os processadores de mensagens. O elemento <Distributed> pode ser definido conforme mostrado no snippet de código abaixo:

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