Sobes.tech
Middle+

Можете ли објаснити шта је graceful shutdown и где се примењује?

sobes.tech АИ

Одговор од АИ

Грациозно затварање (graceful shutdown) је процес правилног затварања апликације, који јој омогућава да заврши текуће операције, ослободи ресурсе и сачува стање пре него што се заустави.

Примена грациозног затварања:

  • Дистрибуција нових верзија апликације: Омогућава глатку замену старе верзије новом без губитка података или прекида корисничких сесија.
  • Планирани поновни покретаји или техничко одржавање: Гарантује да ће све отворене везе бити затворене и задаци завршени пре заустављања сервиса.
  • Реаговање на кварове или скалирање: У случају смањења оптерећења или проблема, сервиси могу бити правилно заустављени.

Пример имплементације у 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); // Имитација дуге операције
});

server.listen(3000, () => {
  console.log('Сервер слуша на порту 3000');
});

// Обрада сигнала SIGTERM за грациозно затварање
process.on('SIGTERM', () => {
  console.log('Примљен сигнал SIGTERM. Затварање сервера...');
  server.close(() => {
    console.log('Сервер затворен. Завршавање процеса.');
    process.exit(0);
  });

  // Принудно затварање након одређеног времена ако затварање траје предуго
  setTimeout(() => {
    console.error('Принудно затварање...');
    process.exit(1);
  }, 5000); // 5 секунди
});

У примеру, при пријему сигнала SIGTERM, сервер престаје да прихвата нове везе, али дозвољава да постојеће заврше. После одређеног времена, ако затварање траје предуго, извршава се принудно затварање.