Sobes.tech
Middle+

Pode explicar o que é um desligamento gracioso e onde ele é aplicado?

sobes.tech IA

Resposta da IA

O desligamento gracioso é um processo de encerramento correto da aplicação, que permite concluir as operações em curso, libertar recursos e guardar o estado antes de parar.

Aplicações do desligamento gracioso:

  • Implantação de novas versões da aplicação: Permite substituir suavemente a versão antiga pela nova sem perda de dados ou interrupções nas sessões dos utilizadores.
  • Reinicializações planeadas ou manutenção técnica: Garante que todas as ligações abertas sejam fechadas e as tarefas concluídas antes de parar o serviço.
  • Resposta a falhas ou escalabilidade: Em caso de redução de carga ou problemas, os serviços podem ser encerrados corretamente.

Exemplo de implementação em Node.js:

// process.js
const http = require('http');

const server = http.createServer((req, res) => {
  setTimeout(() => {
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end('Hello, World!\n');
  }, 2000); // Simulação de operação prolongada
});

server.listen(3000, () => {
  console.log('Servidor a ouvir na porta 3000');
});

// Manipulador de sinal SIGTERM para desligamento gracioso
process.on('SIGTERM', () => {
  console.log('Sinal SIGTERM recebido. A fechar o servidor...');
  server.close(() => {
    console.log('Servidor fechado. A sair do processo.');
    process.exit(0);
  });

  // Encerramento forçado após algum tempo, se o encerramento atrasar
  setTimeout(() => {
    console.error('A encerrar forçadamente...');
    process.exit(1);
  }, 5000); // 5 segundos para encerrar
});

No exemplo, ao receber o sinal SIGTERM, o servidor deixa de aceitar novas ligações, mas permite que as existentes terminem. Após o tempo definido, ocorre um encerramento forçado caso o encerramento esteja a demorar demasiado.