Mehr Qualität und Geschwindigkeit bei DevOps

Seite 2: Beispiele

Inhaltsverzeichnis

Das Prinzip soll anhand eines Beispiels erläutert werden. Anwendungen sind häufig ineffizient beim Zugriff auf eine Datenbank. Das liegt meist an einer hohen Anzahl an SQL-Aufrufen, die zu viele Daten auf ineffiziente Weise anfordern. In einem Fall wurden folgende Werte in einer produktiven Umgebung gemessen:

Die Anzahl der SQL-Aufrufe (blaue Balken) im Vergleich zur Reaktionszeit (rote Linie) beziehungsweise zu Transaktionsaufrufen (grüne Linie). Nach dem Einspielen einer neuen Version ist es ratsam, sich das Datenbankzugriffsverhalten (Anzahl und Dauer) im Vergleich zur Transaktionslast anzusehen. Geht die Anzahl der SQL-Abfragen proportional nach oben, könnte es sich um ein Zugriffsproblem handeln. Geht die Datenbankantwortzeit nach oben, könnte sich ein Datenbankkonfigurationsproblem eingeschlichen haben (Abb. 1)

Das Verhalten änderte sich nach dem Aufspielen einer neuen Softwareversion. Diese verursachte einen Performanceabfall und überladene Datenbankserver. Es stellte sich heraus, dass das Entwickler-Team die Nutzung ihres O/R-Mapping-Frameworks Hibernate verändert hatte. Eine schlechte Konfiguration führte dazu, dass Hibernate viel mehr SQL-Abfragen ausführte als zuvor, um das gleiche Ergebnis zu erhalten.

Das Problem hätte sich bereits an der Workstation des Entwicklers identifizieren lassen, falls er die Anzahl der ausgeführten SQL Statements nach der Konfigurationsänderung untersucht hätte. Hibernate bietet wie viele andere Frameworks integrierte Logging- und Diagnose-Tools, um genau solche Fehler zu entdecken. Das ist in der folgenden Abbildung zu erkennen:

Hibernate bietet integrierte Logging- und Diagnose-Tools, etwa zur Anzeige der Anzahl von Aufrufen, Ausführungen, Vorbereitungen sowie Durchschnitts- und Gesamtzeit von SQL Statements (Abb. 2).

Die meisten Tester entwickeln hervorragende funktionale Tests, unabhängig vom verwendeten Automatisierungs-Tool. Doch eine "Shift Left"-Mentalität bedeutet, dass Tester auch die technischen Architekturmetriken prüfen sollten. Die agilen Teams können sie dabei unterstützen, automatisch die Anzahl der SQL Statements für jeden durchgeführten Test zu sammeln. Damit müssen sie das nicht mehr manuell vor dem Einpflegen des Codes erledigen. Anschließend erhalten sie sofort die Ergebnisse, wie die folgende Abbildung vereinfacht anhand der Anzahl der SQL Statements zeigt.

Anzahl der SQL Statements in verschiedenen Phasen von drei Builds. Hier ist klar zu sehen, dass im Build 3 die Suchfunktion eine deutliche Vergrößerung der Anzahl aufgrund zusätzlicher Aufrufe durch den Empfehlungsdienst eines Drittanbieters aufweist (rot markiert) (Abb. 3).

Falls eine Abweichung wie in der letzten Zeile geschieht, ist der Build sofort zu stoppen. Diese Untersuchungen sind besonders hilfreich, wenn sie in einer Testumgebung durchgeführt werden, die mehr Testdaten in der Datenbank enthält, als die Entwickler in ihrem lokalen System besitzen. Schließlich gibt es viele andere Metriken, die entlang der Entwicklungskette zu berücksichtigen sind. Für Webentwickler sind das Web-Performance-Metriken wie die Anzahl an Bildern und CSS- oder JavaScript-Dateien. Für Architekten serviceorientierter Anwendungen ist es wichtig, wie die Dienste miteinander kommunizieren, wie viele Daten pro Service-Call übertragen werden und wie viele Ressourcen das bindet. Diese Werte sind so früh wie möglich und weiterhin während des gesamten Entwicklungsprozesses bis hin zum Live-System zu sammeln.