API Manager— Controlando requisições

Aplicando política — Rate Limiting

Guilherme Pereira
4 min readApr 3, 2020

Em nosso último artigo vimos como é simples e rápido governar APIs com MuleSoft e agora nesta série de artigos iremos explorar uma pouco mais sobre algumas políticas do API Manager da MuleSoft.

O API Manager oferece diferentes tipos de políticas out-of-box que podem abranger diversos tipos de aspectos, tais como:

  • Segurança
  • Qualidade de serviço
  • Transformação
  • Solução de problemas

Além das políticas out-of-box fornecidas junto com a plataforma você também pode criar suas próprias políticas customizadas, abrindo assim um leque de possibilidades para a gestão de suas APIs.

Como funcionam as políticas

Todo o gerenciamento é realizado no Anypoint Platform no módulo de API Manager onde usuários com permissões específicas podem gerenciar APIs, aplicar políticas, promover APIs e etc.

Ao aplicar políticas para uma API elas são enviadas através do Anypoint Platform Agent que reside dentro da Mule Runtime e tem uma comunicação ativa com o Anypoint Platform. O Agent faz o download da política, armazena localmente e já aplica a política em tempo real não sendo necessário reiniciar a API.

Todo o processamento da política é realizado de forma local na Runtime e mesmo que a comunicação entre o Anypoint Platform e o Agent seja interrompida a API continua operando e as políticas aplicadas.

Exemplos na prática

Em nosso case explicado no primeiro artigo, temos uma API que retorna informações e tarifas de voos. Esta API consulta sistemas distintos de diferentes cias aéreas, agrega e transforma estas informações para o usuário. Todo este processo pode ser custoso, picos de processamentos para agregar e transformar dados podem ocorrer, limitações na capacidade de processamento e alto tempo de resposta nas pontas também podem interferir no funcionamento do serviço além de outras situações.

Neste novo artigo iremos demonstrar na prática algumas políticas disponíveis no módulo de API Manager da MuleSoft e como elas se encaixam em nosso cenário.

Vamos ver como limitar o tráfego, criar SLA's, aplicar logs para análise de dados da API e melhorar a performance com cache.

Caso não se lembre no final do nosso último artigo aplicamos nossa primeira política de segurança garantindo que somente aplicações previamente autorizadas tenham acesso a API. Agora vamos evoluir em nossa gestão aplicando outras políticas e melhorando a governança de nossa API.

Controlando a quantidade requisições

É comum existir determinados limites computacionais em nossa arquitetura sejam eles de hardware, rede, software e etc. Os recursos são finitos e precisamos cuidar e proteger nossa infraestrutura evitando assim uso massivo indiscriminado, degradação e até mesmo indisponibilidade de serviços em nossa rede de aplicações.

Para o nosso cenário a limitação de requisições é uma necessidade pois precisamos garantir por exemplo que alguém não realize muitas requisições em um curto intervalo de tempo, isto é necessário para garantir a disponibilidade e performance do serviço.

Para isso vamos implementar uma política de "Rate Limiting" e assim limitar a quantidade de vezes que o serviço pode ser executado em um determinado período.

Aplicando política Rate Limiting

Em nossa configuração vamos configurar uma cota de requisições pequena, que será de apenas 5 requisições em uma janela de tempo de 1 minuto. Também selecionamos a opção "Expose Headers" que irá enviar na resposta da chamada da API os headers com informações da cota estabelecida na política: "x-ratelimit-limit, x-ratelimit-remaining and x-ratelimit-reset".

Rate limit headers

Ao aplicar a política e realizar chamadas para a API os headers na resposta nos indicam os dados da cota e seus limites.

x-ratelimit-limit: 5 - Número maximo de requisiçõesx-ratelimit-remaining: 4 Requisições remanescentesx-ratelimit-reset: 54094ms Tempo para expirar a cota

Realizando novas chamadas dentro do janela de tempo estabelecida irá forçar o estouro da cota e seus limites e consequentemente a política irá bloquear o acesso retornando um HTTP Status 429 — Too Many Requests.

429 — Too many requests

Agora o acesso somente será liberado quando a janela de tempo configurada resetar e uma nova cota for aplicada.

x-ratelimit-limit: 5x-ratelimit-remaining: 0x-ratelimit-reset: 2341ms 

Uma outra política que também pode ser utilizada neste caso é a "Spike Control" com ela você também define uma cota de mensagens que sua API irá aceitar porém quando a cota acabar a mensagem é enfileirada para reprocessamento.

Resumo

Controlar requisições e proteger seu serviço é um dos primeiros passos para uma estratégia bem sucedida de gestão de APIs, isto é fundamental para garantir a saúde e estabilidade do seu serviço.

Em nosso próximo artigo vamos abordar sobre criação de Planos/SLAs para suas APIs. Fique ligado!

--

--