Sobes.tech
Middle+

Můžete vysvětlit, co je to graceful shutdown a kde se používá?

sobes.tech AI

Odpověď od AI

Plynulé ukončení (graceful shutdown) je proces správného ukončení aplikace, který jí umožní dokončit aktuální operace, uvolnit zdroje a uložit stav před zastavením.

Použití plynulého ukončení:

  • Nasazení nových verzí aplikace: Umožňuje plynule nahradit starou verzi novou bez ztráty dat nebo přerušení uživatelských relací.
  • Plánované restartování nebo technická údržba: Zajišťuje, že všechny otevřené spojení budou uzavřena a úkoly dokončeny před zastavením služby.
  • Reakce na selhání nebo škálování: Při snížení zátěže nebo problémů mohou být služby správně ukončeny.

Příklad implementace v 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); // Simulace dlouhé operace
});

server.listen(3000, () => {
  console.log('Server naslouchá na portu 3000');
});

// Obsluha signálu SIGTERM pro plynulé ukončení
process.on('SIGTERM', () => {
  console.log('Obdržel jsem signál SIGTERM. Zavírám server...');
  server.close(() => {
    console.log('Server uzavřen. Ukončuji proces.');
    process.exit(0);
  });

  // Vynucené ukončení po určité době, pokud se ukončení zpozdí
  setTimeout(() => {
    console.error('Vynucené ukončení...');
    process.exit(1);
  }, 5000); // 5 sekund
});

V příkladu, při přijetí signálu SIGTERM, server přestane přijímat nové spojení, ale umožní již existujícím dokončit. Po stanovené době dojde k vynucenému ukončení, pokud se ukončení zpozdí.