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

Você está vendo a documentação do Apigee Edge.
Acesse a documentação da Apigee X.
informações

O Apigee Edge oferece a capacidade de configurar o número de solicitações permitidas em 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 veiculada por um ou mais componentes distribuídos do Edge, 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, porque cada processador de mensagens mantém uma "contagem" própria das solicitações processadas.

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:

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>