Home > Blog > Desenvolvimento Web
Desenvolvimento Web
JavaScript
Programação

Rolling Deploy no Node.js: atualize sem downtime

Atualizado em: 20 de outubro de 2026

Rack de servidores processando fluxos de dados no Node.js

Rolling Deploy no Node.js substitui instâncias antigas por novas gradualmente, mantendo o serviço disponível durante a atualização. O processo depende de readiness correta, compatibilidade entre versões e encerramento gracioso.

Estratégia do Deployment

strategy:
  type: RollingUpdate
  rollingUpdate:
    maxUnavailable: 0
    maxSurge: 1

maxUnavailable: 0 preserva a quantidade disponível, enquanto maxSurge permite criar capacidade temporária.

Readiness antes do tráfego

A nova instância só deve receber tráfego após carregar configuração, conectar recursos essenciais e concluir aquecimento. Consulte Kubernetes Probes no Node.js.

Graceful shutdown

Ao receber SIGTERM, marque readiness como falha, pare de aceitar novas conexões e aguarde requisições em andamento.

process.on('SIGTERM', () => {
  state.shuttingDown = true;
  server.close(() => process.exit(0));

  setTimeout(() => process.exit(1), 20_000).unref();
});

terminationGracePeriodSeconds

O prazo do Kubernetes deve ser maior que o timeout interno de shutdown. Caso contrário, o processo recebe SIGKILL antes de concluir.

preStop

Um hook pode criar pequena espera para propagação da remoção dos endpoints, mas não substitui readiness nem shutdown correto.

Compatibilidade com banco

Durante o rollout, versões antiga e nova coexistem. Use migrations expand and contract: primeiro adicione estruturas compatíveis, depois altere aplicações e só remova campos em etapa posterior.

Consulte Database Migrations no Node.js.

Contratos de eventos e APIs

A nova versão deve aceitar mensagens antigas enquanto elas ainda podem existir na fila. Em APIs, preserve compatibilidade ou versione explicitamente.

Sessões

Não dependa de memória local para sessões importantes. Use armazenamento compartilhado ou tokens adequados, pois o usuário pode alcançar pods diferentes.

Conexões persistentes

WebSockets, SSE e streams longos exigem prazo e estratégia de drenagem. Um rollout pode aguardar demais se conexões nunca terminarem.

Canary

Para mudanças arriscadas, direcione pequena porcentagem à nova versão e compare erros, latência e SLO antes de ampliar.

Rollback

Rollback de imagem deve ser rápido, mas só funciona se banco e contratos continuarem compatíveis. Teste o procedimento antes de incidentes.

Configuração

Associe versão da imagem e checksum de ConfigMap/Secret ao pod template. Isso torna a mudança rastreável e força novo rollout quando necessário.

Observabilidade

Compare métricas por versão:

  • taxa de erro;
  • latência;
  • reinícios;
  • readiness;
  • consumo de CPU e memória;
  • error budget;
  • falhas de dependência.

Veja Error Budget no Node.js.

Erros comuns

  • readiness sempre positiva;
  • processo ignorar SIGTERM;
  • migration incompatível;
  • remover campo usado pela versão anterior;
  • não comparar métricas por versão;
  • depender de sessão em memória;
  • não ter rollback testado.

Conclusão

Rolling Deploy no Node.js exige mais que trocar containers. A aplicação precisa iniciar com segurança, coexistir com a versão anterior e encerrar sem interromper trabalho.

Combine probes, shutdown gracioso, migrations compatíveis e métricas por versão. Consulte a documentação de Rolling Update do Kubernetes e a documentação de fechamento do servidor HTTP.

10 melhores cursos de programação em 2026

Descubra os melhores cursos de programação. Aprenda a escolher o curso ideal para iniciar ou avançar na carreira de desenvolvedor

POSTS RELACIONADOS

Ver todos

Seta para a direita