unic.com - Navigations- und Servicebereich


Inhaltsbereich

Rainer Steinegger begeistert von Last- und Stresstests mit Gatling

Von am 19. Mai 2017
Foto: Lennart Jütte

Foto: Lennart Jütte

Rainer Steinegger ist Senior Application Engineer bei Unic. Er entwickelt seit vielen Jahren Java-basierte Applikationen und ist seit anderthalb Jahren im Organisationsteam der Java User Group in Karlsruhe aktiv. An den Entwicklertagen vom 22. bis zum 24. Mai 2017 in Karlsruhe wird er im Rahmen seines Fachvortrages „Gatling for JMeter dummies“ aufzeigen, wie eine Gatling-Anwendung aussehen kann.

Rainer, was fasziniert und motiviert Dich in Deinem Arbeitsalltag als Java Application Engineer?

An meiner Aufgabe als Application Engineer reizt mich besonders, dass man nicht nur versucht den möglichst wartbarsten und lesbarsten Quellcode zu schreiben, sondern dass man mit dem Fachbereich in engem Kontakt steht, um im Sinne eines agilen Prozesses kontinuierlich den höchst möglichen Nutzen für den Kunden zu erzielen. Vor diesem Hintergrund bilde ich mich nicht nur im technischen Bereich weiter sondern auch in den Gebieten der sogenannten „Soft Skills“ – so war ich unter anderem an einem sehr interessanten Workshop, bei dem es darum ging, wie man selbst beeinflusst wird, aber auch andere beeinflussen kann.

Welche Trends prägen Deine Arbeit im Moment?

Die bedeutendste Veränderung, die mich aktuell beschäftigt, ist, dass sich die Softwareentwicklung weg von grossen Monolithen, bei denen alle Entwickler an einer grossen Codebasis arbeiten, hin zu Microservice-Architekturen bewegt. Dies bedeutet, dass der Code aufgeteilt wird und man sich in seinem Microservice nur um einen kleinen Bestandteil kümmern muss. Dadurch kann die Teamgrösse reduziert werden und die Verantwortlichkeiten beschränken sich auf die zugeteilten Codeausschnitte. Eine der grossen Herausforderungen dabei ist, dass ein Umdenken stattfinden muss, wie ein Artefakt gebaut und „released“ wird. Zudem muss das Monitoring und Logging so aufgestellt sein, dass ein reibungsloser Betrieb gewährleistet werden kann.

Inwiefern engagierst Du Dich persönlich in der Java-Community?

Ich bin hier in Karlsruhe seit rund anderthalb Jahren einer der Mitorganisatoren der Java User Group. Als ich in Kalifornien lebte, organisierte ich diverse Java Meetups und hielt dort Vorträge zu technischen Themen. Da mir die Organisation dieser Events wie auch das Halten von Vorträgen grosse Freude bereitet, habe ich mich proaktiv in Karlsruhe bei der Java User Group gemeldet. Anderen Personen die Möglichkeit zu bieten, sich mit diesen kostenlosen, qualitativ hochwertigen Vorträge weiterentwickeln zu können, ist für mich ein grosser Motivationsfaktor. Dass Unic Unterstützer und Sponsor der Java User Group Karlsruhe ist, freut mich umso mehr.

Seit einiger Zeit engagiere ich mich zusätzlich als Mentor an der Devoxx4Kids. Das Ziel dieser Initiative ist, Kindern den kreativen Umgang mit Computern zu ermöglichen und ihnen spielerisch das Programmieren beizubringen. Am nächsten Event können die Kids bei dem von mir mitbetreuten Workshop anhand von Google Cardboard eine virtuelle Welt zusammenbauen.

Vom 22. bis 24. Mai 2017 finden die Entwicklertage in Karlsruhe statt. Du wirst da im Rahmen deines Fachvortrages „Gatling for JMeter dummies“ aufzeigen, wie eine Gatling-Anwendung für Stress- und Lasttests aussehen kann. Wie ist es dazu gekommen?

Bei den „alten“ Tools wie JMeter gibt es einige Punkte, die mich bei der Erarbeitung meiner Lösungen stören wie zum Beispiel, dass man an die graphische Oberfläche gebunden ist oder auch Code Reviews schlecht durchführen kann. Da ich von Hause aus sehr neugierig bin, habe ich mich vor einem halben Jahr nach einem neuen Tool umgesehen und bin so auf Gatling gestossen. Nachdem ich mich in Fachartikeln und Konferenzen über Gatling schlau gemacht habe, begann ich, erste kleinere REST APIs damit zu testen und habe so das Tool sehr schätzen gelernt. Diverse Personen haben mich dann ermuntert meine Erfahrungen in einem Fachvortrag zu präsentieren, weshalb ich mich bei den Entwicklertagen in Karlsruhe angemeldet habe und erfreulicherweise auch ausgewählt wurde.

Was sind Last- bzw Stresstests?

Bei beiden Tests simuliert man viele Benutzer, die das System gleichzeitig verwenden. Die Tests unterscheiden sich im Ansatz wie folgt: Beim Lasttest wird die Leistungsfähigkeit und das Verhalten des Systems basierend auf einer gewissen Anzahl von Nutzern (Beispiel die angenommene Anzahl Kunden in einem System) getestet. Der Stresstest versucht anhand einer aktuellen Baseline+x herauszufinden, wie ein System mit Überlast-Szenarien zurechtkommt. In beiden Fällen ist das Monitoring des Systems sowie die Erfassung von Kennzahlen die Grundlage dafür, um später erkennen zu können, ob vermeintliche Verbesserungen tatsächlich den erhofften Effekt haben.

Was versucht man damit zu ermitteln?

Der zentrale Aspekt ist, herauszufinden welche Last das System maximal aushält. Beim Stresstest möchte man zusätzlich herausfinden, warum das System nicht mehr leisten kann oder was der „Bottleneck“ ist. Grundvoraussetzung dafür ist ein gutes Monitoring der Komponente, die unter Last steht. Beim Lasttest geht es eher darum herauszufinden, wie man das System operativ betreiben muss, damit es die zu erwartende Last unterstützen kann, um auch dann noch ein wenig Puffer zu haben. Dies bedeutet, man ergründet, welche Hardware benötigt wird, und wie man die Last verteilen muss. Idealerweise sind diese Tests in den ganzen Continuous-Integration-Prozess eingebunden. So können Kennzahlen ermittelt und geprüft werden, was passiert oder wie sich beispielsweise eine Codeänderung auf die Anwendung auswirkt und erhält sofort Feedback, wenn sich etwas verschlechtert. Die Last- und Stresstest werden meist unterschätzt und erst gegen Ende der Entwicklung durchgeführt. Da signifikante Fehler dadurch erst spät gefunden werden, führt dies meist zu hohem Aufwand, diese zu beheben.

Was macht Gatling anders bzw. besser als herkömmliche Test-Tools?

In meinem Vortrag vergleiche ich JMeter und Gatling. JMeter ist fast zwanzig Jahre alt und besitzt seine eigene graphische Oberfläche und bietet damit auch weniger technikaffinen Leuten die Möglichkeit, Testszenarien zu erzeugen. Jedoch hat JMeter Usability-Nachteile bei der Versionierung und beim Refactoring. Ausserdem ist JMeter nicht sehr Ressourcen schonend, da es auf dem Java-Thread-Model aufbaut und blockierend arbeitet. Gatling gibt es seit 2012. Es richtet sich stärker an Entwickler und lässt sie ihre gewohnten Tools verwenden, wodurch sie deutlich produktiver und vermutlich auch zufriedener sind. Es setzt auf Scala als Programmiersprache und Akka mit Actuators und Netty für „Non-blocking I/O“ zum Definieren von Szenarien. Dadurch ist Gatling weitaus Ressourcen schonender als JMeter und man braucht nicht eine Armee von Slaves – wie bei JMeter -, die die Tests durchführen. Auch die Einbindung in den Continuous-Integration-Prozess geht einfacher von statten, da das Plugin zum Beispiel für Jenkins deutlich ausgereifter ist.

Zusammenfassend kann man sagen: Beide Tools haben Vor- und Nachteile. In einem Team, das sehr technisch ist und alle Code schreiben können, würde ich sofort Gatling vorschlagen. Wenn man jedoch in einem gemischten Team arbeitet, in dem vielleicht sogar nur eine Person Tests schreibt, die nur wenig Erfahrung in der Bedienung einer Entwicklungsumgebung hat, dann würde ich ganz klar zu JMeter tendieren.

Wie verwendet ihr Gatling in der täglichen Arbeit?

Bei Unic gibt es natürlich noch vorhandene JMeter-Test-Suiten, die wir erstmal nicht migrieren werden. Für neue Projekte setzen wir jedoch direkt auf Gatling. Aktuell arbeiten wir mit einem grossen Kunden, der nach und nach seinen grossen Monolithen in eine Microservice-Architektur umwandelt. Dabei trat bei einem Microservice ein Performance-Problem auf, das wir nun mit Gatling nachstellen und beheben können.

Willst Du mit Rainer Last- und Stresstests mitgestalten? Finde hier alle Stellen im Bereich Development.

Diesen Beitrag kommentieren

Die E-Mail-Adresse wird nicht veröffentlicht.