Sobes.tech
Middle+

Môžete vysvetliť, čo je graceful shutdown a kde sa používa?

sobes.tech AI

Odpoveď od AI

Plynulé ukončenie (graceful shutdown) je proces správneho ukončenia aplikácie, ktorý jej umožní dokončiť aktuálne operácie, uvoľniť zdroje a uložiť stav pred zastavením.

Použitie plynulého ukončenia:

  • Nasadenie nových verzií aplikácie: Umožňuje plynule nahradiť starú verziu novou bez straty dát alebo prerušenia používateľských relácií.
  • Plánované reštarty alebo technická údržba: Zabezpečuje, že všetky otvorené spojenia budú zatvorené a úlohy dokončené pred zastavením služby.
  • Reakcia na zlyhania alebo škálovanie: Pri znížení záťaže alebo problémoch môžu byť služby správne zastavené.

Príklad implementácie 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); // Simulácia dlhého procesu
});

server.listen(3000, () => {
  console.log('Server počúva na porte 3000');
});

// Spracovanie signálu SIGTERM pre plynulé ukončenie
process.on('SIGTERM', () => {
  console.log('Prijatý signál SIGTERM. Zatváram server...');
  server.close(() => {
    console.log('Server zatvorený. Ukončujem proces.');
    process.exit(0);
  });

  // Nútené ukončenie po určitom čase, ak sa zatváranie oneskorí
  setTimeout(() => {
    console.error('Nútené ukončenie...');
    process.exit(1);
  }, 5000); // 5 sekúnd
});

V príklade, pri prijatí signálu SIGTERM, server prestane prijímať nové spojenia, ale umožní existujúcim dokončiť. Po stanovenom čase dôjde k nútenému ukončeniu, ak sa zatváranie oneskorí.