Está a ver a documentação do Apigee e do Apigee Hybrid.
Ver documentação do
Apigee Edge.
O Apigee permite configurar o número de pedidos permitidos a um proxy de API durante um período específico através da política de quotas.
Antipattern
Um pedido de proxy de API pode ser publicado por um ou mais componentes do Apigee distribuídos denominados Processadores de mensagens. Se existirem vários processadores de mensagens configurados para publicar pedidos da API, é provável que a quota seja excedida, uma vez que cada processador de mensagens mantém a sua própria "contagem" dos pedidos que processa.
Vamos explicar isto com a ajuda de um exemplo. Considere a seguinte política de quotas 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 deve permitir um total de 100 pedidos por hora.
No entanto, na prática, quando vários processadores de mensagens estão a publicar os pedidos da API, acontece o seguinte:
Na ilustração acima:
- A política de quotas está configurada para permitir 100 pedidos por hora.
- Os pedidos ao proxy de API estão a ser publicados por dois processadores de mensagens.
- Cada processador de mensagens mantém a sua própria variável de contagem de quota,
quota_count_mp1
equota_count_mp2
, para acompanhar o número de pedidos que está a processar. - Por conseguinte, cada processador de mensagens permite 100 pedidos de API separadamente. O efeito líquido é que são processados um total de 200 pedidos em vez de 100.
Impacto
Esta situação anula o objetivo da configuração de quotas e pode ter efeitos prejudiciais nos servidores de back-end que estão a publicar os pedidos.
Os servidores de back-end podem:
- Estar sobrecarregado devido ao tráfego recebido superior ao esperado
- Deixar de responder a pedidos de API mais recentes, o que gera erros 503
Prática recomendada
Considere definir o elemento <Distributed>
como true
na política de quotas para garantir que é usado um contador comum para acompanhar os pedidos de API em todos os processadores de mensagens.
O elemento <Distributed>
pode ser definido conforme mostrado no fragmento do código abaixo:
<!-- /antipatterns/examples/1-7.xml --> <Quota name="CheckTrafficQuota"> <Interval>1</Interval> <TimeUnit>hour</TimeUnit> <Distributed>true</Distributed> <Allow count="100"/> </Quota>