Назад к вопросам
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, сервер перестает принимать новые соединения, но позволяет уже установленным завершиться. Через заданное время происходит принудительное завершение процесса на случай, если закрытие затягивается.