Middle+
Можете ли да обясните какво е graceful shutdown и къде се прилага?
sobes.tech AI
Отговор от AI
Грациозното изключване (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, сървърът спира да приема нови връзки, но позволява на вече създадените да завършат. След определеното време, ако затварянето се забави, се извършва принудително затваряне.