Letztes Mal habe ich in einem Blog über die Bedeutung von Benchmarking der Architektur und der neuen Technologie in einem Proof of Concept für die Leistung geschrieben . Diesmal befasse ich mich mit der Bedeutung von repräsentativen Leistungstests. Die Langsamkeit von Anwendungen in Entwicklungsumgebungen wird oft mit der Begründung vernachlässigt, dass schnellere Hardware in der Produktionsumgebung dieses Problem lösen wird. Ob dies wirklich zutrifft, lässt sich jedoch nur mit einem Test in einer repräsentativen Umgebung und auf repräsentative Weise vorhersagen. In einer solchen Umgebung muss mehr repräsentativ sein als nur die Hardware.
Ich habe mehrfach erlebt, dass eine Datenbankabfrage in der Testdatenbank mit 1000 Kunden nur weniger als 10 ms dauerte, während sie in der Produktionsdatenbank mit 100.000 Kunden aufgrund fehlender Indizes mehrere zehn Sekunden in Anspruch nahm. Wenn das Entwicklungsteam also nicht mit einer vollständigen Datenbank testet, kann der Einsatz in der Produktion zu einigen Überraschungen führen.
Es ist auch wichtig, dass die Anzahl der gleichzeitigen Benutzer und ihr Verhalten im Test gut simuliert werden. Außerdem sollten Sie Caching-Effekte berücksichtigen: Wenn im Test ein und dasselbe Produkt von ein und demselben Kunden immer wieder angefordert wird, befinden sich diese Daten beim zweiten und den folgenden Malen im Datenbank- oder Abfrage-Cache. Dadurch wird die Anfrage erheblich beschleunigt und ist viel schneller als bei vielen Kunden und Produkten. Dieser Test ist daher nicht repräsentativ für die reale Situation.
Abbildung: Screenshot eines Leistungstests in Apache JMeter. Mit diesem Tool und der richtigen Durchführung von Leistungstests befassen wir uns in unserem Kurs Speeding up Java Applications. Dies ist ein Tool, das von Programmierern für Programmierer gemacht wurde. Es können Testskripte mit visuellen Elementen wie einer HTTP-Anfrage erstellt werden, die aufgezeichnet und konfiguriert werden können. Es stehen viele zur Verfügung und wenn Sie mehr brauchen, können Sie jederzeit auf ein BeanShell-Element zurückgreifen, in dem Sie die Anfrage, die Antwort und verschiedene JMeter-Variablen manipulieren können. Wenn auch das noch nicht Ihren Bedürfnissen entspricht, können Sie den JMeter-Quellcode erweitern und eigene Elemente entwickeln. Da es sich um ein Programm für Programmierer handelt, ist es für den Durchschnitts-Tester weniger geeignet. Auch die Berichtsfunktionen und die Wartbarkeit der Skripte sind nicht so toll. Daher können kommerzielle Tools wie HP Mercury LoadRunner, Borland SilkPerformer oder Neotys Neoload gute Alternativen für Unternehmen sein. Leistungstests aus der Cloud Das Aufkommen von Cloud Computing eröffnet neue Möglichkeiten für Leistungstests. Eine elastische Compute-Cloud wie Amazon EC2 bietet die Möglichkeit, die Anzahl der Anwendungsimplementierungen bei steigender Last schnell zu erhöhen. Für Leistungstests kann die Cloud auch andersherum genutzt werden: für die vorübergehende Nutzung vieler lastgenerierender Testclients, um erwartete und Spitzenlasten für Ihre Anwendung zu erzeugen. Dies erspart Ihnen die Anschaffung vieler Server, auf denen die lastgenerierenden Clients laufen, und wenn Sie diese Leistungstests beispielsweise nur ein paar Tage in einem Release-Zyklus durchführen, kann dies eine wirtschaftlich attraktive Lösung sein. Es gibt eine ganze Reihe von Informationen darüber, wie Sie mit verschiedenen Leistungstools aus der Cloud testen können. Das nächste Mal werde ich über Schritt 4 bloggen : kontinuierliche Leistungstests.
Verfasst von
Jeroen Borgers
Contact



