GH GambleHub

Yük testi ve stres

Yük testi ve stres

1) Neden ihtiyacınız var

Hedefler:
  • Kapasiteyi onaylayın (sistemin verilen SLO'ya kaç RPS/rekabetçi oturuma dayanacağı).
  • Darboğazları bulun (CPU/IO/DB/ağlar/kilitler/havuzlar).
  • CI/CD'de performans bütçeleri ve kapıları oluşturun.
  • Serbest bırakma riskini azaltın (p95/p99 regresyon, pik hata büyümesi).
  • Plan kapasitesi/maliyeti (ölçek ve rezervler).

2) Perf testleri türleri

Yük: zirvelere yakın gerçekçi trafik; SLO doğrulaması.
Stres: sınırın üzerinde/üstünde büyüme - kırıldığı yerde bozulma davranışı.
Spike: hızlı yük atlaması - elastikiyet/autoscale.
Islak/Dayanıklılık: saat/gün - sızıntılar, parçalanma, gecikme sürüklenme.
Kapasite/Ölçeklenebilirlik: Ölçeklendirme ile iş hacmi/gecikme süresi nasıl değişir; Amdal/Gustafson yasası.
Smoke perf: Her sürümde kısa bir "duman" çalışması (performans saygınlığı).


3) Trafik oluşturma modelleri

Sabit VUs/eşzamanlılık: 'N' kullanıcıları, her biri istemci üzerinde> kuyruğa girme istekleri yapar. Aşırı yük gizleme riski.
Varış hızı: Gerçek hayatta olduğu gibi λ yoğunlukta (req/s) bir uygulama akışı. Genel API'ler için daha doğru.

Little Yasası: 'L = λ × W'.
Havuz/hizmet için minimum paralellik '≈ λ W' × (envanterin %20-50'sini ekleyin).
'λ' çıktısı olduğunda, 'W' ortalama servis süresidir.


4) Profilleri ve senaryoları yükleyin

Kullanıcı yolculuğu karışımı: komut dosyalarının paylaşımları (oturum açma, göz atma, para yatırma, ödeme...).
Düşünme zamanı: kullanıcı duraklamaları (dağılımlar: üstel/lognormal).
Veri profili: yanıtların boyutu, yük, parametrelerin değişkenliği.
Korelasyon: Gerçek bir akışta olduğu gibi bağlantı adımları (çerezler/belirteçler/ID).
Soğuk/sıcak/sıcak önbellek: bireysel çalışır.
Okuma vs Yazma: okuma/kayıt dengesi, retrays için idempotency.
Çok bölgeli: RTT, POP/ASN ile dağıtım.


5) Test ortamı

İzolasyon: Stand, topoloji/ayarlarda ürüne yakındır (ancak ürünü "dövmeyin").
Veriler: PII maskeleme, hacimler, satışlarda olduğu gibi endeksler.
Yük jeneratörleri: CPU/ağa karşı durmayın; Dağıtılmış koşucular, zaman senkronizasyonu.
Gözlemlenebilirlik: metrikler/izler/günlükler, çevre üzerinde sentetikler, CPU/yığın profillerinin dışa aktarılması.


6) Metrikler ve SLI

Verim: RPS/İşlemler/sn

Gecikme: p50/p95/p99, TTFB, sunucu süresi vs ağ.
Hatalar: 5xx/4xx/domain hatalarının paylaşımı.
Doygunluk: CPU, yük avg, GC, disk IOps/gecikme, ağ, havuz bekleme.
İş SLI: ≤ 5s mevduat başarısı, ≤ 2s sipariş onayı.

SLO'nun eşiklerini alın (örneğin, "99. 95 % ≤ 300 ms"), çalışma sırasında yanma oranını izleyin.


7) Darboğazları bulma (teknik)

1. Sistemi hedef yükün %60-80'i kadar sürekli olarak ısıtın.
2. Adımlarda artış (rampa) - p95/p99 ve hata oranının büyüdüğü yerlerde düzeltin.

3. Maç p99 sivri uçları:
  • Havuzlarda kuyruklar (DB/HTTP),
  • WAIT/kilitlerin (DB) büyümesi,
  • GC-duraklatır/yığın,
  • ağ yeniden iletimleri/paket kaybı,
  • disk gecikmesi/önbellek özlüyor.
  • 4. Lokalize: sorgu yolu ile ikili arama, profiller (CPU/alloc/lock-profile).
  • 5. "Şişe'yi düzeltin - ayarlama - koşuyu tekrarlayın.

8) Stres altındaki davranışlar

Zarif bozulma: limitler, devre kesiciler, geri basınç kuyrukları, işleme için kabul edilir.
Retrays: maksimum 1, sadece idempotent; jitter; Yeniden ödeme bütçesi RPS'nin %10'unu ≤.
Fail-open/Fail-closed: kritik olmayan bağımlılıklar için fail-open'a izin ver (önbellek/taslaklar).
Basamaklı başarısızlık: havuzların/kotaların izolasyonu (bölme), hızlı zaman aşımları, işlevlerin "düzgün" devre dışı bırakılması (özellik bayrakları).


9) Araçlar (görev için seçim)

K6 (JavaScript, açık/açık model, hızlı, kullanışlı CI).
JMeter (ekosistem açısından zengin, GUI/CLI, eklentiler, ancak daha ağır).
Gatling (Scala DSL, yüksek performans).
Locust (Python, betik esnekliği).
Vegeta/hey/wrk (mikro banklar ve hızlı kontrol).

Kural: PR'de duman kalemi için bir'ana "araç + hafif CLI.


10) Örnekler (snippet'ler)

10. 1 k6 (varış oranı ile açık model)

js import http from 'k6/http';
import { sleep } from 'k6';

export const options = {
scenarios: {
open_model: {
executor: 'ramping-arrival-rate',
startRate: 200, timeUnit: '1s',
preAllocatedVUs: 200, maxVUs: 2000,
stages: [
{ target: 500, duration: '5m' },  // до 500 rps
{ target: 800, duration: '5m' },  // стресс
{ target: 0,  duration: '1m' }
]
}
},
thresholds: {
http_req_duration: ['p(95)<300', 'p(99)<800'],
http_req_failed: ['rate<0.005'],
},
};

export default function () {
const res = http.get(`${__ENV.BASE_URL}/api/catalog?limit=20`);
sleep(Math.random() 2); // think-time
}

10. 2 JMeter (profil fikri)

Thread Group + Basamak Thread или Eşzamanlılık Thread (open-like).
HTTP İstek Varsayılanları, Çerez Yöneticisi, CSV Veri Kümesi.
Arka Uç Dinleyici - AkınDB/Grafana; Zamana/koda göre iddialar.

10. 3 Çekirge (Python)

python from locust import HttpUser, task, between class WebUser(HttpUser):
wait_time = between(0.2, 2.0)
@task(5)
def browse(self): self.client.get("/api/catalog?limit=20")
@task(1)
def buy(self): self.client.post("/api/checkout", json={"sku":"A1","qty":1})

11) Veri, korelasyon, hazırlık

Tohum verileri: dizinler, kullanıcılar, bakiyeler, belirteçler - satışlarda olduğu gibi.
PII maskeleme/anonimleştirme; Gerçek dağılımların üstünde sentetikler üretmek.
Korelasyon: Yanıtlardan kimlikleri/belirteçleri çıkarın (RegExp/JSONPath) ve sonraki adımlarda kullanın.


12) Koşular sırasında gözlemlenebilirlik

Rotalar boyunca KIRMIZI panolar (Oran, Hatalar, Süre).
Örnekler - metriklerden izlere geçiş (trace_id).
Hata günlükleri: örnekleme + toplama, kopyalar/idempotans.
Sistem: CPU/GC/yığın, diskler/ağ, havuz bekleme.
DB: üst sorgular, kilitler, indeks taramaları, şişkinlik.


13) Otomasyon ve performans kapıları

CI: birleştirmede kısa koşular (örn. K6 2-3 dakika) eşikleri ile.
Gece/Haftalık: Ayrı bir ortamda uzun ıslatma/stres; Raporlar ve eğilimler.
Kanarya bültenleri: promosyonun "kapısı'olarak SLO'nun (hata oranı, p95) analizi.
Regresyonlar: taban çizgisi vs mevcut yapı; Bozulmada uyarı> % X.


14) Kapasite planlama ve maliyet

Eğriler iş hacmi - gecikme: diz noktasını tanımlayın - p99 keskin bir şekilde büyüdükten sonra.
Ölçeklendirme: Ölçekleme verimliliğini ölçün (RPS delta/düğüm deltası).
Maliyet: "$/saat başına RPS", zirve etkinlikleri + DR rezervi için rezerv.


15) Anti-desenler

Prod'u kontrol etmeden çırpın veya "boş'bir ortamda test edin, prod gibi değil.
Aşırı yükü gizleyen sabit VU'lu kapalı model.
Düşünme zamanı/veri eksikliği - gerçekçi olmayan önbellek isabetleri veya tam tersi - kaynağa fırtına.
Özel akış yerine bir "/ping "komut dosyası.
Gözlemlenebilirlik eksikliği: "Sadece RPS ve ortalama gecikme görüyoruz".
Kontrolsüz retrays - kendi kendine DDoS.
Hipotezleri/değişiklikleri düzeltmeden test ve optimizasyonları karıştırma.


16) Kontrol listesi (0-30 gün)

0-7 gün

SLI/SLO ve hedef trafik profillerini tanımlayın (mix, think-time, data).
Aracı seçin (k6/JMeter/Locust), RED panolarını kaldırın.
Stand ve tohum verilerini hazırlayın, üçüncü taraf limitlerini/captchalarını devre dışı bırakın.

8-20 gün

Senaryolar oluşturun: Açık model (varış oranı), soğuk/sıcak/sıcak önbellek.
Çalıştırın yük> stres> başak; Diz noktalarını ve darboğazları düzelt.
Performans kapılarını CI'da (mikro-run) uygulayın.

21-30 gün

Soak testi 4-24h: GC sızıntıları/sürüklenme, stabilizasyon.
Belge sınırları, kapasite planı, "RPS - p95/oshibki" çizimleri.
"Limitlerin/ölçeğin nasıl arttırılacağı've" nasıl bozulacağı "runbook hazırlayın.


17) Olgunluk metrikleri

Trafiğin ≥ %80'ini kapsayan gerçekçi profiller (mix, think-time, data) vardır.
KIRMIZI panolar + izleme tüm testler için bağlanır.
Performans kapıları p95/hataları geriletirken bültenleri engeller.
Kapasite ve diz noktası kilit hizmetler tarafından belgelenmiştir.
Aylık ıslatma/stres koşuları ve ilerleme raporları.
"Spike" direnci autoscale ve cascade-fail yokluğu ile doğrulanır.


18) Sonuç

Yük testi, bir kerelik bir ölçüm değil, düzenli bir mühendislik uygulamasıdır. Gerçek kullanıcıları modelleyin (açık model), müşterinin deneyimini (SLI/SLO) neyin yansıttığını ölçün, gözlemlenebilirliği ve kapıları CI/CD'de tutun, stres/başak/ıslatma koşuları yapın ve diz noktasını düzeltin. Ardından zirve olayları ve siyah kuğular yönetilebilir senaryolara dönüşür ve performans platformunuzun öngörülebilir ve ölçülebilir bir parametresine dönüşür.

Contact

Bizimle iletişime geçin

Her türlü soru veya destek için bize ulaşın.Size yardımcı olmaya her zaman hazırız!

Entegrasyona başla

Email — zorunlu. Telegram veya WhatsApp — isteğe bağlı.

Adınız zorunlu değil
Email zorunlu değil
Konu zorunlu değil
Mesaj zorunlu değil
Telegram zorunlu değil
@
Telegram belirtirseniz, Email’e ek olarak oradan da yanıt veririz.
WhatsApp zorunlu değil
Format: +ülke kodu ve numara (örneğin, +90XXXXXXXXX).

Butona tıklayarak veri işlemenize onay vermiş olursunuz.