creating digital answers

empulse auf dem „Around the JVM day“ der JAX 2013

empulse auf dem „Around the JVM day“ der JAX 2013

JAX 2013

Auch dieses Jahr fand Deutschlands größte Java Entwickler-Konferenz JAX wieder in der Rheingoldhalle in Mainz statt. Die ganze Woche über gab es spannende Vorträge und Sessions.

Am Donnerstag war ich mit meinem Kollegen Benjamin Seiller vor Ort. Dieser Tag war u.a. dem Thema JVM (Java Virtual Machine) gewidmet. Es gab durchweg spannende Sessions zum Thema Performance Analyse, Parallel Computing und serverseitige Optimierungen. Viele der vorgestellten Themen lassen sich sehr gut auf unseren Programmier-Alltag übertragen und umsetzen.

SPDY wird das neue HTTP 2.0

Besonders spannend fand ich den Vortrag „In Depth SPDY and Jetty“ von Thomas Becker (Webtide). Thomas demonstrierte sehr beeindruckend die Eigenschaften und Vorteile des SPDY Protokolls gegenüber dem aktuellen Standard „HTTP 1.1″. Das ursprünglich von Google entwickelte SPDY Protokoll wird das zukünftige HTTP 2.0 Protokoll werden.

SPDY MultiplexingDer große Vorteil gegenüber HTTP 1.1 ist der Multiplexing Ansatz, der es erlaubt über eine Socket-Connection mehrere Daten-Streams aufzubauen. Im HTTP 1.1 muss für jede Ressource (HTML-Seite, CSS-, JS-, Bilddatei etc.) eine eigene Socket-Connection vom Client zum Server geöffnet werden. Im SPDY Protokoll wird pro Client genau eine Socket-Connection aufgebaut, über welche dann durch Multiplexing mehrere Ressourcen gesendet werden können. Zusätzlich werden Header Daten komprimiert und reduziert, so dass gleichbleibende Header wie z.B. „User-Agent“ pro Client nur einmal zu Beginn übermittelt und anschließend weggelassen werden.

Ein weiterer herausragender Vorteil von SPDY ist der sogenannte SPDY-Push Mechanismus. Dieser ermöglicht es dem Server bei einem Request nicht nur eine Response mit dem Inhalt (z.B. HTML) an den Client zu senden, sondern gleichzeitig auch zugehörige weitere Ressourcen wie z.B. Bilder, CSS, JS. Über den Referer kann der SPDY Server einen Push- Cache aufbauen, so dass er alle benötigten Ressourcen einem Request zuordnen und diese dann innerhalb einer Response gemeinsam an den Client übertragen kann.

Für Java Entwickler hat das SPDY Protokoll den großen Vorteil, dass an der Applikation selbst keine Änderung vorgenommen werden muss. Das Protokoll muss rein serverseitig implementiert werden. Der aktuelle Jetty in der Version 9 stellt mit seinem SPDY-Connector die Referenz-Implementierung für das SPDY Protokoll. Clientseitig wird SPDY derzeit von aktuellen Chrome und Firefox Browsern unterstützt. Browser die kein SPDY unterstützen (z.B. der Internet Explorer), werden weiterhin über HTTP 1.1 bedient. Das SPDY Protokoll ist 100% kompatibel zu HTTP 1.1, so dass moderne Browser von SPDY profitieren, alle anderen Browser die Web-Anwendungen aber ebenfalls nutzen können. Neben dem Jetty und dem Apache Web Server gibt es derzeit noch keine „stable“ Implementierungen des Protokolls. Für den Tomcat Servlet-Container wird ein SPDY-Connector frühestens mit Version 8 bereitstehen.

Der reine Performance-Gewinn durch den Einsatz von SPDY bzw. SPDY-Push kann je nach Web-Anwendung bis zu 25 Prozent bringen. So demonstrierte Thomas uns eindrucksvoll am Ende seiner Session den Aufruf einer präparierten Webseite mit HTTP 1.1, SPDY und SPDY mit aktiviertem Push-Cache. Die Seite hatte mehrere Bild-Ressourcen, die beim Aufruf über HTTP 1.1 aufgrund des Aufbaus von entsprechend vielen Socket-Connections die Bilder sichtbar nacheinander geladen hat. Beim Aufruf mittels SPDY war bereits ein Unterschied in der Lade-Geschwindigkeit sichtbar, da nur noch eine einzige Socket-Connection aufgebaut wurde, über welche die Bilder übertragen wurden. Beim letzten Testfall (SPDY mit aktiviertem Push-Cache) konnte man einen deutlichen Unterschied erkennen: Die Bilder waren sofort da. Ich hatte den Eindruck, als kämen die Bilder direkt aus dem Browser-Cache (der Browser-Cache war natürlich in allen Szenarien deaktiviert).

Linux Knowhow ist auch bei Java Entwicklern erwünscht

So die Aussage der Session „Java auf Linux-Servern unter Hochlast“ von Oliver Jucknath und Felix Becker. Die beiden haben uns praxisnahe Beispiele für die Analysemöglichkeiten von Performance Problemen auf Linux-Servern unter Last gezeigt. Mithilfe von JMeter Szenarien demonstrierten sie, dass selbst kleine Änderungen an Anwendung und/oder Systemkonfiguration große Auswirkungen auf die Gesamt-Performance haben können. So kann ein Log-Eintrag, der durch die Anwendung erzeugt wird, im Zusammenspiel mit dem Auslagern der Log-Files auf ein NFS-Laufwerk zu wesentlich geringerem Durchsatz der Anwendung führen. Das häufige Schreiben via NFS ist im Verhältnis zur lokalen Festplatte extrem langsam und wird zusätzlich durch sonstigen Netzwerk-Traffic beeinflusst.

Der klare Aufruf der beiden ist, dass für den optimalen Betrieb einer Java Anwendung immer Entwickler und Sys-Admins eng zusammen arbeiten sollten. Vor allem sollten Java Entwickler sich nicht scheuen, ein gewisses Knowhow von Linux Systemen aufzubauen, um das Verhalten der eigenen Anwendung besser analysieren und einschätzen zu können.

Als kleinen Praxistipp lege ich allen, die „kill -3 <java-proc-id>“ noch nicht kennen, diesen Befehl wärmstens ans Herz. Das Ergebnis ist ein Stacktrace und Infos zum aktuellen JVM Zustand des Java Prozesses. Probiert es einfach mal aus!

Parallele Programmierung mit Akka

Sehr spannend fand ich auch die Vorstellung des Concurrency Frameworks „Akka“ durch Heiko Seeberger von Typesafe. Akka implementiert das Aktoren-Modell, welches dem Entwickler die parallele Programmierung mit Threads erleichtert.

Akka Actors

Quelle: Heiko Seeberger

Ein Aktor ist eine leichtgewichtige entkoppelte Einheit, die in der Regel genau eine Aufgabe bearbeitet. Referenzen dieser Aktoren kommunizieren untereinander über ein Messaging-System. Die eigentliche Implementierung eines Aktors ist daher von außen nicht sichtbar. Aktoren werden immer in einer Baum-Struktur erstellt, dessen Wurzel der sogenannte Akka „Guardian“ ist, welcher die Steuerung der einzelnen Aktoren übernimmt. Durch diese Hierarchie wird ein fehlertolerantes System aufgebaut, da jeder Aktor für die Fehlerbehandlung seiner Kinder zuständig ist. Ist keine Fehlerbehandlung implementiert, so übernimmt der Root-Guardian diese Aufgabe. Akka bietet die Möglichkeit, ein Aktoren-System sowohl in Java als auch in Skala zu implementieren.

Aus meiner Sicht lässt sich Akka besonders gut für typische Aufgaben wie Mail-Versand, Report-Generierung und jede sonstige Art von Background-Task verwenden. Als Entwickler muss man sich somit nicht mehr um die asynchrone und parallele Abarbeitung von Threads kümmern.

Die Keynotes – von Nashörnern und JavaScript

Nashorn

Quelle: Marcus Lagergren

Marcus Lagergren von Oracle stellte uns das Nashorn Projekt in der ersten Keynote vor und gab einen spannenden Ausblick, warum die JVM sich nicht nur allein für die Ausführung von Java eignet. Mit Nashorn können zukünftig auch dynamische Sprachen auf der Java Plattform ausgeführt werden. So könnte sich die JVM als generelle Plattform zur Ausführung verschiedener Sprachen als Standard etablieren.

In der zweiten Keynote hat Zeno Rocha (Liferay) dazu animiert, dass auch Java Entwickler sich aus ihrer streng typisierten Welt herausbewegen können und mal einen Blick auf JavaScript und HTML5 werfen sollten. Mit jQuery, YUI, AUI & Co. gibt es inzwischen sehr ausgereifte Tools, die auch schöne und objektorientierte Programmierung mit JavaScript erlauben.

JavaScript

Quelle: Zeno Rocha

Ein Beispiel, wie selbstverständlich die Nutzung von JavaScript heute ist, zeigt der Vergleich der Anzahl der Google Suchen nach den entsprechenden Keywords. So wurde in der Vergangenheit wesentlich häufiger nach dem Keyword „javascript“ gesucht als nach „jquery“. Inzwischen hat sich die Häufigkeit der beiden aufgerufenen Keywords umgekehrt.

Am Ende seiner Keynote machte Zeno  deutlich, dass Entwickler unbedingt neue Technologien früh einsetzen und ausprobieren sollen. So ist für ihn HTML5 keine Technologie der Zukunft, sondern Gegenwart. Eine klare Ansage auch an die Industrie, sich endlich von den uralten Browser Versionen zu verabschieden.

empulse ist auch im nächsten Jahr dabei

Insgesamt war es ein absolut spannender und lohnenswerter Besuch auf der JAX 2013. Ich freue mich bereits auf nächstes Jahr, dann wahrscheinlich auch mit eigenem Vortrag und Expo-Stand der empulse.

Vortragsfolien:

0 Kommentare

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>