Skip to content

mairinkdev/api-gateway-rate-limiter

Repository files navigation

API Gateway com Rate Limiting

Um API Gateway robusto implementado em Java com Spring Cloud Gateway, oferecendo recursos avançados de rate limiting e proteção contra sobrecarga.

Características

  • Rate Limiting: Limita o número de requisições por IP ou por usuário
  • Circuit Breaker: Previne falhas em cascata quando serviços downstream estão instáveis
  • Métricas e Monitoramento: Integrado com Prometheus para visualização de métricas
  • Headers de Rate Limit: Fornece informações de limites via HTTP headers
  • Diferentes Políticas de Limites: Configuração de diferentes limites por rota

Tecnologias Utilizadas

  • Java 17
  • Spring Boot 3.2
  • Spring Cloud Gateway
  • Redis para armazenamento distribuído
  • Bucket4j para algoritmos de rate limiting
  • Resilience4j para circuit breaking
  • Micrometer e Prometheus para métricas

Como Executar

Pré-requisitos

  • Java 17 ou superior
  • Maven 3.6 ou superior
  • Redis (opcional, pode ser executado via Docker)

Executando o Redis via Docker

docker run -d -p 6379:6379 --name redis redis

Compilando e Executando a Aplicação

mvn clean package
java -jar target/api-gateway-rate-limiter-0.0.1-SNAPSHOT.jar

Configuração

A configuração do gateway está no arquivo application.yml. Você pode personalizar:

  • Rotas e predicados
  • Limites de requisições
  • Tempos de circuit breaking
  • Endpoints para métricas e monitoramento

Endpoints de Exemplo

O gateway está configurado para encaminhar para o serviço httpbin.org para demonstração:

Monitoramento

Métricas estão disponíveis no formato Prometheus:

Headers de Rate Limiting

O gateway adiciona os seguintes headers às respostas:

  • X-RateLimit-Limit: Número máximo de requisições permitidas em um período
  • X-RateLimit-Remaining: Número de requisições restantes no período atual
  • X-RateLimit-Retry-After: Segundos até que novas requisições sejam permitidas (quando limitado)

Escalabilidade

Este gateway foi projetado para ser escalável:

  • Pode ser executado em múltiplas instâncias com Redis para compartilhar estado
  • Suporta grandes volumes de tráfego com baixa latência
  • Monitoramento permite identificar gargalos e otimizar configurações

Contribuição

Contribuições são bem-vindas! Sinta-se à vontade para abrir issues ou enviar pull requests.

Licença

MIT

Autor

Arthur Mairink

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors