Назад к вопросам
Middle+
293
questionbank
Расскажите о graceful shutdown и где он применяется?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Graceful shutdown — это процесс корректного завершения работы приложения, который позволяет ему перед остановкой завершить текущие операции, освободить ресурсы и сохранить состояние.
Применение 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('Server listening on port 3000');
});
// Обработчик сигнала SIGTERM для graceful shutdown
process.on('SIGTERM', () => {
console.log('Received SIGTERM signal. Closing server...');
server.close(() => {
console.log('Server closed. Exiting process.');
process.exit(0);
});
// Принудительное завершение через некоторое время, если закрытие затягивается
setTimeout(() => {
console.error('Forcefully shutting down...');
process.exit(1);
}, 5000); // 5 секунд на завершение
});
В примере, при получении сигнала SIGTERM, сервер перестает принимать новые соединения, но позволяет уже установленным завершиться. Через заданное время происходит принудительное завершение процесса на случай, если закрытие затягивается.