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.