Sobes.tech
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, ο διακομιστής σταματά να δέχεται νέες συνδέσεις, αλλά επιτρέπει στις ήδη ενεργές να ολοκληρωθούν. Μετά από το καθορισμένο χρόνο, πραγματοποιείται αναγκαστικός τερματισμός αν η διαδικασία καθυστερεί πολύ.