Performance Analyse

Kontext

Für große Webauftritte muss die nötige Performance sowohl theoretisch als auch praktisch sichergestellt werden.

Die theoretische Performance muss dabei durch eine geeignete Architektur gewährleistet werden. Diese muss z. B. garantieren, dass dort, wo das Problem in unabhängige Teilprobleme zerfällt, auch das System entsprechend partitioniert wird, damit es durch Parallelisierung skalieren kann.

Die praktische Performance muss anschließend ebenfalls sichergestellt werden. Denn die praktische Performance hängt nicht nur davon ab, dass die Architektur geeignet skaliert und alle Komponenten grundsätzlich die nötige Leistungsfähigkeit haben, sondern sie hängt auch von sehr vielen Details ab.

Dies beginnt weit oben dabei, dass die Schritte bei der Bearbeitung nicht genauso durchgeführt werden, wie es die Architektur vorsieht, dass z. B. bestimmte Schritte, die nur einmal durchgeführt werden müssten, häufig wiederholt werden.

Des Weiteren ist häufig die Abarbeitung bestimmter Teilaufgaben (für Requests verschiedener Benutzer) nicht ausreichend parallelisiert.

Es geht aber auch oft hinab in die tiefen Details, z. B. haben viele große Webauftritte initial auf manchen Servern Probleme mit so vielen Verbindungen, die für eine Requestabarbeitung aufgebaut und dann direkt wieder abgebaut werden, dass auf diesen Servern die Ressourcen ausgehen.

Der Optimierungsprozess

Um eine Performance-Optimierung durchzuführen, sollte man methodisch vorgehen.

Zuerst einmal muss schon während der eigentlichen Entwicklung darauf geachtet werden, dass das System geeignet instrumentiert wird. Hierzu gehört z. B. ein hinreichend ausführliches Logging. Dies sollte auch über alle Komponenten einheitlich gehalten werden, damit man entsprechende Logfileanalysen durchführen kann.

Dann werden geeignete Szenarien definiert, mit denen das System untersucht werden soll. Dafür bestimmt man Durchläufe (Clickpaths) durch die Anwendung sowie Vorgaben für die dabei generierte Last (z. B. Anzahl simulierter Benutzer, die gleichzeitig auf die Anwendung zugreifen).

Nach diesem Schritt werden Vorhersagen gemacht, wie sich das System bei diesem Testfall verhalten soll. Diese Vorhersagen können z. B. in ermittelten Antwortzeiten bestimmter Requests bestehen, häufig interessiert dabei auch die Änderung dieser Antwortzeiten bei steigender Benutzerzahl. Es kann aber auch eine Vorhersage über die relative Häufigkeit bestimmter Einträge in den Logdateien sein (“für jeden Aufruf von http://x.com/login sollte es genau einen Aufruf von User::check_password geben”).

Im Anschluss an die vorigen Tätigkeiten wird das System – in einer geeigneten Last- und Performance-Testumgebung – bei den definierten Szenarien vermessen.

Danach werden die gemessenen Werte mit den vorhergesagten verglichen, alle Abweichungen werden dann einer genauen Analyse unterzogen.

Anschließend muss entweder die Vorhersage, bzw. das zu Grunde liegende Modell, korrigiert werden. Entweder, weil es auf verkehrten Annahmen beruhte, oder aber – und das ist der häufigere Fall – das System optimiert werden muss.  Dies kann geschehen, indem man bspw. überflüssige Aufrufe entfernt, weil man die Information entsprechend cached, oder indem man Engpässe, so genannte Bottlenecks identifiziert. Hier ist die Frage meistens: Welche Ressource (CPU, MEM, DISK-IO, …) in welchem System ist für die Limitierung der Gesamtleistung verantwortlich?

Diese Bottlenecks müssen dann natürlich auch beseitigt werden, wobei die Art der Lösung in vielfältiger Weise unterschiedlich sein kann.

Dieser Prozess kann entweder kontinuierlich fortgesetzt oder beendet werden, wenn eine vormals definierte Leistungsanforderung erreicht wird. In letzterem Fall wird ein abschließender Last- und Performance-Test das Erreichen der Leistungsanforderung dokumentieren.

triAGENS

Wir beherrschen diesen Optimierungsprozess aus mehrfacher praktischer Erfahrung in all seinen Aspekten.
Wir haben Vorgaben sowie Code, um bereits während der Entwicklung geeignetes Logging einzubauen.
Wir sind (letztlich seit unseren naturwissenschaftlichen Studien) mit dem immer wiederholten Ablauf “Modell erstellen, Vorhersagen treffen, testen und messen, analysieren, Modell oder System anpassen” bestens vertraut.
Wir haben umfänglichste Erfahrung im Bereich der Architektur und können aus dieser Erfahrung heraus sowohl geeignete Modelle erstellen wie auch die Analyse der Abweichungen zwischen vorhergesagtem und gemessenem Verhalten durchführen.
Wir haben sehr fundierte Technikkenntnisse, so dass wir diesen Optimierungsprozess ganzheitlich durchführen können.