Executando verificação de segurança...
2

Como implementei um Gateway em Go focado em Resiliência (Circuit Breaker e Token Bucket)

Fala, pessoal!

Recentemente, me deparei com o desafio de gerenciar o tráfego entre múltiplos microsserviços em um ecossistema poliglota (PHP, Java, Python). Em vez de usar uma solução pronta e pesada, decidi construir o LumeGateway em Go, focando puramente em sobrevivência de sistemas e performance de baixo nível.

Quero compartilhar com vocês os 3 pilares que utilizei para garantir que o sistema não entre em colapso sob carga:

  1. Controle de Vazão com Token Bucket
    Para evitar o esgotamento de recursos dos backends, implementei o algoritmo Token Bucket. Diferente de um contador simples, ele permite que o sistema aceite pequenos picos de tráfego (bursts), mas mantém uma média rigorosa a longo prazo. Isso é essencial para barrar ataques de força bruta sem prejudicar o usuário legítimo.

  2. Isolamento de Falhas (Circuit Breaker)
    Nada pior do que uma falha em cascata. O Lume opera uma máquina de estados finitos que monitora a taxa de erro de cada serviço upstream. Se o serviço de Java ou PHP começa a falhar, o Gateway "abre o circuito" imediatamente, poupando recursos e permitindo que o serviço se recupere sem ser bombardeado por novas requisições.

  3. I/O Não Bloqueante e Goroutines
    Aproveitando o scheduler do Go, cada requisição é tratada de forma assíncrona. Isso me permitiu escalar o sistema horizontalmente com um consumo de memória pífio, garantindo que o Gateway nunca seja o gargalo da arquitetura.

O projeto é Open Source e estou buscando feedbacks sobre a implementação, especialmente na parte de concorrência e gerenciamento de memória.

Repositório no GitHub: https://github.com/kauandias747474-hue/Lume-Gateway/tree/main

O que vocês acham dessa abordagem para lidar com Backpressure? Alguém aqui já teve que implementar algo similar em produção?

Carregando publicação patrocinada...