Stres Testi
- İngilizcesi
- Stress Testing
Kısaca
Stres testi, kırılma noktasını bulmak ve düzgün biçimde başarısız olup toparlandığını doğrulamak için bir sistemi bilerek beklenen iş yükünün ötesine iter.
Stres testi nedir?
Stres testi, bir sistemin nerede ve nasıl bozulduğunu öğrenmek için sistemi bilerek aşırı yükler. Amaç performans hedeflerinin karşılandığını doğrulamak değil; sınırı bulmak, hangi bileşenin önce pes ettiğini görmek ve sistemin düzgün biçimde başarısız olduğunu kontrol etmektir. Düzgün başarısız olmak, çökmek, veri kaybetmek ya da diğer servisleri de beraberinde götürmek yerine fazla istekleri net hatalarla reddetmek ve kontrollü biçimde yavaşlamak demektir.
Bir stres testi genellikle trafiği adım adım artırır; örneğin beklenen zirvenin çok ötesine geçene kadar her birkaç dakikada sanal kullanıcı sayısını ikiye katlar. Test sürerken ekip hata oranlarını, yanıt sürelerini, CPU'yu, belleği, bağlantı havuzlarını ve kuyruk uzunluklarını izler. Stres, bir diski doldurmak, belleği sınırlamak ya da bir bağımlılığı çok yavaşlatmak gibi başka kaynakları da hedefleyebilir. Sistem bozulduktan sonra toparlanmayı kontrol etmek için yük kaldırılır: kendi kendine geri gelip gelmediği ve bunun ne kadar sürdüğü incelenir.
Yeni bir sandalyeyi kırılana kadar üzerine ağırlık yığarak test eden mühendisleri düşünün. Güvenlik payını ve sandalyenin yavaş yavaş mı eğildiğini yoksa uyarı vermeden mi kırıldığını öğrenirler. Ekipler stres testlerini büyük lansmanlardan önce, kapasite planlaması için ve rate limiting, circuit breaker, backpressure ve otomatik ölçeklendirme sınırları gibi korumaların aşırı yük altında gerçekten çalıştığını doğrulamak için yapar.
Stres testi sıklıkla yük testiyle karıştırılır. Yük testi, normal yoğun bir gün gibi beklediğiniz trafikteki davranışı kontrol ederken stres testi bilerek bu düzeyin ötesine geçer. Ayrıca, dayanıklılığı test etmek için çöken bir sunucu ya da yavaş bir ağ gibi arızalar enjekte eden kaos mühendisliğinden (chaos engineering) de farklıdır; stres testi sistemi işle boğar. Ani bir trafik patlaması uygulayan spike testleri çoğu zaman bir tür stres testi olarak ele alınır.
Önemli noktalar
- Stres testi, kırılma noktasını bulmak için bir sistemi beklenen yükün ötesine iter.
- Hangi kaynağın ya da bileşenin önce başarısız olduğunu ortaya çıkarır.
- İyi bir sonuç, yüksek bir sınır değil, düzgün başarısızlık ve hızlı toparlanmadır.
- Yük testi beklenen trafiği kontrol eder; stres testi bilerek onu aşar.
- Yalnızca size ait sistemlere, ideal olarak yalıtılmış bir ortamda stres testi uygulayın.
Örnek
const URL = "http://localhost:8000/"; // only stress-test systems you own
const attempt = () =>
fetch(URL, { signal: AbortSignal.timeout(2000) }).then((res) => res.ok, () => false);
// Double the concurrent users until more than 5% of requests fail
for (let users = 50; users <= 12800; users *= 2) {
const results = await Promise.all(Array.from({ length: users }, attempt));
const errorRate = results.filter((ok) => !ok).length / users;
console.log(`${users} users: ${(errorRate * 100).toFixed(1)}% errors`);
if (errorRate > 0.05) break;
}Sık sorulan sorular
Stres testi ile yük testi arasındaki fark nedir?
Yük testi, beklediğiniz trafik altındaki performansı ölçer. Stres testi ise kırılma noktasını bulmak ve sistemin nasıl başarısız olup toparlandığını görmek için bu düzeyin ötesine geçer.
Bir sistemin düzgün biçimde başarısız olması ne demektir?
Aşırı yük altında sistemin kontrollü biçimde bozulması demektir; örneğin çökmek, veriyi bozmak ya da diğer servislerde arızaya yol açmak yerine bazı istekleri HTTP 503 gibi net bir hatayla reddetmesi.
Spike testi nedir?
Spike testi, sistemin ani artışları nasıl karşıladığını ve sonrasında ne kadar hızlı normale döndüğünü kontrol etmek için saniyeler içinde normal yükün on katı gibi ani ve büyük bir trafik patlaması uygular.
İlgili sayfalar
- Yük TestiTest ve Kalite, s. 36Yük testi, bir sistemin beklenen trafik altında nasıl davrandığını ölçmek için aynı anda çok sayıda kullanıcıyı ya da isteği simüle eden performans testidir.
- Chaos EngineeringDevOps ve Bulut, s. 8Chaos engineering, bir sisteme sunucu çökertmek gibi kasıtlı arızalar enjekte ederek sistemin beklendiği gibi çalışmaya devam ettiğini doğrulama pratiğidir.
- ÖlçeklenebilirlikYazılım Mimarisi, s. 30Ölçeklenebilirlik, bir sistemin daha fazla kullanıcı ya da veri gibi artan iş yükünü, kaynak ekleyerek performansı düşmeden karşılayabilme yeteneğidir.
- Rate LimitingBackend ve API'ler, s. 37Rate limiting, istemcinin belli bir sürede yapabileceği istek sayısını sınırlayıp sunucuyu ya da API'yi kötüye kullanımdan ve aşırı yükten koruyan tekniktir.
- BackpressureBackend ve API'ler, s. 7Backpressure, yavaş tüketicinin hızlı üreticiye yavaşlaması için sinyal vermesini sağlayan, verinin işlenebileceğinden hızlı birikmesini önleyen mekanizmadır.
- Circuit Breaker DeseniYazılım Mimarisi, s. 4Circuit breaker deseni, arızalı bir bağımlılığa yapılan çağrıları bir süre durdurarak ve zaman aşımlarını beklemek yerine hızlıca hata vererek sistemi korur.
- Performans TestiTest ve Kalite, s. 19Performans testi, bir sistemin beklenen ve aşırı yük altındaki hızını, kararlılığını ve ölçeklenebilirliğini yanıt sürelerinden kırılma noktasına kadar ölçer.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin