
"Und wenn du nicht schießt, werde ich verwöhnt."
Bis vor kurzem glaubte man, dass der Dienst einfach funktionieren sollte. Sie haben Skripte gezeichnet, erfunden, geschrieben - alles scheint in Ordnung zu sein, man kann es auf den Prod rollen.
Da die Teilnehmer jedoch nicht schlafen, beginnt das Rennen nicht nur wegen neuer Funktionen, sondern auch wegen der Geschwindigkeit. Ein Einfrieren der Anwendung oder eine lange Serverantwort (ganz zu schweigen von den Popup-Fehlern des 500.) beeinträchtigen den Eindruck des Dienstes und zwingen den Benutzer, einen anderen Ort zu verlassen. Sicherlich waren alle mit Situationen konfrontiert, in denen anstelle des Kaufs eines Tickets für ein Flugzeug, einen Zug oder ein Konzert auf dem Bildschirm „Interner Serverfehler“ angezeigt wurde und Sie wütend waren, den Monitor zu beschädigen.
Ich bin Viktor Bodrov, arbeite bei Yandex.Money im Performance-Forschungsteam und möchte darüber sprechen, wie nützlich es ist, die Produktivität direkt in der Produktion zu untersuchen.
Jede Minute Ausfallzeit ist für Unternehmen katastrophal, insbesondere für diejenigen, die an Finanztransaktionen wie Überweisungen und Zahlungen sowie der Bezahlung von Waren in Geschäften beteiligt sind. Jede hängende Zahlung ist nicht nur ein Geldverlust, sondern auch ein Reputationsverlust. Unter solchen Bedingungen ist eine hohe Verfügbarkeit erforderlich, für die es notwendig ist, den Finger am Puls des Zahlungssystems zu halten und ständig alle seine Indikatoren zu überwachen, wobei der Leistung besondere Aufmerksamkeit zu widmen ist.
Warum es erforschen?
Wenn Sie die Leistung Ihres eigenen Dienstes kennen, können Sie sich zunächst auf die Einführung neuer Funktionen, verschiedener Werbeaktionen und Verkäufe vorbereiten. Die Kenntnis zuverlässiger Indikatoren wird zum richtigen Zeitpunkt helfen, den Zustrom neuer Benutzer nicht mit einem kleinen Tor mit Drehkreuz, sondern mit weit geöffneten Vordertüren und offenen Armen zu bewältigen.
Zweitens sollte ein guter Service jederzeit die Grenze seiner Leistung kennen, daher sollten die Messungen regelmäßig erfolgen. Wenn Sie dies häufig genug tun und dabei die Relevanz der Daten beibehalten, sollten Sie die Verschlechterung Ihres Dienstes nicht verpassen und die erforderlichen Indikatoren schnell wiederherstellen.
Drittens ist es für ein Unternehmen einfacher, anhand aktueller Leistungsdaten die Entwicklung eines Dienstes zu planen und Wachstumsrichtungen zu wählen.
Für diejenigen, die zum ersten Mal von einem solchen Problem verwirrt sind, stellt sich die Frage: Wo und wie kann die Produktivität gemessen werden? Oft wird für solche Experimente eine Bank verwendet. In einzelnen Unternehmen gibt es einen speziellen Stand für Leistungsforschung. Wenn Sie es haben - großartig! Wenn es 1 in 1 ist, entspricht das Produkt, dann ist alles in Ordnung mit Ihnen. Meistens ist es jedoch sehr teuer, einen Stand zu warten, der vollständig zum Produkt passt. Wie soll ich sein? Es stellt sich heraus, dass der einzige Ort, der dem Produkt vollständig entspricht, das Produkt selbst ist?
Für viele klingt der Vorschlag, etwas direkt am Produkt zu messen und zu verifizieren, ketzerisch. Seien Sie nicht beunruhigt, wenn alles sorgfältig gemacht wird, nichts Schlimmes wird passieren. Zum Beispiel berechnen wir mögliche Risiken vor und bestimmen, was in unserem System unter dem Experiment leiden kann. Gleichzeitig planen wir, die Gefahr zu verringern und den Status des Systems ständig zu überwachen.
Nachforschungen über Produkte heben die Nutzung des Ständers nicht auf. Es kann Freisetzungsprüfungen und spezielle Experimente durchführen, um die Leistung von Mikrodiensten zu untersuchen, einschließlich dieser einzeln oder in verschiedenen Kombinationen.
Der Haupt- und unbestreitbare Vorteil der auf dem Produkt erzielten Ergebnisse - sie sind die ehrlichste aller Optionen und so nah wie möglich an der tatsächlichen Verarbeitung des Benutzerverkehrs. Egal wie nah der Stand in Bezug auf die Eigenschaften am Produkt ist - er kann ihn nicht fangen, wie die Achilles-Schildkröte. Wenn Sie nach dem Produkt suchen, verwenden Sie dieselben Datenbanken wie echte Benutzer, dasselbe Netzwerk und dieselbe Umgebung. Sie müssen nichts bauen, alles wurde bereits vor Ihnen gebaut und funktioniert ordnungsgemäß.
Die Daten solcher Experimente sind für alle Ingenieure von Interesse, unabhängig von der ihnen zugewiesenen Rolle: Entwickler, Tester, Administratoren. Garantierte Leistungsindikatoren werden auch das Geschäft interessieren - für potenzielle Kunden werden sie eine überzeugende Werbung für den Service sein.
Szenarioauswahl und Lastflussmuster
Für die sichere und ordnungsgemäße Organisation solcher Experimente müssen mehrere obligatorische Schritte ausgeführt werden.
Szenarioauswahl
Der erste und wichtigste Schritt ist die Auswahl der untersuchten Szenarien. Dies können entweder Einzelanfragen (z. B. Überprüfung des Kontostands) oder Szenarien mit komplexer Logik sein, bei denen jede nachfolgende Anfrage von den Ergebnissen der vorherigen abhängt (Zahlung für Waren im Geschäft, Übertragung von Brieftasche zu Brieftasche). Wir führen regelmäßig eine Liste aller im System vorhandenen Geschäftsprozesse durch. Wir haben mehr als 400 solcher Prozesse. Basierend auf den Geschäftszielen werden wir die Prioritäten der Szenarien koordinieren.
Welche Szenarien sollten in die Prioritätsgruppe aufgenommen werden?
- Diejenigen, für die in naher Zukunft ein Anstieg der Benutzeraktivität erwartet wird.
- Diejenigen, für die es (aus verschiedenen Gründen) ständig strenge Beschränkungen gibt, die es Ihnen nicht erlauben, die SLA zu unterschreiten.
Somit ist es möglich, einen Pool von Prioritätsszenarien für regelmäßige Überprüfungen des Produkts zu bilden. In unserer Firma schießen wir mindestens einmal im Quartal auf sie.
Abhängig von der Logik des Skripts wird eine Reihe von Techniken und Werkzeugen ausgewählt. In unserem Fall haben Prioritätsszenarien eine verzweigte Logik. Wenn Sie beispielsweise Zahlungen mit Karte ausführen, werden verschiedene Überprüfungen durchgeführt, je nachdem, welches Skript sich in einem eigenen Zweig befindet. Daher verwenden wir JMeter , um diese zu implementieren. Dies ist nur für solch komplexe Szenarien praktisch, bei denen jede nachfolgende Anforderung vom Ergebnis der vorherigen abhängt. Wenn Sie einzelne Anfragen aufnehmen müssen, empfehle ich die Verwendung des Hochleistungs- Phantoms .
Für die Untersuchung von Benutzerszenarien werden möglicherweise spezielle Benutzer benötigt, für die Anforderungen gestellt werden. Wenn Sie einen Benutzer oder eine kleine Anzahl von Benutzern verwenden, kann es zu Daten-Caching kommen, wodurch die Ergebnisse verzerrt werden. Je unterschiedlicher Benutzer, desto genauer sind die Forschungsdaten.
Stromkreis laden
Im zweiten Schritt wählen wir die Eingangsintensitäts-Einspeisungsschaltung aus.
Zum Beispiel bestimmen wir vor einem Verkauf, wie Benutzer hauptsächlich bezahlen. Zur Optimierung und Nachverfolgung von Engpässen führen wir bestimmte Zahlungsarten aus. In der Regel bevorzugen Benutzeraktivitäten während verschiedener Werbeaktionen das eine oder andere Szenario. Wenn Sie dies überprüfen, erhalten Sie ein klares Bild seines Verhaltens unter Last.
Das Geschäft könnte aber auch am Gesamtbild der Leistung interessiert sein. In diesem Fall können Sie die beliebtesten Geschäftsszenarien proportional zu ihrer Verwendung durch echte Benutzer kombinieren und die kumulative Last aktivieren. Es ist zu berücksichtigen, dass in diesem Fall Schwierigkeiten bei der quantitativen Bewertung auftreten können. Anstelle einer bestimmten Leistungsnummer erhalten Sie eine Zahlenreihe, die wiederum abhängig von den Anteilen eines bestimmten Szenarios im allgemeinen Ablauf variieren kann.
Das Intensitätsangebot kann auch unterschiedlich sein. Ich werde mich auf die beiden häufigsten Profile konzentrieren. Dies ist ein Test mit einem linear (oder schrittweise) ansteigenden Intensitätsfluss- und Stabilitätstest, bei dem der Langzeitbetrieb des Dienstes unter einem stabil großen Intensitätsfluss überprüft wird. Die zweite Option erfordert eine lange Forschungszeit, die in einer Kampfumgebung nicht immer möglich ist. Außerdem sollte die Höhe der bereitgestellten Intensität bereits dafür bekannt sein.

X-Achse - Zeit, Y-Achse - Belastungsintensität (Anforderungen pro Sekunde)
Es ist gut, wenn es eine bestimmte SLA gibt, auf deren Grundlage Sie Überprüfungen durchführen können, indem Sie die Leistung, die Reaktionszeit und das Verhalten von Komponenten überwachen. Eine häufigere Situation ist, wenn das Leistungsniveau unbekannt ist und Sie es bestimmen müssen. Dazu verwenden wir die erste Option - Messung mit zunehmender Versorgungsintensität. Wir schalten den Eingabestream ein, erhöhen ihn linear oder schrittweise, wir betrachten das Verhalten des Dienstes. Eine linear aufgebrachte Last kann den Sättigungspunkt und den Durchschlagspunkt genauer verfolgen. Dies wurde in unserem Artikel ausführlicher beschrieben . Die schrittweise zugeführte Intensität kombiniert jedoch auch kleine Stabilitätstests, insbesondere wenn die Schritte lang sind. Es wird nicht empfohlen, sofort einen großen Lastfluss auf den Eingang aufzubringen. Es ist besser, den Dienst aufzuwärmen und den Eingangsstrom schrittweise zu erhöhen.
Sie können auch eine Reihe von zwei Experimenten durchführen. Messen Sie zuerst den Sättigungspunkt mit einer linear aufgebrachten Last und stoppen Sie. Sie sollten den Stream nicht weiter bis zur Panne füttern, es ist immer noch ein Stoß, kein Ständer. Das zweite Experiment besteht darin, das Verhalten des Dienstes unter einer Stufenlast zu untersuchen, indem mehrere Schritte nahe dem Sättigungspunkt ausgewählt werden. Führen Sie dann, soweit es die Zeit erlaubt, einen Stabilitätstest durch und wählen Sie eine Last aus, die 15 bis 20% unter dem Sättigungspunkt liegt (oder eine Panne, wenn Sie sie plötzlich vor der Sättigung hatten). Höher klettern ist gefährlich.
Timing
Als nächstes sollten Sie den Zeitpunkt des Experiments bestimmen. Eine der wichtigsten Bedingungen für die Durchführung von Leistungsmessungen am Produkt ist die Sicherheit für alle echten Benutzer. Es ist äußerst selten, dass die Möglichkeit besteht, den Dienst zur Vorbeugung für eine Weile einzustellen und ihn ruhig zu bombardieren. In der Regel sind Online-Dienste so eingestellt, dass sie rund um die Uhr funktionieren. Sie müssen sich also in die Nutzungsart des Dienstes einfügen.
Es ist logisch, dass je höher die tatsächliche Benutzeraktivität ist, desto größer ist das Risiko, dass das Schießen zu Ausfallzeiten und finanziellen Verlusten führen kann. Andererseits ist der Messfehler umso geringer, je weniger Benutzerverkehr vorhanden ist. Um die Auswirkungen von Experimenten zu minimieren, wird daher empfohlen, sie in Zeiten reduzierter Benutzeraktivität durchzuführen.
Wie die Praxis zeigt, liegt die Mindestaktivität unserer Benutzer zwischen zwei und sieben Uhr morgens. Natürlich hat jeder Dienst seine eigenen Eigenschaften und sein eigenes Publikum. Daher bestimmen wir die Zeit für die Aufnahme, indem wir das Verhalten der Benutzer überwachen. Es ist nicht immer möglich, Experimente in der ausgewählten optimalen Periode zu organisieren. Für das Brennen auf den Stoß, insbesondere in der Anfangsphase ihrer Verbindung, ist eine erhöhte Kontrolle erforderlich. Dies führt zu Schwierigkeiten, da Ihre Kollegen auch Menschen sind und möglicherweise nicht immer nachts zur Arbeit gehen. Diese Situation erfordert einen Kompromiss. Sie müssen eine Zeit auswählen, die für alle geeignet ist und gleichzeitig die Bedingung einer geringen Benutzeraktivität erfüllt.
Schwierigkeiten bei der Arbeit mit Gegenparteien
Wenn der Dienst nicht nur an interne Berechnungen gebunden ist, sondern auch an die Interaktion mit Diensten von Drittanbietern (Gegenparteien), müssen Sie auswählen, wie Sie Ihre Entlassung durchführen möchten: zusammen mit der Gegenpartei oder stattdessen mithilfe des Dienststubs. Wenn Sie auf die Server der Gegenpartei schießen möchten, müssen Sie sich natürlich zunächst auf alles einigen. Dies erschwert die Vorbereitung für das Brennen erheblich, erhöht jedoch die Richtigkeit der als Ergebnis erzielten Ergebnisse.
Und umgekehrt: Wenn Sie den Service der Gegenpartei durch einen Stecker ersetzen, wird die Vorbereitung für die Aufnahme erheblich vereinfacht, aber die Ehrlichkeit der Ergebnisse nimmt ab. Es sollte bedacht werden, dass der Stub das Verhalten der Gegenpartei so weit wie möglich imitieren und nicht nur 200 OK geben sollte.
Die Gegenparteien selbst sind unterschiedlich. Einige gehen leicht zu gemeinsamen Überprüfungen, während andere jeden Schritt durch viele Instanzen führen. Die Bestimmung des Zeitpunkts der Experimente kann ebenfalls zu Kontroversen führen. Zum Beispiel vereinbaren einige staatliche Ämter, nur 9 bis 18 Stunden zu arbeiten.
Überprüfung des Zugangs und der Koordination mit dem Sicherheitsrat, den Finanzabteilungen und den Administratoren
In diesem Teil konzentrieren wir uns auf Zugriffe und Genehmigungen mit allen verantwortlichen Personen - dem Sicherheitsdienst, den Finanzabteilungen und den Systemadministratoren.
Sie müssen nach den erforderlichen Zugriffen suchen . Stellen Sie sicher, dass nichts die Forschung stört, und bestellen Sie gegebenenfalls Zugriffe von Netzwerkadministratoren, sowohl von Ihren eigenen als auch von Gegenparteien, wenn Sie mit ihnen arbeiten. Netzwerkadministratoren helfen beim Ausgleichen der Einstellungen. Wir hatten einmal einen Balancer-Wechsel von Round-Robin zu IP-Hash. Infolgedessen fielen alle unsere Abfragen auf die gleiche Front, die vom neuen Ausgleichsalgorithmus ausgewählt wurde.
Nachdem Sie Zugriff erhalten haben, müssen Sie das Skript auf dem kleinsten Einheitenstrom debuggen und überprüfen.
Die nächsten Schritte sind Genehmigungen . Wenden Sie sich zunächst an den Sicherheitsdienst, damit Ihr Experiment beim Start nicht aufgrund von „verdächtigen Aktivitäten“ abgebrochen wird. Um alle möglichen Risiken des Sicherheitsrates einschätzen zu können, ist ein detaillierter Entlassungsplan erforderlich - wer, was und in welcher Menge ist daran beteiligt.
Als nächstes müssen Sie den Entlassungsplan mit den Finanz- und Handelsabteilungen abstimmen. Wenn der Service mit finanziellen Aktivitäten verbunden ist, ist eine Abstimmung mit der Finanzabteilung und der Buchhaltung erforderlich. Jede zusätzliche finanzielle Aktivität kann sich auf den Jahresabschluss auswirken oder sogar zu Fehlfunktionen bei der Erstellung einer Vielzahl von Buchungszusammenfassungen führen. Dies sollte vermieden werden, daher lohnt es sich, Kollegen zu warnen, die die optimale Konfiguration der Experimente ausgearbeitet haben.
Wenn Sie eine Statistikabteilung haben, die Informationen über den Betrieb des Dienstes sammelt, müssen Sie die Aufnahme mit ihnen koordinieren. Tatsache ist, dass der Lastfluss eine zusätzliche Statistikwelle verursacht. Vereinbaren Sie, ob sie die Tests in ihren Berichten berücksichtigen oder nicht. Wenn nicht, entscheiden Sie, wie die Daten der realen Benutzer von den Testbenutzern getrennt werden.
Bei der Planung müssen Sie auch Datum und Uhrzeit der Tests mit der Handelsabteilung abstimmen, unabhängig davon, ob für diese Zeit oder in der Umgebung Anzeigen oder Werbeaktionen geplant sind. Vergessen Sie nicht, die Teamleiter über alle geplanten und ungeplanten Aktivitäten auf dem Produkt zu informieren. Natürlich müssen Sie die Administratoren warnen und ihnen zustimmen, da während der Dreharbeiten deren Teilnahme erforderlich sein kann. Darüber hinaus sind es die Administratoren im Kurs über alle Aktionen auf dem Produkt. Möglicherweise sind gerade zum gewünschten Zeitpunkt eine Umstellung des Rechenzentrums, ein Serveraustausch oder andere Arbeiten geplant.
Brennen und Analysieren der Ergebnisse
Abschließend diskutieren wir die Durchführung des Brennens mit Überwachung. Wir bestimmen, wo wir während der Experimente suchen müssen, unter welchen Bedingungen wir anhalten müssen und auf welche Sensoren wir reagieren sollen. Dies muss "an Land" erfolgen, bevor mit dem Schießen begonnen wird.
Es gibt mehrere Gründe, aufzuhören.
1) Auf ein Signal von der Überwachung. In diesem Fall spielt es keine Rolle, ob die an dem Experiment beteiligte Funktionalität unterbrochen wird oder ob am anderen Ende des Dienstes ein Notfall auftritt. Sie müssen die Tests beenden und die Gründe verstehen, da der reibungslose Betrieb des Dienstes eine der Hauptprioritäten ist.
2) Mit dem Wachstum von Netzwerk- oder HTTP-Fehlern. Dies ist eine Notsituation, die ein Eingreifen erfordert.
3) Wenn die Sättigung erreicht ist, wächst die Leistung nicht mehr, aber die Reaktionszeit erhöht sich. Sie müssen nicht auf den Zusammenbruch warten und den Stoß setzen. Das Ergebnis für die Analyse ist bereits da, Sie können das Experiment sicher beenden.
Nach dem Experiment können Sie feststellen, dass nicht genügend Protokolle und Ergebnisse vorhanden sind, und Sie müssen das Experiment mit aktivierter Debug-Protokollierung wiederholen. Dadurch wird das Protokoll und das Schreiben auf die Festplatte schwerer, aber jetzt wissen Sie, wie hoch die erforderliche Last ist, was bedeutet, dass Sie sie anstelle eines langen Tests verkürzen können.
Ergebnisanalyse
Am Ende bleibt es, die Ergebnisse zu analysieren und die erhaltenen Daten den interessierten Parteien zur Verfügung zu stellen. Sie können dies bereits während der Experimente tun. Wir verwenden Zabbix- und Elastic- Bündel mit Grafana und Kibana zur Analyse. Wir überwachen die Zeitmerkmale aller an unserem Experiment beteiligten externen und internen Aufrufe, wir überwachen die Connector-Pools, Warteschlangen und den Datenbankmonitor. Für die Online-Verfolgung von Metriken von der Seite des Verkehrsgenerators - Yandex-Dienst Lunapark (es gibt ein offenes Analogon - overload.yandex.net).
Die Präsentation der Ergebnisse hängt davon ab, wer sie benötigt. Für die Entwicklung benötigen Administratoren und Tester einen detaillierten Bericht mit genauen Metriken, Grafiken, Protokollen und Stacktraces. Für das Geschäft sind die Ergebnis- und Entwicklungsprognosen wichtig. In diesem Fall ist die Konkretheit und Betonung von Zahlen besser und visueller. Dazu können Sie das Prinzip der Ampel anwenden. Die rote Zone ist schlecht, es ist dringend zu optimieren. Gelb - wir haben eine Verschlechterung der Indikatoren festgestellt, darauf sollten Sie achten. Grün - alles ist in Ordnung, mach weiter. Eine klare und zugängliche Sicht auf die Forschungsergebnisse wird dazu beitragen, Fragen nach der Wichtigkeit und Nützlichkeit der Leistungsmessung zu beseitigen.
Erfolgreiche Recherche und Sicherheit der Benutzer!