
Hallo allerseits, ich bin mit Alexey Pristavko, DataLine-Webprojektleiter, in Kontakt.
Der Black Friday, die größte E-Commerce-Veranstaltung der Welt, findet jährlich in den letzten Novembertagen statt. Dies ist die Zeit für Rekordrabatte, Geschäfte, die fast um Mitternacht geöffnet sind, und die Standorte, die an der Aktion teilnehmen, fallen, ungeachtet des starken Anstiegs des Verkehrsflusses.
Aus diesem Grund werden wir anhand ihres Beispiels analysieren, wie Sie sich auf eine ernsthafte Erhöhung der Belastung einer Website oder Webanwendung vorbereiten können.
Unter der Katze werden wir ausführlich darüber sprechen, wie IT-Manager, Entwickler und Administratoren von Online-Shops Großereignisse überstehen können.
Was den Schwarzen Freitag bedroht
Wie ich oben geschrieben habe, ist der Schwarze Freitag ein Tag, der allen, die an der Wartung von E-Commerce-Websites beteiligt sind, große Probleme bereitet.
Um es zu fühlen, betrachten Sie die Tabelle unten. Dies spiegelt die Zunahme der Anzahl der Anfragen auf der Website während des Black Friday wider.

Im Vergleich zu normalen täglichen Spitzenwerten, wenn keine Aktien gehalten werden, wächst der Verkehr am Black Friday um 100-200%, und dies ist nicht die Grenze.
Wenn eine große Website bereits viel eigenen Traffic hat, kann ein bescheidener Online-Shop während des Kampagnenzeitraums problemlos so viele Besucher empfangen und ersticken. Um den alten Witz ein wenig zu paraphrasieren: "Das Geschäft hat alle Geschäfte anders gemacht, und der Online-Black Friday hat alle ausgeglichen."
Am Black Friday verdient "füttert" den Verkäufer das ganze nächste Jahr. Das Unternehmen ist sehr daran interessiert, die maximale Anzahl neuer Kunden zu gewinnen, die auf die Website zurückkehren, um immer wieder zu kaufen. Dafür sollten ihre ersten Erfahrungen mit der Site reibungslos verlaufen, und dies sicherzustellen, ist die Aufgabe von IT-Spezialisten.
Je mehr Kunden gleichzeitig vor Ort sind, desto höher sind die Anforderungen an Stabilität und Reaktionsgeschwindigkeit. Sicherlich haben Sie bemerkt, dass die Website des Geschäfts, zu der Sie von der Zielseite von blackfridaysales gewechselt haben, extrem langsam oder gar nicht funktioniert hat. Ich bezweifle, dass Sie auf den Download warten mussten, aber nach einigen Sekunden nicht gegangen sind.
Im Folgenden wird erläutert, wie Kunden vor negativen Erfahrungen und die Website vor Abstürzen aufgrund von Überlastung geschützt werden können. Weitere Tipps gelten jedoch für jede erwartete Spitzenlast.
Im Allgemeinen gibt es zwei Phasen der Vorbereitung eines Standorts für mehr Verkehr:
technische und
organisatorische. In diesem Artikel werden wir die technische Phase diskutieren und die organisatorischen Details im zweiten Teil, der in einer Woche veröffentlicht wird, ausführlich beschreiben.
Technische Vorbereitung der Website
Ein kleiner Haftungsausschluss: Erwarten Sie hier keine detaillierten Anweisungen, was, wo und wie Sie es festziehen können, damit „Glück für alle umsonst ist und niemand beleidigt bleibt“. Erstens sind Websites und Projekte für jeden unterschiedlich. Zweitens ist eine spezifische technische Beratung zu einer bestimmten Software mehr als ausreichend. Einschließlich auf Habré. Zunächst möchte ich den Lesern die Grundprinzipien der Arbeit mit Webprojekten vermitteln und die Ausgangspunkte aufzeigen, grundlegende Techniken und plattformunabhängige Nuancen einführen.Beginnen wir mit dem Axiom: Der Benutzer wartet nicht gern, daher ist es äußerst wichtig, mit Timings und Reaktionsgeschwindigkeit zu arbeiten. Am Black Friday werden viel mehr Anfragen an die Site gestellt als gewöhnlich, und es kann nicht nur zu einem Rückgang der Conversions aufgrund einer langen Auslastung kommen, sondern auch zu einem Übermaß an HTTP-Zeitüberschreitungen (die Site reagiert nicht).
In den meisten Fällen werden Standorte nicht aufgrund physischer Ausfälle belastet, sondern weil die Antwortzeit aufgrund von Überlastung einiger Knoten die Zeitüberschreitungen zu überschreiten begann. Dies ähnelt einem Stau, und für eine Weile müssen Sie die Kontrolle über Ihre eigenen Hände übernehmen: Geräte erweitern (skalieren), anpassen, abschneiden und konfigurieren (Timeouts), die Belastung von Fahrzeugen (Pakete und Anforderungen) optimieren und mit Ausnahmen arbeiten.
Da die Leistung der Site im Zusammenhang mit der Site zwei Aspekte hat - die Antwortgeschwindigkeit und die Anzahl der gleichzeitig verarbeiteten Anforderungen, werden wir diese Parameter verbessern.
In den meisten Fällen gibt ein Unternehmen die Antwortgeschwindigkeit als Website-Geschwindigkeit gemäß Google Analytics und die Anzahl gleichzeitiger Anfragen als Anzahl der Benutzer gleichzeitig auf der Website an.
In der technischen Arbeit ist es nicht sehr bequem, mit diesen Parametern zu arbeiten.
Als nächstes werde ich eine geeignetere Metrik für Berechnungen vorschlagen.
Wir optimieren die Reaktionsgeschwindigkeit

Bei der Optimierung der Antwortgeschwindigkeit interessieren uns zwei Indikatoren:
Serverantwortgeschwindigkeit und
Seitenladezeit.Die Ladezeit der Seite besteht aus folgenden Links:
- Generierungszeit für Serverseiten;
- Seitenübertragungszeit vom Server zum Client;
- Die Seitenverarbeitungszeit im Browser des Clients.
Wenn alles wie gewohnt funktioniert, ist der entscheidende Faktor für die Ladezeit der Seite nicht die Zeit, zu der die Seite vom Server generiert wurde, und die Zeit, zu der die Seite über das Netzwerk geliefert wurde, sondern die Qualität des Frontends und die Geschwindigkeit der Site im Browser. Da letzteres vollständig auf der Benutzerseite liegt, haben Sie keine Angst vor den Bremsen am Black Friday. Probleme können jedoch aufgrund von Überlastungen Ihres Internetkanals oder der Bereitstellung einer externen Komponente (Partnerzähler, Online-Chats, CRM-Plugins usw.) auftreten.
Wie gehe ich damit um? Hier sind einige Arbeitstipps:
- Überprüfen Sie die Auslastung des Internetkanals. Zählen Sie das geschätzte Wachstum. Erweitern Sie im Zweifelsfall den Kanal. Einige Anbieter bieten Ihnen zusätzlich zu den laufenden teuren Verlängerungen möglicherweise eine vorübergehende Verlängerung für die Spitzenzeit an (viel billiger) oder erlauben Ihnen sogar, die Höchstgeschwindigkeit kurzzeitig zu überschreiten.
- Verwenden Sie ein CDN? Wenden Sie sich an den technischen Support und warnen Sie vor geplantem Verkehrswachstum. Sie bereiten sich auch auf den allgemeinen Höhepunkt vor, und Ihre Prognose wird sich als nützlich erweisen. Wenn das CDN verspricht, dass alles in Ordnung sein wird, sich aber trotz allem „hinlegt“, hilft das Vorhandensein von Korrespondenz, Schadensersatzansprüche geltend zu machen.
- Erstellen Sie im Voraus ein Skript, um externe Komponenten bei Problemen vorübergehend zu deaktivieren. Richten Sie das Szenario am Unternehmen aus. Es wird nicht überflüssig sein, mit dem technischen Support der verwendeten Dienste zu kommunizieren, es ist jedoch normalerweise unmöglich, sie anderweitig irgendwie zu beeinflussen.
- Auf vielen Websites wird statisch über den Anwendungsserver gerendert. Unter hoher Last steigt die Anzahl der Anforderungen an die Statik um ein Vielfaches und sie beginnen mit der Anwendung selbst um Ressourcen zu konkurrieren. Stellen Sie sicher, dass Sie die statische Rückgabe direkt von Nginx aus konfigurieren. Erstens wird es viel besser damit umgehen, und zweitens wird es viel nützlichere Arbeit für Ihre Apache-, Tomcat- oder Jetty-Threads geben.
Reaktionsgeschwindigkeit verbessern

Die Optimierung der Reaktionsgeschwindigkeit an sich bezieht sich auf die allgemeine Verbesserung der Standortleistung. Theoretisch hilft es, den Arbeitsaufwand der Anwendung zu reduzieren und dadurch die Skalierung zu verbessern. Wenn jede Anforderung „billiger“ wird, können Sie mehr Anforderungen mit denselben Ressourcen verarbeiten.
In der Praxis erfordert die Optimierung der Reaktionsgeschwindigkeit jedoch viel unabhängige Arbeit. Es ist unmöglich, alles auf einmal zu optimieren, aber es ist einfach, dabei etwas zu zerbrechen.
Tipp: Systematisch denken. Angenommen, die Codeleistung hat zugenommen, und die Anwendung hat begonnen, gleichzeitig mehr Datenbankabfragen durchzuführen. Aber hier ist das Problem: Die Datenbankleistung erlaubt es nicht, eine solche Anzahl von Anforderungen zu verarbeiten, und die Site insgesamt wurde nur schlechter, und vor Beginn der Aktion wurde wertvolle Zeit aufgewendet.
Es ist daher besser, sich auf Skalierung und Skalierbarkeit zu konzentrieren und die allgemeine Optimierung getrennt von der Vorbereitung auf den Black Friday durchzuführen, um nicht aufgrund harter Fristen durcheinander zu kommen. Denken Sie daran, jetzt ist es unsere Aufgabe sicherzustellen, dass die Baustelle in der Spitze der Lasten nicht schlechter funktioniert als draußen.
Die Geschwindigkeit der Seitengenerierung ist für uns nur in Verbindung mit einem anderen Indikator von Interesse - der Menge der eingehenden Last.
Bitte beachten Sie: Für die Site ist nur die Anzahl der gleichzeitigen Anforderungen von Bedeutung, die von Benutzern erstellt werden, und nicht die Anzahl der Online-Benutzer auf der Site. Und mit akzeptabler Genauigkeit die
Anzahl der Anfragen pro Sekunde anhand der
Anzahl der Besucher zu berechnen,
ist ziemlich schwierig (darüber habe ich oben geschrieben). Fragen Sie das Unternehmen besser nach anderen Messdaten - Seitenaufrufen pro Stunde und Serverzeit.
Als Ergebnis erhalten wir ein verständliches Ziel: die Seitengenerierung für die Zeit X mit der Anzahl der Anforderungen pro Sekunde Y sicherzustellen. Mit bestimmten numerischen Metriken ist es viel einfacher, den Bereitschaftsgrad und das aktuelle Ergebnis zu bewerten.
Hier ist ein allgemeiner technischer Trainingsplan:
- Finden Sie die aktuellen Indikatoren heraus (führen Sie Lasttests der aktuellen Version der Site durch);
- Zu verstehen, was genau fehlt und wie viel Ressourcen für die Bestellung erforderlich sind;
- Ressourcen hinzufügen;
- Wiederholen Sie den Stresstest und prüfen Sie, ob dies hilft.
Sieht zu einfach aus? Sie haben Recht, jeder Punkt ist mit vielen Überraschungen behaftet.
Sehr oft verbessert das Hinzufügen von Ressourcen die Situation teilweise, spart aber nicht das Ganze. Oder in einer Testumgebung funktioniert die Site wie eine Uhr und auf dem Prod - wieder die Bremsen.
Als Nächstes zeige ich Ihnen, wie Sie potenzielle Probleme identifizieren und Schwachstellen beheben können. Beginnen wir mit der Durchführung von Stresstests und erhalten ein realistisches Ergebnis.
Wir führen Lasttests korrekt durch

Wo testen?
Oft werden Stresstests an einem produktiven System durchgeführt. Dies kann gut sein, um die Situation als Ganzes zu kontrollieren, aber nicht, um bestimmte Probleme iterativ zu lösen. Denken Sie daran, dass normalerweise nach neu entdeckten Problemen nach der Beseitigung neue auftreten können. Silberkugeln treffen selten das Ziel.
Ein fehlgeschlagener Auslastungstest kann für Site-Benutzer zu Unannehmlichkeiten führen oder ihn sogar für eine Weile „unterbrechen“. Es ist am besten, einen speziellen Bereich als Versuchskaninchen zu verwenden.
Es muss folgende Anforderungen erfüllen:
- Der dedizierte Bereich sollte völlig unabhängig und vom Produktiven isoliert sein.
- Idealerweise sollte ein dedizierter Bereich mit der Größe des Produkts übereinstimmen. Ein Modell in großem Maßstab ist ebenfalls geeignet, verringert jedoch die Qualität und Bedeutung von Tests. Wenn die Belastung einer Ressource nicht linear zunimmt (wie dies normalerweise der Fall ist), zeigt Ihr Modell nicht an, dass die Ressource unter Volllast vorzeitig erschöpft ist.
- Es ist am besten, genau die gleiche (aber nicht die gleiche!) Ausrüstung für Tests wie auf dem Produkt zu verwenden. Andernfalls ist es nicht möglich, Qualität bereitzustellen, selbst wenn die quantitativen Werte der Ressourcen eingehalten werden. Es kann im entscheidenden Moment einen grausamen Witz spielen. Wenn dies nicht möglich ist, testen Sie die Leistung des Geräts unter Ihrer Last und bestimmen Sie den Einstellkoeffizienten.
Lassen Sie uns nun über Möglichkeiten zum Generieren einer Testlast sprechen. Ich werde einige grundlegende Techniken nennen, von denen jede ihre Vor- und Nachteile hat.
Wie erstelle ich eine Last?
1. Testen auf Anforderungen aus den ProtokollenEs ist möglich, den Verkehrsfluss durch die Battle Server-Protokolle zu emulieren. Ein offensichtliches Plus dieses Ansatzes ist, dass Sie sich nicht mit Analysen, statistischen Modellen und einem synthetischen Verkehrsprofil befassen müssen.
Sie müssen die Protokolle jedoch noch von Anforderungen bereinigen, die nicht ausgeführt werden können oder nicht benötigt werden.
Sie müssen beispielsweise keine produktiven Waren kaufen, da dies zu Problemen mit dem Produktinhalt der Datenbank führt.
Es wird schwierig sein, realistische Verzögerungen zwischen Anfragen zu reproduzieren.
Das Emulieren von Benutzersitzungen ist ebenfalls äußerst schwierig. Diese Methode kommt dem hitbasierten Testen sehr nahe.
2. Verwenden von Yandex.Tank und PhantomDer Panzer in Verbindung mit Phantom ist ein sehr praktisches und beliebtes Werkzeug für Treffer-basierte Tests. Es hat eine durchdachte Oberfläche und ermöglicht es Ihnen, die Last zu verwalten. Um mit dem Schälen aus einem Tank zu beginnen, müssen Sie „Patronen“ vorbereiten - spezielle Dateien, die Anforderungen für einen Generator enthalten.
Trotz aller Bequemlichkeit hat der Tank einen großen Nachteil: Er weiß nicht, wie man Benutzersitzungen verwendet.
Sie können die Autorisierung, die vollständige Arbeit mit Cookies und variable Verzögerungen vergessen. Ein Tank kann nur Anfragen von einer einzigen Adresse „picken“.
Es wird Ihnen passen, wenn:
- Es gibt keinen Unterschied in der Serverantwortzeit für autorisierte und nicht autorisierte Benutzer oder sie ist vernachlässigbar.
- API ohne HTTP-Sitzungen explizit testen;
- Dieser Ansatz entspricht im Allgemeinen der Logik Ihrer Website (normalerweise nicht für Online-Shops geeignet).
3. Verwenden von Apache JMeterDies ist das flexibelste Tool, mit dem Sie Benutzersitzungen detailliert emulieren können. Mit seiner Hilfe können Sie also immer noch die Frage des Unternehmens beantworten: "Wie viele Benutzer hält die Website aus?" Darüber hinaus kann JMeter mit Yandex.Tank zusammenarbeiten.
Das entscheidende Minus ist der Ressourcenverbrauch und die Komplexität der Vorbereitung von Tests.
Der wichtigste Ratschlag direkt zu JMeter: Vermeiden Sie es, die Seitenkörper mit ihren Kräften zu analysieren. Verwenden Sie besser vorbereitete Datensätze, um die Sitzungslogik zu reproduzieren. Grundsätzlich ist es besser, die von JMeter geleistete Arbeit im Allgemeinen zu minimieren. Wie bei Tank ist es möglich, vorgenerierte "Patronen" daran anzubringen. Hier müssen sie die Verteilung bestimmter Seiten innerhalb eines Typs, die Variabilität der Anforderungen usw. berücksichtigen.
In JMeter selbst müssen Benutzerverhaltensmodelle programmiert werden. Wenn die Aufgabe darin besteht, nicht nur den Serverteil, sondern auch die Rückgabe von statischem Inhalt zu testen, führen Sie diesen Test separat mit Phantom aus, falls erforderlich, gleichzeitig mit dem JMeter-Test. Dies wird dazu beitragen, den Ressourcenverbrauch des Lastgenerators erheblich zu reduzieren und die Reproduzierbarkeit des Tests zu erhöhen.
Empfehlungen für StresstestsGute Lasttests basieren auf einer kompetenten Verkehrsanalyse und einer qualitativ hochwertigen Erstellung eines statistischen Modells und von Profilen für die Emulation.
Markieren Sie 5-7 Haupttypen von Seiten (vergessen Sie nicht auch die Zielseiten für Bestände) und berechnen Sie den Prozentsatz des gesamten zwischen ihnen verteilten Datenverkehrs. Beachten Sie, dass pro Seite möglicherweise mehrere Anforderungen an dynamischen Inhalt gestellt werden. Für Sie ist die Seite die gesamte Gruppe solcher Anfragen. Analysieren Sie, wie viel Zeit Benutzer für jeden Seitentyp aufwenden: Durchschnitt, durchschnittliches Minimum, durchschnittliches Maximum.
Wenn die Seite auf mehreren Anforderungen basiert, berücksichtigen Sie die Verzögerung zwischen diesen. Sehen Sie, wie viele Seiten ein Benutzer normalerweise pro Sitzung besucht und wie diese Nummer verteilt ist. Markieren Sie 5-10 der häufigsten Benutzerpfade nach Seitentyp.
Konstruieren Sie die Szenarien anhand der erhaltenen Daten so, dass alle beschriebenen statistischen Parameter äußerst genau wiedergegeben werden. Vergessen Sie nicht die Variabilität der Szenarien, sie sollten sowohl in der Anzahl als auch in der Zusammensetzung der Klicks variieren.
Markieren Sie innerhalb jedes Seitentyps einzelne Adressen. Je mehr, desto besser, aber ein paar Tausend der beliebtesten Adressen werden bereits über den Augen liegen. Sie können daraus Abfragelisten erstellen, indem Sie jede Adresse so oft zur Liste hinzufügen, wie Sie möchten.
Wenn zu viele Seiten vorhanden sind, teilen Sie sie entsprechend dem Prozentsatz des Datenverkehrs in mehrere Gruppen auf.
Profile spielen nur für JMeter eine Rolle. Durch das Erstellen von Abfragelisten können Sie jedoch "Tank" -Patronen ausrüsten.
Und noch einmal: Wenn Sie JMeter im Benutzeremulationsmodus verwenden, vergessen Sie nicht die Verzögerungen zwischen den Anforderungen. Wenn Sie sie nicht hinzufügen, ist Ihre generierte Last um ein Vielfaches höher als geplant!
Überprüfen Sie nach einem Testlauf unbedingt die Webserver-Protokolle, um festzustellen, ob der emulierte Datenverkehr produktiv ist.
Kunstflug erstellt im Voraus Skripte, um die Standortdatenbank in den gewünschten Zustand zu bringen. Normalerweise funktionieren die auf die oben beschriebene Weise aufbereiteten Daten nur mit dem Status der Datenbank, für die Informationen zu Waren gesammelt wurden. Es kann unerschwinglich lang sein, den SQL-Speicherauszug jedes Mal neu zu laden. Darüber hinaus ist es sehr wünschenswert zu lernen, wie laufende Bestände mithilfe von Skripten im Testbereich verwaltet werden. Oft sind sie wichtig für den Betrieb des Systems, und Sie müssen verstehen,
mit welchem Satz und
wie genau die Arbeitsbestände getestet werden.
Alles ist fertig? Großartig, mach weiter!
Wir verwenden die Überwachung in Tests

Also haben wir kompetente Tests durchgeführt und die Ergebnisse erhalten. Wenn alles in Ordnung ist und Ihre Website mit einer hohen Auslastung fertig wird, ist kein Black Friday für Sie beängstigend. Dieser Artikel wäre jedoch unvollständig, wenn wir kein
trauriges realistisches Szenario betrachten würden.
Stellen Sie sich vor, eine Site kann einer akzeptablen Geschwindigkeit standhalten ... auch wenn nur ein Fünftel dessen, was das Unternehmen erreichen möchte. Ist es wirklich notwendig, den Hoster in Panik zu rufen und fünfmal mehr Kapazität zu bestellen?
Im Prinzip wird der Host diesen Ansatz mögen. Möglicherweise erhalten Sie sogar den Status eines Goldkunden.
Aber bevor wir vorschnell handeln, versuchen wir herauszufinden, was genau schief gelaufen ist.
Ihre Rettungsboje auf See für mögliche Ursachen ist ein Überwachungssystem.

Daher treten wir einen Schritt zurück und installieren vor dem Testen so viele Beispiele wie möglich. Idealerweise sollten alle erschöpfbaren Ressourcen überwacht werden.
Unten finden Sie eine Liste, die Ihnen den Einstieg erleichtert:
- CPU-Auslastung (CPU-Auslastung, CPU-Auslastung);
- RAM laden;
- Laden der Festplatte (IOPS, Latenz);
- Anzahl der Netzwerkverbindungen (Wartezeit, Fin-Wartezeit, Wartezeit schließen, hergestellt);
- Die Anzahl der offenen Steckdosen;
- Die Anzahl der Benutzerprozesse;
- Die Anzahl der geöffneten Dateien;
- Netzwerkverkehr (in Megabit und in Paketen sowie Fehler und Abbrüche).
Und auch:
- Die Anzahl der Abfragen, Antworten und Verbindungen zur Datenbank und zu anderen Komponenten.
- Antwortgeschwindigkeit der Komponenten (Datenbank, Suchserver, Caches usw.);
- Alle verfügbaren Protokolle für Fehler.
. , « ». , «» , .
, , .
- , : , HDD SSD. -,
.. .
: , , ? , , , 2- , - (, 0,5 ) 1,5 . - «, ».
1 , . , . , . , ( ) , .
, , , .
«» , . 2-3 , , .
, : . , . , , , , .
. . , SLA, , , , , «» .
. , . .
, , . , , .
, .
-, ( ), -, . .
, . - , .
, , , « e-commerce. », 16 .
.