Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
Tek Sunucudan Milyonlarca Kullanıcıya: Vertical ve Horizontal Scaling, Stateless Tier
Uygulama tier'ını horizontal ölçeklemenin şartı stateless olmak: session, Data Protection key ring'i, IMemoryCache, yerel dosyalar ve zamanlanmış işler instance'ın dışına alınmalı. İki instance'lı gerçek bir denemede session'ı Redis'e taşımak tek başına hiçbir şeyi düzeltmiyor, çünkü session ve authentication cookie'leri Data Protection key'leriyle şifreli; key ring de paylaşılıp SetApplicationName verildiğinde iki sunucu tek uygulama gibi davranıyor.
Rate Limiting Tasarımı: Token Bucket, Sliding Window ve Distributed Rate Limiter
Tek bir rate limit için sayaç tek bir yerde durmalı: ASP.NET Core'un yerleşik limiter'ı sayacı her instance'ın belleğinde tuttuğu için üç instance'ta limit üç katına çıkar; çözüm gateway'de ya da Redis'te atomik bir sayaç. Beş algoritmanın karşılaştırması, Redis ve Lua ile gerçek çıktılı distributed sliding window limiter, 429, Retry-After, IETF RateLimit header taslağı ve partition key'in DoS riski.
Reliability Pattern'leri: Timeout, Retry, Backoff + Jitter, Circuit Breaker ve Load Shedding
Yavaş ya da çökmüş bir bağımlılığa karşı sırayla p99.9'a göre seçilmiş timeout, tek katmanda ve yalnız idempotent işlemde jitter'lı retry, retry budget, bağımlılık başına circuit breaker ve bulkhead, en sonda load shedding ve graceful degradation gerekir. Retry amplification (27 ve 243 çağrı), jitter, %10 retry budget ve circuit breaker'ın gerçek simülasyon çıktıları, failover ve .NET'in standard resilience handler varsayılanları.