Middle+
Puteți explica ce este o oprire elegantă și unde se aplică?
sobes.tech AI
Răspuns de la AI
Închiderea grațioasă (graceful shutdown) este procesul de închidere corectă a aplicației, care îi permite să finalizeze operațiile curente, să elibereze resursele și să salveze starea înainte de oprire.
Aplicații ale închiderii grațioase:
- Dezvoltarea noilor versiuni ale aplicației: Permite înlocuirea lină a versiunii vechi cu cea nouă fără pierderi de date sau întreruperi ale sesiunilor utilizatorilor.
- Reporniri planificate sau întreținere tehnică: Asigură că toate conexiunile deschise sunt închise și sarcinile sunt finalizate înainte de oprirea serviciului.
- Reacție la defecțiuni sau scalare: În cazul reducerii încărcăturii sau apariției problemelor, serviciile pot fi oprite corect.
Exemplu de implementare în 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); // Simulare operație lungă
});
server.listen(3000, () => {
console.log('Server ascultă pe portul 3000');
});
// Handler pentru semnalul SIGTERM pentru închiderea grațioasă
process.on('SIGTERM', () => {
console.log('S-a primit semnalul SIGTERM. Închiderea serverului...');
server.close(() => {
console.log('Server închis. Încheierea procesului.');
process.exit(0);
});
// Închiderea forțată după un anumit timp dacă închiderea întârzie
setTimeout(() => {
console.error('Închidere forțată...');
process.exit(1);
}, 5000); // 5 secunde
});
În exemplu, la primirea semnalului SIGTERM, serverul încetează să accepte noi conexiuni, dar permite celor deja stabilite să se finalizeze. După timpul stabilit, se efectuează o închidere forțată dacă închiderea durează prea mult.