Thundering Herd Problemi Nedir?
24 Kasım 2025 Pazartesi
Thundering Herd (Yıldırım Sürüsü) problemi, birçok istemcinin aynı anda aynı kaynağa veya servise erişmeye çalışması sonucu sistemde ani yük patlaması oluşması durumudur. Bu, özellikle cache (önbellek) veya API çağrılarında sıkça görülür. Örneğin, bir cache girdisi süresi dolduğunda binlerce istemci aynı anda veriyi yeniden almak için, tıpkı aynı hedefe koşan bir sürü gibi, sunucuya yüklenir.
Bu problem kısa sürede yüksek CPU, bellek ve ağ kullanımı yaratabilir, hatta sistemin çökmesine yol açabilir. Yani asıl amaç yükü azaltmakken, yanlış yapılandırılmış önbellek davranışı tam tersine sistemin kendi kendine DoS (Denial of Service) saldırısı yapmasına neden olur.
Thundering Herd genellikle cache invalidation, rate limiting veya request coalescing (istek birleştirme) teknikleriyle hafifletilir. Örneğin, aynı anda gelen benzer isteklerden yalnızca biri arka uca gönderilir, diğerleri o yanıtı paylaşır. Ayrıca önbellek yenilenme zamanları rastgeleleştirilerek (jitter ekleyerek) yük dağıtımı dengelenir.
Kısacası Thundering Herd problemi, sistemin kendi yoğunluğuna yenik düşmesidir. Akıllı önbellekleme stratejileri ve istek birleştirme mekanizmaları sayesinde bu “sürüyü” kontrol altına almak mümkündür. Modern sistemlerde dayanıklılık tasarımı yaparken bu davranış mutlaka göz önünde bulundurulmalıdır.
Thundering Herd Nasıl Önlenir?
1 - Request Coalescing:
Aynı anda gelen benzer istekler gruplanıp yalnızca biri arka uca gönderilir.
2 - Cache Jitter Uygulaması:
Tüm cache öğelerinin aynı anda süresinin dolmaması için TTL (Time-to-Live) değerlerine küçük rastgele gecikmeler (örneğin ±10%) eklenir.
3 - Stale-While-Revalidate Stratejisinin Kullanılması:
Cache süresi dolsa bile, eski veriyi geçici olarak sunarken arka planda yenisini getirilir. Böylece istemci akışı kesilmez.
4 - Rate Limiting veya Queue Uygulanması:
Aynı kaynağa yapılan eşzamanlı istek sayısı sınırlanır. Gerekirse istekler sıraya alınarak sistemin ani yükten korunması sağlanır.
5 -Prewarming:
Yoğun trafiğin geleceği bilinen durumlarda cache veya servisleri önceden kısmen doldurarak sistemin ani yüklenmeye hazır olmasını sağlanır.