Sobes.tech
Middle+

Graceful shutdown nima va qayerda qo'llaniladi, tushuntirib bera olasizmi?

sobes.tech AI

AIdan javob

М'яке завершення роботи — це процес коректного завершення роботи додатку, що дозволяє йому завершити поточні операції, звільнити ресурси та зберегти стан перед зупинкою.

Застосування м'якого завершення роботи:

  • Випуск нових версій додатку: Дозволяє плавно замінити стару версію на нову без втрати даних або перерви користувацьких сесій.
  • Планові перезавантаження або технічне обслуговування: Гарантує, що всі відкриті з'єднання будуть закриті, а задачі завершені до зупинки сервісу.
  • Реагування на збої або масштабування: При зниженні навантаження або виникненні проблем, сервіси можуть бути коректно зупинені.

Приклад реалізації на 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, сервер перестає приймати нові з'єднання, але дозволяє вже встановленим завершитися. Через заданий час відбувається примусове завершення, якщо закриття затягується.