Planung, Durchführung und Analyse von Lasttests unternehmenskritischer Anwendungen

Planung, Durchführung und Analyse von Lasttests unternehmenskritischer Anwendungen

Fährt mein neuer Wagen wirklich 250 km/h? Wie schmeckt das 5-Gänge-Menü, das so tolle Bewertungen erhalten hat?
Ist unsere IT in der Lage, die erwartete Produktionslast ohne Probleme zu bewältigen?

Solchen oder ähnlichen Fragen begegnet man immer wieder, wenn Entscheidungen für die Zukunft zu treffen sind.
Um eine Antwort zu erhalten gilt: Einfach mal Ausprobieren!

Aber während eine Probefahrt oder ein Testessen relativ schnell und einfach durchzuführen sind, ist die dritte Frage normalerweise nicht so leicht zu klären. Grund: Die IT betrifft fast ausschließlich unternehmenskritische Bereiche, wo ein Versagen zumindest spürbare und in der Regel kostspielige Konsequenzen haben wird. Hier muss man auf der Suche nach Antworten entsprechend strukturiert und planmäßig vorgehen, um teure Fehlschläge zu vermeiden. Das Mittel der Wahl in diesem Fall heißt „Last- und Performancetest“.

Lasttests sind essentiell für eine Performanceanalyse oder Systembewertung. Sie ermöglichen es, die technische Einsatzreife neuer Applikationen präzise einzuschätzen, die zugrunde liegende IT-Infrastruktur richtig zu dimensionieren und die System-Performance zu optimieren. Schwachstellen und Unzulänglichkeiten beeinträchtigen nicht nur die Zufriedenheit und die Bereitschaft des Endkunden bzw. Anwenders, das System zu nutzen. Überlastete Komponenten können schließlich ausfallen und dadurch weitere Probleme verursachen.
Solch Fragestellungen löse ich mit den für diese Phase des Entwicklungsprozesses geeigneten Methoden und Werkzeugen.

Unser systematisches Vorgehen lässt sich dabei an folgendem Anwendungsfall exemplarisch darstellen: In einem meiner Projekte lautete die konkrete Aufgabe, für die unternehmenskritische Software zur Leistungsabrechnung einen Lasttest zu entwickeln. Hier werden Ressourcen und Budgets geplant, Rückmeldungen erfasst und Berichte sowie Abrechnungen erstellt. Jeder Mitarbeiter ist angehalten, die Daten seiner Projekteinsätze auf monatlicher Basis korrekt zu erfassen, zu prüfen und freizugeben. Dies kann zwar jederzeit erfolgen, aber die Hauptlast der Verarbeitung findet zum Monatswechsel statt. Dann muss die Anwendung störungsfrei funktionieren.

...weiter lesen

Da ein IT-Projekt selten unterbrechungsfrei von Anfang bis Ende bearbeitet wird, gab es schon Ergebnisse, auf denen aufgesetzt werden konnte. Das Testkonzept war bereits gut ausgearbeitet, aber das Thema Lasttest war noch nicht vollständig bearbeitet.

Na also - da ich in mehreren Jahren reichlich Projekterfahrung zu diesem Thema gesammelt habe, war das genau mein Ding.

Genau hier, mit der Konzeptionierung des Lasttest, galt es zu starten.

Der Kern eines Lasttests besteht darin, die häufig verwendeten Prozesse mit der erwarteten Benutzermenge auszuführen.

Dabei wird das Systemverhalten beobachtet, um Grenzen und Einschränkungen der Verarbeitungskapazität zu erkennen.

Als Betroffener, der monatlich Tätigkeiten, Reisen und Auslagen erfasst und entsprechende Berichte erstellt, sind mir die Programmfunktionen bereits geläufig.

In einem anderen Umfeld wäre hier in Zusammenarbeit mit der Fachseite eine entsprechende Auswahl und Festlegung der Prozesse vorzunehmen.

Die Auswahl eines Lastgenerators gestaltet sich wie so häufig: Der eine findet dies besser, der andere das, und alle kommen zu dem Schluss, dass es von den Anforderungen abhängt, welches Tool das Beste ist.

So kann ich auch keine Empfehlung aussprechen, sondern nur beschreiben, wie ich zu meiner Entscheidung komme.

Nachdem neben der Vision, dass ein Test einfach (auch durch Dritte) ausführbar sein sollte, keine weiteren konkreten Anforderungen spezifiziert wurden, war die Überlegung, dass es sich bei den verwendeten Programmen um nicht-kommerzielle Software handeln sollte. Meine Wahl fiehl auf das weit verbreitete und durch die Community gut unterstützte OpenSource-Produkt JMeter.

Bisher hatte ich bei dem Thema Last-Test mit LoadRunner und NeoLoad gearbeitet.
Die Challenge für mich hier war also nun die konkrete Umsetzung mit JMeter.

Das Wissen über die zu verwendenden Komponenten für Lasterzeugung, Systemüberwachung und Darstellung der Ergebnisse stammt aus verschiedenen Anleitungen, Foren und Tutorials.

Mit diesen Grundlagen und dem Ziel einer "ein-Klick-Lösung" konnten die einzelnen Elemente zu einem funktionsfähigen Ganzen zusammengefügt werden.

Ein Test konnte nun leicht und unkompliziert – auch und vor allem von den zentralen Anwendern im Backoffice – ausgeführt werden. Hierzu war lediglich ein Doppelklick erforderlich.
Der Start, die Ausführung und die Präsentation der Ergebnisse erfolgen mittels Skriptsteuerung automatisch.

Am Ende muss man nur noch einen prüfenden Blick auf das Resultat werfen.

Der Prozess wurde darauf optimiert, eine schnelle und einfache Analyse der Anwendungsperformance durchzuführen, wenn akut Probleme vermutet wurden oder nachdem Änderungen bei den Komponenten (Hardware, Software) durchgeführt wurden.

Das heißt aber auch, dass bei einem konkreten Verdacht weitere Tests und Analysen vorgenommen wurden.

Die obige Beschreibung stellt die Situation für das konkrete Projekt dar.

Die Herausforderung bestand darin, einen einfach durchzuführenden Lasttest für eine bereits produktiv eingesetzte Anwendung zu erstellen.

In einem anderen Umfeld können andere Ziele verfolgt werden, so dass nicht nur von Lasttest, sondern allgemein von Effizienztest gesprochen wird. Deren Vorbereitung und Durchführung kann zwar teuer sein, aber die Risiken einer nicht effizienten Anwendung sind nicht zu unterschätzen. Daher ist es wichtig, für die Planung die folgenden Fragestellungen entsprechend zu berücksichtigen:

    Risiken bei der Effizienz
    • Wie ist die Hardware zu dimensionieren? Erarbeitung von Sizing-Erkenntnissen zur vorgesehenen Produktionshardware
    • Wie sind die Komponenten zu konfigurieren? Abwägung zwischen dem Machbaren und dem Sinnvollen
    • Wie ist die Software implementiert? Design und Umsetzung bezüglich Ausnutzung der verfügbaren Ressourcen

    Festlegung der Testobjekte
    • Welche Testobjekte sind für Effizienztests relevant? Auswahl einzelner Abschnitte der Systemarchitektur, des gesamten Systems, spezielle zeitkritische Elemente

    Anforderungen an den Effizienztest
    • Was ist für die Messbarkeit zur Erfüllung der Anforderungen relevant? Reaktionszeiten in Sekunden, Systemzustände während der Testausführung, Anzahl der auszuführenden Transaktionen

    Vorgehensweise für Effizienztests
    • Wie wird die Last erzeugt und wo liegen die Grenzen? Nutzungsprofile und Volumentest simulieren die typische Nutzung
    • Wie können die Ergebnisse der Tests beurteilt werden? Darstellung, Analyse und Interpretation der Ergebnisse

    Bestanden- / Nicht-bestanden-Kriterien
    • Welche Kriterien werden als notwendig erachtet und wie können die Kennwerte festgelegt werden? Antwortzeiten, Durchsatz, Stabilität, Skalierbarkeit und Ressourcenverbrauch anhand von Benchmarks, Erfahrung oder Faustregeln

    Werkzeuge für den Effizienztests
    • Welcher Bedarf besteht bei der Simulation von Lasten? Auswahl anhand von Nutzungsarten (Dialog oder Batch) und zu testenden Komponenten der Systemarchitektur
    • Wie hoch belaufen sich die Kosten? Je nach Umfang und Komplexität der zu simulierenden Systemauslastung können erhebliche Kosten (Lizenz, Schulung, Einarbeitung) anfallen

    Organisatorische Aspekte
    • Wie sind die Testumgebung und das Test-Team verfügbar, insbesondere bei Verwendung externer Komponenten? Die Verantwortlichkeiten für die Elemente sind vorab zu klären

    Einordnung im Lebenszyklus
    • Werden Effizienztests so früh wie möglich oder erst später im Entwicklungslebenszyklus durchgeführt? Fertigstellungsgrad von abgrenzbaren Komponenten vs. integriertes Gesamtsystem, Häufigkeit von Testläufen vs. Kosten pro Testlauf

Wenn man es nun geschafft hat, die richtigen Antworten auf die obigen Fragen zu finden und ein Vorgehen festgelegt hat, darf man nicht vernachlässigen, am Ende die Ergebnisse zu nutzen.

Die im Test gewonnenen Erkenntnisse müssen als Grundlage für die weitere Entwicklung oder die Optimierung verwendet werden. Analyse und Aufbereitung der Daten zeigen die Bereiche, in denen entschieden und gehandelt werden muss. Dabei ist durchaus relevant, welche Informationen auf welche Art für welche Empfänger aufbereitet werden sollen. Die Bandbreite reicht von Listen über Tabellen zu Grafiken in verschiedenen Formen.
Der Inhalt wird jeweils im Detaillierungsgrad variieren, um den relevanten Stakeholdern eine objektive Darstellung der Lasttestergebnisse sowie der Möglichkeiten für Tuningmaßnahmen bereitstellen zu können.

Load Test Results

Solche Berichte lassen sich mit den Bordmitteln von JMeter zusammen mit weiteren Open-Source-Komponenten erstellen. Es gibt eine große Auswahl, um (fast) alle Anforderungen erfüllen zu können.

Video

Qualitätsmanagement

Fazit

Tests sind integraler Bestandteil des Entwicklungsprozesses. Sie begleiten alle Phasen vom Entwurf bis zur Einführung. Während die Entwickler ein Produkt nach den Vorgaben erstellen, prüfen die Tester, ob das Ergebnis die Erwartungen erfüllt. Dies geschieht in allen Entwicklungsstufen, basierend auf den dort jeweils vorliegenden Ergebnissen mit den dafür geeigneten Testmethoden. Einer der zahlreichen Aspekte, die zu untersuchen sind, betrifft die Leistungsfähigkeit des Endproduktes im Produktivbetrieb.

Um gerade diese Aufgabe (beim ersten und vielleicht auch einzigen Mal) erfolgreich zu meistern, sind Wissen und Kenntnisse in diesem Bereich erforderlich.

Hier berate ich meine Kunden auf Basis meiner Erfahrung zielgerichtet (egal ob kommerzielle Produkte oder Open-Source-Tools) und führe ggf. individuelle Toolevaluierungen durch.

Sobald testfertige Module bzw. die Anwendung fachlich korrekt in der Lasttestumgebung vorliegen, stimme ich charakteristische Geschäftsprozesse mit dem Fachbereich ab, erstelle die Lasttests, führe sie durch und werten die Ergebnisse aus.

Ich ermittel, welche Last, also wie viele Anwender/Prozesse, die Anwendung gleichzeitig verarbeiten kann und bereite die Berichte für die relevanten Stakeholder sachgerecht auf. Auch unterstütze ich bei der Durchführung entsprechender Tuningmaßnahmen.

Bei all dem bleibt jedoch zu beachten: Unterscheiden sich Testumgebung und Produktionsumgebung, können nur bedingt Aussagen über das produktive Verhalten der Anwendung gemacht werden. Eine Äquivalenzaussage ist i.d.R. nicht möglich.

Aber auch hier unterstütze ich Sie gerne bei Lösungen, die beruhigen: Monitoring und Überwachung des laufenden Betriebs mit dem Ziel, Probleme zu erkennen und zu beheben, bevor sie auftreten.



Blog & Posts

Lade...