Load shedding: sistemi çökmekten korumak için istekleri bırakmak
Yazar, trafik artışında yeniden deneme fırtınasının sistemi nasıl devirdiğini ve rate limiting ile circuit breaker'ın bu sorunu tek başına çözemediğini anlatıyor. Çözüm olarak sistem sağlığına göre istek bırakan load shedding yaklaşımını, ASP.NET Core ve Kestrel örnekleriyle öneriyor. Kestrel ve middleware katmanında uygulama fikirleri ASP.NET Core geliştiricileri için pratik.
Kilit noktalar
- Load shedding, sistem sağlığına göre istek bırakır; rate limiting ise istemci kotasına bakar.
- Aşırı yükte 429 yerine Retry-After başlıklı 503 Service Unavailable döndürün.
- Kestrel'da MaxConcurrentConnections ile bağlantı sınırı koyun; isteği mümkün olan en erken katmanda reddedin.
- Endpoint metadata ile öncelik tanımlayın; telemetri ve batch işleri önce, ödeme gibi istekleri en son bırakın.
- Sabit CPU eşiği yerine gecikme eğilimini (ör. P99 artışı) izleyerek sheddingi başlatın.
- Staging ortamında yük testiyle kabul edilen isteklerin P99 değerinin iyileştiğini doğrulayın.
Yük altındaki bir sistem ya kontrollü biçimde istek bırakır ya da plansız şekilde çöker. Yazar, rate limiting ve circuit breaker'ın yetmediği durumda devreye girecek bir teknik olarak load shedding'i öne çıkarıyor. Bu yaklaşım, isteği kimin gönderdiğine bakmadan sistemin o anki sağlık durumuna göre istekleri reddeder ve uygun yanıt olarak 429 yerine Retry-After başlıklı 503 döndürmeyi önerir.
Yazı, isteklerin reddini mümkün olan en erken katmanda yapmanın maliyet farkını anlatıyor: Kestrel'da MaxConcurrentConnections gibi sınırlar, ardından özel middleware ve en son controller. Ayrıca endpoint metadata ile öncelik tanımlayıp telemetri gibi işleri önce bırakmayı, ödeme gibi istekleri korumayı öneriyor. Statik CPU eşiği yerine gecikme eğilimini izlemenin daha iyi olduğunu da belirtiyor.
Gerçek dünyada kullanımı
- Yüksek trafikli bir e-ticaret API'si: kampanya anında ödeme isteklerini korurken analitik çağrılarını bırakmak.
- Birden fazla istemcinin yeniden deneme yaptığı bir ASP.NET Core servisinde retry fırtınasını kesmek.
- Health check ve telemetri uçları olan bir mikroservisi, bellek baskısı altında kontrollü şekilde daraltmak.
Neden önemli
Rate limiting ve circuit breaker'a ek olarak, yük arttığında hangi isteklerin hayatta kalacağını siz belirleyebilirsiniz. Doğru yanıt kodu ve önceliklendirme, istemcilerin yeniden deneme davranışını da olumlu etkiler.