Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
Graceful Shutdown: SIGTERM, terminationGracePeriodSeconds, preStop ve .NET HostOptions
Pod silinince SIGTERM ile endpoint'ten çıkarılma aynı anda ve senkronizasyonsuz başlar; bu yarış, her şey doğru yapılmış bir rollout'ta bile 23–26 hataya yol açtı, 5 saniyelik preStop sleep action ile sıfıra indi. .NET'in SIGTERM'de istekleri ve BackgroundService'leri sırayla bitirmesini, ShutdownTimeout ve grace period'un birbirini nasıl kestiğini, chiseled image'da exec sleep'in başarısızlığını gerçek çıktılarla görüyoruz.
Zero-Downtime'ın Ön Koşulları: Graceful Shutdown, Readiness, Stateless Uygulama ve Geriye Uyumluluk
Hiçbir deployment stratejisi, kapanırken işini bitirmeyen ve hazır olduğunu doğru söylemeyen bir uygulamayı kurtaramaz. Gerçek koşularla: ShutdownTimeout 2 sn'ye inince 5 sn'lik istek RST ile kopuyor, Docker'ın 1 sn'lik bekleme süresi 137 (SIGKILL) üretiyor, readiness drain sırasında 503 dönerken API 200 vermeye devam ediyor, ayrı Data Protection key ring'i CryptographicException fırlatıyor ve silinen Angular chunk'ı ChunkLoadError'a dönüşüyor.
.NET'te IHostedService ve BackgroundService: Yaşam Döngüsü, Graceful Shutdown ve .NET 10 Davranış Değişikliği
.NET 10'da BackgroundService.ExecuteAsync'in tamamı arka planda çalışır; ilk await'ten önceki kod artık startup'ı bloklamaz, erken çalışması gereken kod StartAsync'e ya da IHostedLifecycleService'e taşınır. Host kapanırken stoppingToken iptal edilir ve tüm durdurma işine varsayılan 30 saniyelik ShutdownTimeout verilir; token'ı taşımayan iş bu sürenin sonunda log bile bırakmadan kesilir.