Sobes.tech
Middle+

Tudná elmagyarázni, mi az a graceful shutdown, és hol alkalmazzák?

sobes.tech MI

Válasz az MI-től

A zökkenőmentes leállás (graceful shutdown) az alkalmazás helyes befejezési folyamata, amely lehetővé teszi, hogy a futó műveleteket befejezze, erőforrásokat felszabadítson és az állapotot mentse, mielőtt leáll.

A zökkenőmentes leállás alkalmazásai:

  • Új verziók telepítése: Lehetővé teszi az régi verzió zökkenőmentes cseréjét az újra anélkül, hogy adatvesztés vagy felhasználói munkamenetek megszakadnának.
  • Ütemezett újraindítások vagy karbantartás: Biztosítja, hogy minden nyitott kapcsolat lezáruljon, és a feladatok befejeződjenek a szolgáltatás leállítása előtt.
  • Hibák vagy skálázás esetén: Csökkent terhelés vagy problémák esetén a szolgáltatások helyesen leállíthatók.

Node.js példakód:

// 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); // Hosszú művelet szimulációja
});

server.listen(3000, () => {
  console.log('Szerver hallgat a 3000-es porton');
});

// SIGTERM jelzés kezelése a zökkenőmentes leállításhoz
process.on('SIGTERM', () => {
  console.log('SIGTERM jelzés érkezett. Szerver leállítása...');
  server.close(() => {
    console.log('Szerver leállt. A folyamat befejeződik.');
    process.exit(0);
  });

  // Kényszerített leállás egy idő után, ha a zárás késlekedik
  setTimeout(() => {
    console.error('Kényszerített leállás...');
    process.exit(1);
  }, 5000); // 5 másodperc
});

A példában, amikor a SIGTERM jelzést kapja, a szerver abbahagyja az új kapcsolatok fogadását, de lehetővé teszi a már meglévő kapcsolatok befejezését. A megadott idő után, ha a zárás késlekedik, kényszerített leállás történik.