Node.js servislerinde SIGTERM geldiğinde istekleri kaybetmeden kapanmak

0 Yanıt 0 Görüntülenme
Puanlayanlar
Katılımcılar
Konuyu Açan #1
Bir Node.js servisini yeniden başlatırken yalnızca process.exit() çağırmak, tam o sırada işlenen istekleri yarıda kesebiliyor. Özellikle konteyner veya süreç yöneticisi kullanan projelerde, kapanışı birkaç aşamaya bölmek daha güvenli.

  • Önce yeni trafiği durdurun. SIGTERM alınca uygulamanın “hazır” durumunu kapatıp readiness kontrolüne 503 döndürün. Bu değişikliğin yük dengeleyiciye yansıması anlık olmayabilir; kısa bir bekleme süresi, yeni isteklerin eski sürece yönelmesini azaltabilir.

  • Sonra HTTP sunucusunu kapatın. server.close() yeni bağlantıları kabul etmeyi bırakır ve devam eden isteklerin tamamlanmasını bekler. Kapanış sırasında veritabanı havuzunu veya mesaj kuyruğu istemcisini hemen kapatmayın; çalışan isteklerin bu kaynaklara hâlâ ihtiyacı olabilir.

    KOD
    1234567891011
    let shuttingDown = false;
    
    process.on('SIGTERM', () => {
      shuttingDown = true;
    
      server.close(async () => {
        await db.end();
        process.exit(0);
      });
    });
    


    Buradaki shuttingDown değerini readiness endpoint’inde kullanabilirsiniz. Gerçek uygulamada kapanış için bir zaman aşımı da belirlemek iyi olur; aksi hâlde bitmeyen bir istek süreci açık tutabilir. Zaman aşımı dolarsa zorla kapatmak, temiz kapanıştan daha sert ama bazen gerekli bir seçenek.

    Siz servislerinizde kapanış sinyalini nasıl ele alıyorsunuz; WebSocket bağlantıları veya kuyruk tüketicileri için ayrıca nasıl bir sıra izliyorsunuz?
  • Yanıt vermek için giriş yapmış olmalısınız.

    0 alıntı seçildi