Zarif Kapanma: Servisi Yeniden Başlatırken İstek Kaybetmemek

İki kapatma biçimi, web sunucusunda zarif yeniden başlatma, işçi kapanması, yük dengeleyici koordinasyonu ve test. Zarif Kapanma: Servisi Yeniden Başlatırken…

Zarif Kapanma: Servisi Yeniden Başlatırken İstek Kaybetmemek
İçindekiler
  1. İki Kapatma Biçimi
  2. Web Sunucusunda Zarif Yeniden Başlatma
  3. Arka Plan İşçilerinde
  4. Uzun Süren İşler
  5. Yük Dengeleyici Koordinasyonu
  6. Veritabanı Bağlantıları
  7. Kapanmayı Test Etmek
  8. Dağıtım Sürecine Bağlamak
  9. Sonuç
  10. Sıkça Sorulan Sorular (SSS)
  11. Zarif kapanma ile zorla sonlandırma farkı ne?
  12. Kuyruk işçilerinde nasıl uygularım?
  13. Uzun süren işlerde ne yapmalıyım?
  14. Çok sunuculu yapıda kapatma sırası ne olmalı?

Zarif Kapanma: Servisi Yeniden Başlatırken İstek Kaybetmemek

Yeni sürümü yayına aldınız ve servisi yeniden başlattınız. O anda işlenmekte olan istekler yarıda kesildi, bir kullanıcının ödemesi tamamlanmadı ve bir arka plan işi yarım kaldı.

Bu yazı, servisleri kayıpsız durdurmayı ele alıyor.

İki Kapatma Biçimi

Bir sürece durma sinyali göndermenin iki yolu vardır:

Zarif kapanma Zorla sonlandırma
Süreç sinyali alır Süreç anında öldürülür
Mevcut işi bitirebilir İş yarıda kalır
Kaynakları serbest bırakır Kilitler açık kalabilir
Temizlik yapabilir Geçici dosyalar kalır

Üçüncü satır sonraki çalıştırmayı etkiler: zorla sonlandırılan bir süreç, tuttuğu veritabanı kilidini veya iş kilidini bırakamaz ve bu kilitler bir süre daha başkalarını engeller.

Bu yüzden ilk tercih her zaman zarif kapanma olmalı, zorla sonlandırma yalnızca yanıt vermeyen süreçler için kullanılmalıdır.

Web Sunucusunda Zarif Yeniden Başlatma

Web sunucuları bu davranışı destekler:

  1. Yeni istek kabul etmeyi durdurur
  2. İşlenmekte olan istekleri bitirir
  3. Yeni yapılandırmayla yeni işçiler başlatır
  4. Eski işçiler işini bitirince kapanır

Bu sırada kesinti yaşanmaz: zarif yeniden yükleme sırasında hiçbir istek reddedilmez, yalnızca yeni istekler yeni işçilere gider.

Ancak bir sınır vardır — bekleme süresi. Belirli bir süre sonunda hâlâ bitmemiş istekler zorla kesilir.

Bu sürenin uzun süren isteklerinizi kapsayacak kadar uzun olması gerekir. Rapor üretimi gibi işlemler varsa, varsayılan süre yetmeyebilir.

Arka Plan İşçilerinde

Kuyruk işçileri için zarif kapanma daha da kritiktir:

  • İşçi sinyali almalı ve anlamalı.
  • Mevcut işi tamamlamalı.
  • Yeni iş almamalı.
  • Sonra kapanmalı.

İkinci madde iş kaybını önler: yarıda kesilen bir kuyruk işi, kuyruk sistemine göre ya kaybolur ya baştan tekrarlanır — ikisi de istenmeyen sonuçlardır.

Bu davranışı uygulamak için işçi döngüsünün sinyali kontrol etmesi gerekir. Her iş tamamlandıktan sonra "durma isteği geldi mi" sorusu sorulur ve geldiyse döngüden çıkılır.

Bu, birkaç satırlık bir kod eklemesidir ama dağıtım güvenliğini tamamen değiştirir.

Uzun Süren İşler

Bir iş dakikalarca sürüyorsa bekleme süresi sorun olur:

Yaklaşım Özelliği
Bekleme süresini uzatmak Dağıtım yavaşlar
İşi parçalara bölmek Her parça kısa, kesinti güvenli
İlerleme kaydetmek Kaldığı yerden devam
Ayrı işçi havuzu Farklı yeniden başlatma ritmi

İkinci satır en sağlam çözümdür: on dakika süren bir iş yerine, her biri birkaç saniye süren yüz iş çalıştırmak, kapanma sırasında kayıp riskini neredeyse sıfırlar.

Dördüncü satır ise operasyonel bir ayrımdır. Uzun işler ayrı bir havuzda çalışıyorsa, o havuz her dağıtımda yeniden başlatılmak zorunda kalmaz.

Yük Dengeleyici Koordinasyonu

Birden fazla sunucu varsa kapanma sırası önemlidir:

  1. Sunucuyu havuzdan çıkarın. Sağlık kontrolü başarısız dönsün.
  2. Mevcut isteklerin bitmesini bekleyin.
  3. Servisi durdurun.
  4. Güncelleyip yeniden başlatın.
  5. Havuza geri alın.

Birinci madde en sık atlanan adımdır ve atlanınca kesinti üretir: sunucuyu havuzdan çıkarmadan durdurmak, yük dengeleyicinin ölü sunucuya istek göndermeye devam etmesine yol açar — sağlık kontrolü başarısızlığı fark edene kadar.

Bu süre birkaç saniye olabilir ama o saniyelerde gelen tüm istekler hata alır.

Doğru yapı, kapanma sinyali alındığında sağlık kontrolünün hemen başarısız dönmesi, ancak sunucunun mevcut istekleri işlemeye devam etmesidir.

Veritabanı Bağlantıları

Kapanırken bağlantıların düzgün kapatılması gerekir:

  • Açık işlemler geri alınmalı veya tamamlanmalı.
  • Bağlantılar kapatılmalı.
  • Kilitler serbest bırakılmalı.

Birinci madde veri bütünlüğü için kritiktir: yarım kalan bir işlem, zorla sonlandırmada belirsiz bir durumda kalabilir ve veritabanı onu temizleyene kadar kilitler açık kalır.

Zarif kapanmada uygulama bu temizliği kendisi yapar ve durum belirsizliği oluşmaz.

Kapanmayı Test Etmek

Bu davranış test edilmeden güvenilir sayılmaz:

Test Beklenen
Yük altında yeniden başlat Hiç hata alınmamalı
Uzun istek sırasında durdur İstek tamamlanmalı
İşçiyi iş ortasında durdur İş bitmeli, sonra kapanmalı
Bekleme süresini aş Zorla kesme çalışmalı

Birinci satır asıl testtir ve basitçe yapılır: sürekli istek gönderen bir betik çalışırken servisi yeniden başlatmak, tek bir hata bile üretmiyorsa yapılandırma doğrudur.

Bu test sırasında alınan her hata, gerçek bir dağıtımda kullanıcıların yaşayacağı hatadır.

Dağıtım Sürecine Bağlamak

Zarif kapanma, dağıtım betiğinizin bir parçası olmalıdır:

  1. Sunucuyu havuzdan çıkar.
  2. Bekleme süresi kadar bekle.
  3. Zarif durdurma sinyali gönder.
  4. Sürecin kapandığını doğrula.
  5. Kapanmadıysa zorla sonlandır.
  6. Başlat ve sağlığı doğrula.

Beşinci madde bir güvenlik ağıdır: takılan bir sürecin kapanmasını sonsuza kadar beklemek, dağıtımı kilitler — belirli bir süre sonra zorla sonlandırmak gerekir.

Altıncı madde ise dağıtımın tamamlandığını doğrular. Servis başlatıldı diye çalışıyor sayılmaz; sağlık kontrolünün başarılı dönmesi beklenmelidir.

Bu adımları betiğe yazıp otomatikleştirebileceğiniz sanal özel sunucu hizmeti üzerinde, servis yönetimi ve sinyal gönderimi doğrudan sistem araçlarıyla yapılır.

Sonuç

Zarif kapanma, dağıtım sırasında istek kaybını önleyen basit ama sık atlanan bir düzenlemedir. Zorla sonlandırmanın gizli maliyeti şudur: öldürülen bir süreç tuttuğu kilitleri bırakamaz ve bunlar bir süre daha başkalarını engeller. Çok sunuculu yapıda kritik adım sıradadır — sunucuyu havuzdan çıkarmadan durdurmak, yük dengeleyicinin ölü sunucuya istek göndermesine yol açar. Ve testi basittir: sürekli istek gönderirken yeniden başlatın, tek bir hata bile çıkmamalı.

Sıkça Sorulan Sorular (SSS)

Zarif kapanma ile zorla sonlandırma farkı ne?

Zarif kapanmada süreç bir sinyal alır, mevcut işini bitirir, kaynakları serbest bırakır ve temizlik yapar. Zorla sonlandırmada anında öldürülür — iş yarıda kalır, tuttuğu kilitler açık kalabilir ve geçici dosyalar temizlenmez.

Kuyruk işçilerinde nasıl uygularım?

İşçi döngüsünün her iş tamamlandıktan sonra "durma isteği geldi mi" kontrolü yapması yeterlidir. Geldiyse yeni iş almadan döngüden çıkar. Birkaç satırlık bir eklemedir ama yarıda kesilen işlerin kaybolmasını veya baştan tekrarlanmasını önler.

Uzun süren işlerde ne yapmalıyım?

Bekleme süresini uzatmak yerine işi parçalara bölün. On dakika süren bir iş yerine her biri birkaç saniye süren yüz iş çalıştırmak, kapanma sırasındaki kayıp riskini neredeyse sıfırlar. Ayrıca ilerleme kaydı tutun.

Çok sunuculu yapıda kapatma sırası ne olmalı?

Önce sunucuyu yük dengeleyici havuzundan çıkarın — sağlık kontrolü başarısız dönsün ama sunucu mevcut istekleri işlemeye devam etsin. Bu adım atlanırsa dengeleyici, durumu fark edene kadar ölü sunucuya istek göndermeye devam eder ve o saniyelerdeki tüm istekler hata alır.