Sobes.tech
Middle+

Ar galite paaiškinti, kas yra graceful shutdown ir kur jis taikomas?

sobes.tech AI

Atsakymas iš AI

Žavesio uždarymas — tai procesas, kai tinkamai užbaigiama programos veikla, leidžianti jai prieš sustojimą užbaigti esamas operacijas, atlaisvinti išteklius ir išsaugoti būseną.

Žavesio uždarymo taikymas:

  • Naujos programos versijos diegimas: leidžia sklandžiai pakeisti seną versiją nauja be duomenų praradimo ar vartotojų sesijų nutraukimo.
  • Planiniai perkrovimai ar techninė priežiūra: užtikrina, kad visi atviri ryšiai bus uždaryti, o užduotys - užbaigtos iki paslaugos sustojimo.
  • Reagavimas į gedimus ar mastelio keitimą: sumažėjus apkrovai ar atsiradus problemoms, paslaugos gali būti tinkamai sustabdytos.

Pavyzdys, kaip įgyvendinti 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); // Ilgalaikės operacijos imitacija
});

server.listen(3000, () => {
  console.log('Serveris klausosi prievado 3000');
});

// SIGTERM signalo apdorojimas žavesio uždarymui
process.on('SIGTERM', () => {
  console.log('Gautas SIGTERM signalas. Uždaryti serverį...');
  server.close(() => {
    console.log('Serveris uždarytas. Baigiamas procesas.');
    process.exit(0);
  });

  // Priverstinis užbaigimas po tam tikro laiko, jei uždarymas užtrunka
  setTimeout(() => {
    console.error('Priverstinai uždaroma...');
    process.exit(1);
  }, 5000); // 5 sekundės užbaigimui
});

Pavyzdyje, kai gaunamas SIGTERM signalas, serveris nebepriima naujų ryšių, bet leidžia jau nustatytiems ryšiams užbaigti. Po nustatyto laiko įvyksta priverstinis proceso užbaigimas, jei uždarymas užtrunka ilgiau.