Moderne Applikationen, insbesondere wenn sie aus der Cloud bereitgestellt werden, sind im Allgemeinen skalierbar und für eine große Anzahl User ausgelegt. Dazu können beispielsweise Technologien wie Container oder Function-as-a-Service (FaaS) eingesetzt werden. Dabei kommt in den meisten Fällen zur Kommunikation HTTP oder HTTPS zum Einsatz.
Aber wie viele User kann eine einzelne Instanz meiner Cloud-Infrastruktur bedienen? Vielleicht ist die Architektur auch für eine Instanz pro Mandant oder Projekt ausgelegt. Daher möchte man als Anbieter beurteilen können, was möglich ist. Beim Einsatz der Cloud spielt dies auch eine entscheidende Rolle bei der Preisgestaltung. Man zahlt schließlich „nur“ das, was man benutzt!
Um diese Frage zu beantworten, möchte man im Vorfeld testen, was möglich ist und wo eventuell Optimierungsbedarf besteht. Hier bieten sich Last- und Performance-Tests an.
Wie funktioniert ein Last- und Performance-Test?
Die (technisch) einfachste Möglichkeit eines Last- und Performance-Tests ist natürlich eine manuelle Überprüfung mit den angestrebten Nutzerzahlen. Mehr als 10 User manuell zu simulieren, bedeutet jedoch einen erheblichen Arbeitsaufwand. Und da die Kommunikation mit der Anwendung über gut dokumentierte Protokolle erfolgt, wünscht man sich eine Automatisierungsmöglichkeit.
Daher werden im Allgemeinen spezielle Tools eingesetzt, die die Anfragen von Usern simulieren. Ein einzelner User wird dabei typischerweise die folgenden Aktionen durchführen:
- Anmelden an der Applikation
- Ermitteln der möglichen Aktionen, evtl. auch auf Basis einer rollenbasierten Zugriffskontrolle
- Ausführen einer oder mehrerer Aktionen
- Warten auf Antwort, dass ausgeführte Aktionen erfolgreich waren
Gängige Werkzeuge, sowohl aus der Open-Source-Welt als auch kommerzielle, unterstützen dieses Vorgehen. Unterschiede finden sich bei der Komplexität, einen Test einzurichten.
Einige Tools bieten ein „Aufnehmen“ bestimmter Nutzeraktionen und ein späteres Abspielen. Dieses Abspielen stellt dann einen Nutzer dar, jedoch kann man es parallelisieren und damit eine nahezu beliebige Anzahl Nutzer simulieren. Dabei können verschiedene Aktionen auch verschieden häufig abgespielt werden.
Bei anderen Tools müssen die Aktionen in Form von Konfigurationsdateien oder Skripten bereitgestellt werden. Das bedeutet initial zwar einen höheren Aufwand, bietet aber auch eine gewisse Flexibilität. So kann man beispielsweise auf Fehler oder lange Antwortzeiten der Applikation reagieren und automatisiert Warnungen ausgeben.
In jedem Fall muss aber beachtet werden: Ein Testwerkzeug benötigt ebenfalls Leistung. Es kann durchaus vorkommen, dass das entsprechende Tool eine schlechte Applikationsperformance meldet, obwohl das Testsystem nicht mehr genügend CPU-Ressourcen oder Arbeitsspeicher hat!
Projektbeispiel: Smart Building
Ein typisches Beispiel für einen Last- und Performance-Test ist ein „Smart Building“. Schließlich müssen hier viele Komponenten zusammenspielen, um den Nutzern eine zufriedenstellende User Experience zu bieten, zum Beispiel:
- Zutrittskontrolle
- Lichtsteuerung
- Heizung
- Rollläden u.v.m.
Komponenten können dabei sehr unterschiedlich häufig genutzt werden. Eine Zutrittskontrolle wird beispielsweise eher morgens und abends genutzt, wenn die Mitarbeiter kommen oder gehen. Eine Heizung ist saisonabhängig, die Lichtsteuerung eher dynamisch.
Last- und Performance-Tests haben hier dem Applikationsentwickler helfen können, Optimierungen an Cache und Backend vorzunehmen. Dadurch konnte die Anzahl paralleler Nutzer deutlich erhöht werden.
Fazit
Last- und Performance-Tests bieten eine effektive, effiziente und (mehr oder weniger) einfache Möglichkeit, Applikationen auf eventuelle Leistungsengpässe zu überprüfen. Je nach eingesetztem Protokoll und Komplexität können verschiedene Ansätze zielführend sein. Grundsätzlich kann man hier festhalten: Je komplexer die Applikation, desto mehr initialen Aufwand muss man in Kauf nehmen.