Pular para o conteúdo principal
Voltar aos insights

Case técnico · Engenharia de backend

Go em produção

O que aprendi operando uma API Go sob carga real — e quais decisões mantiveram latência, custo e confiabilidade sob controle.

Este backend nasceu para um domínio sensível de hospitalidade digital em ambiente hospitalar. A plataforma integra serviços externos, streaming protegido e um backoffice com controle granular. O resultado não veio de um truque isolado, mas de limites explícitos, observabilidade útil e decisões operacionais consistentes.

Escala observada em produção

requisições por mês
20M+
latência média reportada
6 ms
cache hit rate
92%
commits no backend
1k+

Visão de sistema

Uma arquitetura com caminhos de degradação claros

Cada dependência tem timeout, limite e alternativa operacional. O objetivo não é impedir toda falha, mas evitar que uma falha local se transforme em indisponibilidade sistêmica.

Borda HTTP
API Go / Fiber
Redis + cache local
PostgreSQL
Serviços externos
Prometheus

01 · Contexto

Carga real muda as perguntas

Em laboratório, throughput costuma dominar a conversa. Em produção, previsibilidade e capacidade de explicar o comportamento do sistema importam tanto quanto velocidade.

  • Integrações externas com latências e taxas de erro fora do nosso controle.
  • Área administrativa com autenticação por cookie e permissões explícitas.
  • Observabilidade suficiente para diagnosticar causa, não apenas sintoma.
  • Cache híbrido para reduzir custo sem transformar Redis em ponto único de falha.

02 · Arquitetura

Limites antes de escala

O bootstrap define o envelope operacional: pools, timeouts, concorrência e health checks são configurados antes que a primeira requisição seja aceita.

  • GOMAXPROCS e coleta de lixo ajustados ao perfil real de CPU e memória.
  • Pool PostgreSQL com limites de abertura, ociosidade e vida útil.
  • Servidor HTTP com body limit, buffers e timeouts deliberadamente finitos.
  • Inicialização com readiness: a instância só recebe tráfego quando suas dependências essenciais estão prontas.
Fila infinita não é resiliência. Sob pico, rejeitar cedo e recuperar rápido é melhor do que acumular trabalho até o processo colapsar.

03 · Performance

O caminho quente precisa ser simples

A maior parte do ganho veio de remover trabalho, controlar alocações e impedir que dependências lentas ocupassem recursos indefinidamente.

  • Serialização eficiente com validação na fronteira e buffers reutilizáveis.
  • HTTP client compartilhado, pooling de conexões e timeouts por etapa.
  • Compressão e ETag aplicados quando o custo total justificava o ganho.
  • Medição por rota para otimizar somente os pontos que apareciam no perfil real.

04 · Cache

Cache é uma estratégia de disponibilidade

Redis reduz o read path, mas não deve controlar sozinho a disponibilidade da API. O desenho inclui fallback local e TTLs coerentes com a volatilidade de cada dado.

  • Redis como camada primária, com TTL e política de invalidação explícitos.
  • Cache local limitado para manter respostas essenciais durante oscilações.
  • Chaves versionadas e métricas de hit, miss, erro e latência.
  • Eviction previsível para impedir crescimento silencioso de memória.
Quando Redis falha, a plataforma degrada capacidade; ela não deveria desaparecer.

05 · Observabilidade

Métricas precisam responder perguntas

Dashboards foram desenhados a partir de decisões operacionais: devo escalar, limitar, reverter ou investigar uma dependência?

  • Histogramas de latência e contadores de resultado por rota normalizada.
  • Tamanho de request e response para detectar payloads anormais.
  • Sinais do runtime: CPU, heap, goroutines e pausas de GC.
  • SLOs e alertas orientados ao impacto, evitando ruído sem ação possível.
Normalizar parâmetros de rota evitou cardinalidade descontrolada e manteve o Prometheus utilizável durante incidentes.

06 · Segurança

Controles próximos da fronteira

A área administrativa usa sessão protegida e RBAC explícito. Autorização permanece no servidor, próxima da operação que protege.

  • Cookies HttpOnly, Secure e SameSite de acordo com o fluxo.
  • Permissões declarativas e trilha de auditoria para operações sensíveis.
  • Limites de payload e validação antes da lógica de negócio.
  • Ferramentas de diagnóstico expostas somente em ambientes controlados.

07 · Incidentes

Os erros que mudaram o desenho

Os melhores padrões da plataforma surgiram de falhas observadas. Cada incidente virou uma mudança verificável no sistema, não apenas documentação.

  • Cardinalidade de métricas levou à normalização obrigatória de labels.
  • Dependência total do Redis levou ao fallback local limitado.
  • Retries sem orçamento levaram a backoff, jitter e limite de tentativas.
  • Logging excessivo levou a amostragem e níveis orientados ao ambiente.

08 · Checklist

O que eu verificaria antes do próximo deploy

Performance sustentável é uma propriedade do sistema inteiro e precisa ser protegida por automação.

  • Timeouts, pools e limites de corpo cobertos por testes de contrato.
  • Cache com fallback, TTL, eviction e telemetria verificáveis.
  • Rotas normalizadas e alertas ligados a SLOs claros.
  • Readiness, rollback e teste de carga representativo antes do release.

Arquitetura precisa funcionar fora do diagrama

Quer discutir um sistema que precisa operar com confiabilidade em produção?

Posso ajudar a transformar requisitos de escala, confiabilidade e custo em decisões de engenharia mensuráveis.

Conversar sobre o projetoRoberto Moraes · Engenheiro de Software & Gerente de TI