COMPUTER ENGINEER

Örneklere git
Blog
Next.js / ASP.NET Core / SQL6 dk çalışma
37/ 41

Dayanıklılık ve gözlem

Hız sınırı, zaman aşımı, retry ve devre kesici

Kötüye kullanıma ve yavaş bağımlılıklara karşı sistemi korumak.

AnlaÖrneği inceleKendin uygula

Kavramı anlayalım

Hız sınırı, bir istemcinin belirli sürede yapabileceği istek sayısını kısıtlar. Parola deneme, form spam’i ve maliyetli uç noktaların kötüye kullanımına karşı ilk savunmadır. ASP.NET Core’un yerleşik hız sınırlayıcısı sabit pencere, kayan pencere, token kovası ve eşzamanlılık algoritmaları sunar. Sınır aşıldığında 429 Too Many Requests ve mümkünse Retry-After döner. Bu projede giriş, iletişim formu ve analitik uçları ayrı politikalarla korunur.

Zaman aşımı, bir bağımlılığı sonsuza kadar beklememektir. Yanıt vermeyen bir servisi beklemek iş parçacıklarını, bağlantıları ve belleği tüketir; yavaşlık zincir boyunca yayılır. Her dış çağrının makul bir zaman aşımı olmalıdır.

Retry, geçici hataları (anlık ağ kopması, 503) tekrar denemeyle aşar; ama yalnız güvenle tekrarlanabilir (idempotent) işlemlerde ve artan bekleme süreleriyle yapılmalıdır. Aksi halde zaten zorlanan servise yük bindirir. Devre kesici, sürekli hata veren bir bağımlılığa bir süre hiç istek göndermeyerek hem onu hem kendini korur. .NET’te bunlar Microsoft.Extensions.Http.Resilience (Polly) ile birlikte yapılandırılır.

NERESİNDE KULLANIRSIN?

Bir bağımlılığın arızası, korumasız bir sistemde bütün uygulamayı durdurabilir.

SIK YAPILAN HATA

Ödeme gibi tekrarlanamaz bir POST’u otomatik retry ile iki kez göndermek.

CANLI ANİMASYON

Bir mektubun şehirdeki yolculuğu

İsteği bir mektup, sunucuyu bir şehir gibi düşün. Senaryo seç, oynat ve mektubun hangi kapıdan geçip nerede durdurulduğunu izle.

İSTEMCİKENARWEB SUNUCUSUAPI · ASP.NET COREVERİTarayıcıKullanıcının ekranıAğDNS · TCP · TLSTers vekilTLS sonlandırma, sıkıştırmaNext.js sunucusuSSR ve route handlerKestrelHTTP sunucusuHata yakalayıcıMiddlewareRoutingEndpoint seçimiHız sınırıMiddlewareKimlik doğrulamaKim olduğunYetkilendirmeNeye izin varModel bindingHTTP → C# + doğrulamaControllerEndpoint koduServisİş kuralları (DI)RedisDağıtık önbellekEF CoreLINQ → SQLSQL ServerSorgu planı, indeks
GİDİŞ →

Bir bot aynı formu bir dakikada altıncı kez gönderiyor.

TarayıcıSenin ekranın. İsteği yazan ve sonunda cevabı sayfaya çeviren yer.
1 / 5
01 / UYGULAMA

Aynı konu. Üç farklı derinlik.

Temsili örnek
builder.Services.AddRateLimiter(o =>
{
    o.RejectionStatusCode = StatusCodes.Status429TooManyRequests;
    o.AddFixedWindowLimiter("contact", w => { w.PermitLimit = 5; w.Window = TimeSpan.FromMinutes(1); });
});

[HttpPost, EnableRateLimiting("contact")] public Task<IActionResult> Send(...)

Dakikada 5 form gönderimi; aşılırsa istek iş mantığına ulaşmadan 429 alır.

Bu sayfa gerçek bir sunucuya veya veritabanına bağlanmaz. Kod örnekleri .NET 8, Next.js ve SQL Server için temsilîdir; süreler simülasyondaki örnek değerlerdir, ölçüm değildir. Örnekleri yalnız kendi geliştirme ortamında dene; gerçek bağlantı dizesi, token veya parola paylaşma.

02 / SIRA SENDE

Önce kendin dene.

Bir dış döviz kuru servisi zaman zaman 20 saniye yanıt vermiyor ve o anlarda bütün siteniz yavaşlıyor. Üç katmanlı bir koruma öner.

Çözümü ve açıklamasını göster
Açıklamalı çözüm
1) Zaman aşımı: çağrı başına ör. 2 saniye.
2) Devre kesici: art arda hatalarda 30 sn boyunca servisi çağırma.
3) Yedek: son başarılı kuru önbellekten sun ve 'güncellenemedi' notu göster.
(+ isteğe bağlı: arka planda periyodik güncelleme, istek yolundan çıkarma)

Yavaş bağımlılık istek yolundan ne kadar uzak tutulursa kullanıcı o kadar az etkilenir.