MAISON CODE .
/ Tech · Performance · QA · Scaling · Backend

Auslastungstests: Absichtliche Zerstörung Ihrer Website

Ihre Website funktioniert mit 1 Benutzer. Funktioniert es mit 10.000? So simulieren Sie mit k6 massive Traffic-Spitzen und identifizieren Engpässe vor dem Black Friday.

AB
Alex B.
Auslastungstests: Absichtliche Zerstörung Ihrer Website

Das Muster „Erfolgskatastrophe“.

Der gefährlichste Moment für ein Startup ist nicht das Scheitern. Es ist Erfolg. Stellen Sie sich dieses Szenario vor: Sie starten eine neue Marketingkampagne. Oder Sie werden auf TechCrunch vorgestellt. Oder ein Influencer mit 5 Millionen Followern, der über Ihr Produkt postet. Der Verkehr steigt über Nacht um das Hundertfache. Sie sind bereit, Millionen zu verdienen. Und dann… wird die Seite weiß geladen. 504 Gateway-Timeout. 503 Dienst nicht verfügbar. Ihre Datenbank-CPU erreicht 100 %. Ihr Verbindungspool ist erschöpft. Benutzer aktualisieren die Seite und fügen mehr Ladung hinzu. Das System gerät in eine Todesspirale. Du gerätst in Panik. Sie versuchen, die Datenbank auf AWS zu aktualisieren, aber die Anwendung dauert 30 Minuten. Bis die Website wieder verfügbar ist, ist der Datenverkehr verschwunden. Die Nutzer sind wütend. Der Ruf ist beschädigt.

Das ist eine Erfolgskatastrophe. Sie waren im Marketing erfolgreich, im Ingenieurwesen jedoch gescheitert. Lasttests erzwingen, dass dieses Szenario in einer kontrollierten Umgebung stattfindet, Tage oder Wochen vor dem tatsächlichen Ereignis. Wir simulieren den Absturz. Wir finden den Engpass. Wir reparieren es. Wir wiederholen.

Warum Maison Code dies bespricht

Bei Maison Code sind wir auf „High Pressure“-E-Commerce spezialisiert. Unsere Kunden sind keine typischen Blogs. Das sind Marken, die um 10:00 Uhr limitierte Sneaker auf den Markt bringen. Sie steigen in 3 Sekunden von 0 Besuchern auf 50.000 Besucher. Wir haben aus Erfahrung gelernt, dass Skalierbarkeit keine Zauberei ist; es ist Mathematik. Wenn Sie Ihr System nicht mit dem Zehnfachen Ihrer erwarteten Last getestet haben, verfügen Sie nicht über ein robustes System. Du hast ein Gebet. Wir schreiben darüber, weil wir Gründern den Kummer ersparen wollen, der mit ansehen muss, wie sich ihr „großer Moment“ in einen öffentlichen Ausfall verwandelt.

Das Werkzeug: k6 (Grafana)

Der Standard war lange Zeit JMeter. Es war leistungsstark, aber schmerzhaft (XML-basierte GUI). Dann wurde Locust (Python) populär. Aber heute ist der Industriestandard k6. Warum k6?

  1. JavaScript: Tests werden in JS/TS geschrieben. Entwickler sind damit zufrieden.
  2. Leistung: Die Engine ist in Go geschrieben. Ein Laptop kann 30.000 gleichzeitige Benutzer simulieren.
  3. CI/CD: Läuft problemlos in einer GitHub Actions-Pipeline.
  4. Metriken: Es lässt sich nativ in Grafana/InfluxDB integrieren und sorgt so für eine schöne Echtzeitvisualisierung.

Implementierung: Schreiben eines k6-Skripts

Schauen wir uns ein robustes Lasttestskript an.

„Javascript http aus „k6/http“ importieren; import { sleep, check } from ‘k6’;

// Konfiguration: Das Lastprofil const-Optionen exportieren = { Stufen: [ { Dauer: ’30s’, Ziel: 20 }, // Auf 20 Benutzer hochfahren (Aufwärmen) { Dauer: ‘1m’, Ziel: 50 }, // Steigerung auf 50 Benutzer (Laden) { Dauer: ‘2m’, Ziel: 50 }, // Bei 50 Benutzern bleiben (Sustain) { Dauer: ’30s’, Ziel: 100 }, // Anstieg auf 100 Benutzer (Stress) { Dauer: ’30s’, Ziel: 0 }, // Herunterfahren (Abkühlen) ], Schwellenwerte: { // Fehlerbedingungen http_req_failed: [‘rate<0.01’], // Fehlerrate muss < 1 % sein http_req_duration: [‘p95<500’], // 95 % der Anfragen müssen < 500 ms sein }, };

Standardfunktion exportieren () { const BASE_URL = ‘https://staging.maisoncode.paris’;

// 1. Besuchen Sie die Homepage const resHome = http.get(BASE_URL); check(resHome, { ‘Heimstatus 200’: (r) => r.status === 200, ‘Schnell nach Hause’: (r) => r.timings.duration < 200, });

Schlaf(1); // Benutzer denkt…

// 2. Suche nach Produkt (CPU-intensiv) const resSearch = http.get(€{BASE_URL}/api/search?q=shirt); check(resSearch, { ‘Suchstatus 200’: (r) => r.status === 200 });

Schlaf(2); } „

Die 4 Arten von Leistungstests

Verstehen Sie den Unterschied, sonst testen Sie das Falsche.

  1. Rauchtest:

    • Ziel: Sicherstellen, dass das System eine minimale Last bewältigen kann.
    • Last: 1–5 virtuelle Benutzer (VUs).
    • Wann: Nach jeder Bereitstellung. „Haben wir den Server komplett kaputt gemacht?“
  2. Lasttest:

    • Ziel: Überprüfen, ob das System den erwarteten Datenverkehr verarbeitet.
    • Last: Der durchschnittliche Datenverkehr Ihres Produktionsstandorts (z. B. 50 VUs).
    • Wann: Vor Nebenveröffentlichungen.
  3. Stresstest:

    • Ziel: Den Bruchpunkt finden.
    • Last: Unendlich hochfahren, bis das System abstürzt.
    • Ergebnis: „Wir können mit 2.500 Benutzern umgehen. Bei 2.501 stürzt die Datenbank ab.“
    • Wann: Vor größeren architektonischen Änderungen.
  4. Einweichtest:

    • Ziel: Speicherlecks finden.
    • Last: Moderate Last (80 % Kapazität) für 24 Stunden.
    • Ergebnis: „Ah, die Speichernutzung steigt jede Stunde um 1 %. Wir haben ein Leck.“

Engpässe identifizieren

Du hast den Bruchpunkt gefunden. Fragen Sie jetzt Warum? Das „Warum“ ist selten der Code selbst. Meistens ist es die Infrastruktur.

  1. Die Datenbank (Der übliche Verdächtige):

    • Verbindungserschöpfung: „FATAL: Die verbleibenden Verbindungsslots sind für Nicht-Replikations-Superuser-Rollen reserviert.“
      • Fix: Verbindungspooling (PgBouncer).
    • CPU-Sättigung: Komplexe Abfragen, die vollständige Tabellenscans durchführen.
      • Fix: Indizierung. Replikate lesen. Verwenden Sie Redis, um häufige Abfragen zwischenzuspeichern.
  2. Brücken (APIs):

    • Ihre Website ist schnell, aber Sie rufen die Versand-API auf, um die Tarife zu berechnen.
    • Die Versand-API läuft unter Auslastung ab.
    • Ihre Anfragen warten in der Warteschlange auf die Versand-API.
    • Ihr Server hat nicht mehr genügend RAM.
    • Fix: Zeitüberschreitungen. Leistungsschalter.
  3. Die Ereignisschleife (Node.js):

    • Der Knoten ist Single-Threaded. Wenn Sie im Hauptthread umfangreiche CPU-Rechnungen (Verschlüsselung, Bildgrößenänderung) durchführen, blockieren Sie alle Benutzer.
    • Fix: Auslagern auf Worker-Threads oder serverlose Funktionen.

Die Semantik der Perzentile (S. 95, S. 99)

Beurteilen Sie Leistung niemals anhand des Durchschnitts. Durchschnittswerte verbergen Lügen.

  • Benutzer A: 100 ms
  • Benutzer B: 100 ms
  • Benutzer C: 10.000 ms (10 Sekunden)
  • Durchschnitt: ~3,4 s. (Sieht okay aus).
  • p99: 10s. (Erschreckend).

p95 (95. Perzentil) bedeutet: „Ignorieren Sie die langsamsten 5 % Ausreißer. Wie hoch ist die Geschwindigkeit für alle anderen?“ p99 (99. Perzentil) bedeutet: „Die Erfahrung der 1 % langsamsten Anfragen.“

Warum p99 wichtig ist: Im E-Commerce sind die „langsamsten Anfragen“ oft die Benutzer mit den größten Warenkörben. Benutzer mit 1 Artikel -> Schnelle Abfrage. Benutzer mit 50 Elementen -> Langsame Abfrage. Der p99-Benutzer ist Ihr High Value Customer. Wenn Sie p99 ignorieren, optimieren Sie für Schaufensterbummler und ignorieren die Wale.

Testen in der Produktion?

GEFAHR. Die Durchführung eines Stresstests für die Produktion ist riskant.

  1. Sie vermasseln Analytics: Google Analytics zeigt 10.000 „Bot“-Besuche an, was Ihre Marketingdaten ruiniert.
  2. Sie lösen Kosten aus: Wenn Sie Serverless/Vercel verwenden, zahlen Sie für die 10 Millionen Anfragen, die Sie gerade gespammt haben.
  3. Betrugswarnungen: Stripe kann Sie wegen „Card Testing“-Angriffsmustern sperren.

Die goldene Regel: Verwenden Sie eine Datenparitäts-Staging-Umgebung. Staging muss identisch mit Prod sein (gleiche AWS-Instanzgröße, gleiche DB-Größe). Wenn Staging ein winziger t2.micro und Prod ein riesiger m5.large ist, sind Ihre Testergebnisse bedeutungslos.

14. Chaos Engineering (Dinge absichtlich kaputt machen)

Ziehen Sie das Datenbankkabel ab. Was geschieht? Stürzt die Seite ab? Oder wird eine zwischengespeicherte Version angezeigt? Wir verwenden Chaos Mesh oder generische Pumba-Skripte, um Container während des Auslastungstests nach dem Zufallsprinzip zu töten. Wenn ein Replikat ausfällt, sollte der Load Balancer sofort eine Umleitung durchführen. Wenn der Redis-Cache stirbt, sollte die Datenbank die Last übernehmen (oder Feuer fangen). Dies vor 9 Uhr am Tag der Markteinführung zu wissen, ist unbezahlbar.

15. Browserbasierter Lasttest (k6-Browser)

Protokolltests (HTTP) rendern kein JavaScript. Sie erkennen keine „Hydration Errors“ oder „React Rendering Lag“. K6-Browser startet echte Headless Chrome-Instanzen. Es misst CLS (Cumulative Layout Shift) und FID (First Input Delay) unter Last. „Der Server ist schnell (200 ms API), aber der Client ist langsam (3 s JS-Ausführung), weil wir 5 MB JSON gesendet haben.“ Dies zeigen nur Browsertests.

16. Auslastungstests in CI/CD automatisieren (GitHub-Aktionen)

Führen Sie k6 nicht von Ihrem Laptop aus aus. Führen Sie es bei jeder Pull-Anfrage aus. Wir fügen einen „load-test.yml“-Workflow hinzu.

  1. Stellen Sie den Zweig zur Staging-URL bereit.
  2. Führen Sie „k6 run Smoke-test.js“ aus (auf 500 Sekunden prüfen).
  3. Wenn dies fehlschlägt, blockieren Sie die Zusammenführung. Dies verhindert „Leistungsrückgänge“. „Der Junior-Entwickler hat eine N+1-Abfrageschleife hinzugefügt. Der Test hat es erkannt, weil die Latenz von 200 ms auf 2000 ms gestiegen ist.“

17. Spike-Tests vs. Soak-Tests

Kennen Sie den Unterschied. Spike-Test:

  • Simuliert einen „Sneaker Drop“ oder eine „Super Bowl Ad“.
  • 0 -> 10.000 Benutzer in 10 Sekunden.
  • Ziel: Auto-Scaling-Trigger testen (Sind AWS-Server schnell genug hochgefahren?). Einweichtest:
  • Simuliert „Black Friday Weekend“.
  • Hohe Belastung für 48 Stunden.
  • Ziel: Ressourcenlecks testen (Speicher, Speicherplatz, Dateideskriptoren). Sie brauchen beides.

18. Fazit

Leistung ist kein „Nice to Have“. Es ist eine Funktion. Skalierbarkeit ist keine Zauberei. Es ist Ingenieurskunst. Lasttests sind die Disziplin zur Validierung Ihres Engineerings. Warten Sie nicht auf den Blackout. Zerbrich die Glühbirne selbst, während du eine Ersatzbirne in der Tasche hast.

Bereiten Sie sich auf den Black Friday vor?

Warten Sie nicht bis November. Maison Code bietet „Infrastruktur-Stresstests“-Dienste an. Wir simulieren 100-fache Verkehrsspitzen, identifizieren Ihre Engpässe und implementieren funktionierende Auto-Scaling-Richtlinien.

Kontaktieren Sie uns, um Ihren Umsatz zu sichern.



Erwarten Sie viel Verkehr?

Wir führen Last- und Stresstests mit k6 durch, um die Infrastrukturkapazität zu validieren und die Richtlinien zur automatischen Skalierung zu überprüfen. Stellen Sie unsere Architekten ein.