Sobes.tech
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.