trilha

System Design/05 - Reliability Patterns/Availability2 min

Health Endpoint Monitoring

Perguntas-guia
  • Que problema isso resolve?
  • Quando usar / quando NÃO usar?
  • Qual o principal trade-off?
  • Como isso falha em produção?

Conceito

O serviço expõe um endpoint que informa seu estado, consumido por balanceador, orquestrador e monitoramento externo.

Os três probes

Probe Pergunta Ação se falhar
Liveness O processo está vivo? Reinicia
Readiness Está apto a receber tráfego? Tira da rotação
Startup Terminou de inicializar? Adia os outros

Confundir liveness com readiness é o erro mais caro do padrão: se o liveness verifica o banco e o banco fica lento, todas as instâncias reiniciam — transformando degradação em queda total.

Regra: liveness verifica só o processo; readiness verifica as dependências.

Resposta útil

{ "status": "degradado",
  "banco":  { "status": "ok",    "latencia_ms": 3 },
  "cache":  { "status": "falha", "erro": "timeout" } }

Estado ternário (ok / degradado / falha) é mais útil que binário: com o cache fora, o serviço está lento e funcional — e deve continuar recebendo tráfego.

Trade-offs

Check raso não detecta aplicação quebrada: um processo que responde 500 para tudo continua "vivo".

Check profundo propaga falha em cascata: se A verifica B, e B fica lento, A é retirado da rotação mesmo podendo atender as requisições que não dependem de B. A falha de B vira falha de A por decisão do monitoramento.

O equilíbrio é distinguir dependência crítica de opcional e reportar estado degradado em vez de binário.

Dois cuidados operacionais: o endpoint roda a cada poucos segundos por instância, então não deve ser custoso — três consultas pesadas multiplicadas por 50 instâncias viram carga significativa sobre o próprio banco monitorado. E não deve exigir autenticação, embora deva ser protegido de exposição pública, porque revela topologia interna.

Exemplo prático

GET /health/live   → 200 se o processo responde. Nada mais.
GET /health/ready  → 200 se banco OK e migrações aplicadas
                   → 503 se dependência crítica falhou

Durante um deploy, a instância nova responde live imediatamente, mas ready só depois que o pool de conexões aqueceu. O balanceador espera.

Isso elimina o sintoma clássico de deploy: as primeiras requisições da instância nova sofrendo timeout por terem chegado antes de ela estar realmente pronta.

Relacionado


Parte de Availability · roadmap.sh/system-design

Buscar

Busca por título, seção e texto das notas