Node.js’te graceful shutdown: keep-alive ve uzun istekleri nasıl yönetiyorsunuz?

0 Yanıt 7 Görüntülenme
Puanlayanlar
Katılımcılar
Konuyu Açan #1
Üretimde süreç yeniden başlatılırken yalnızca process.exit() çağırmak kolay, ama o sırada devam eden bir isteğin yarıda kesilmesi pek hoş değil. Ben graceful shutdown akışını kurcalarken en çok şu ayrıntılarda kararsız kaldım:

  • Önce trafiği durdurmak: SIGTERM geldiğinde uygulamayı readiness kontrolünde hazır değil olarak işaretleyip yeni istekleri başka örneklere yönlendirmek, ardından server.close() ile yeni bağlantı kabulünü kesmek mantıklı görünüyor. Fakat orkestratörün bu durum değişikliğini fark etmesi için küçük bir bekleme aralığı bırakıyor musunuz?
  • Mevcut bağlantıları boşaltmak: server.close() tamamlanana kadar açık istekler sürebiliyor. Uzun süren raporlar veya SSE bağlantıları varsa kapanışın ne kadar bekleneceğini belirlemek gerekiyor. Ayrıca keep-alive bağlantılarının kapanış davranışı Node.js sürümüne göre değişebildiğinden, kullanılan sürümde idle bağlantıların nasıl ele alındığını ayrıca doğrulamak önemli.
  • Diğer kaynaklar: HTTP sunucusu kapandıktan sonra veritabanı havuzunu kapatmak sıralı bir yaklaşım; ama WebSocket bağlantıları sunucunun kapanışını bekletebilir veya ayrı yönetim isteyebilir. Son bir zaman aşımı da sürecin sonsuza dek kapanmadan kalmasını önleyebilir.


Siz SIGTERM akışında bu adımları hangi sırayla uyguluyorsunuz? Özellikle WebSocket ya da uzun süren isteklerde bağlantıları nazikçe sonlandırmak için kullandığınız bir yöntem var mı?

Yanıt vermek için giriş yapmış olmalısınız.

0 alıntı seçildi