Leistungssport Performance-Aspekte großer JavaServer-Faces-Projekte Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim Version: 0.3 www.oio.de [email protected] Die Sprecher - Oliver Wolff & Christian Dedek 2 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH 1 Java, XML und Open Source seit 1998 ) Software Factory ) ) Object Rangers ) • Schlüsselfertige Realisierung von Java Software • Unterstützung laufender • Individualsoftware • Pilot- und Migrationsprojekte • Sanierung von Software • Software Wartung • Perfect Match • Rent-a-team • Coaching on the project • Inhouse Outsourcing Java Projekte ) Competence Center) • Schulungen, Coaching, Weiterbildungsberatung, Train & Solve-Programme • Methoden, Standards und Tools für die Entwicklung von offenen, unternehmensweiten Systemen 3 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH Die Themen Ajax State Saving Wundertüte Beyond JSF 4 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH 2 Was ist Groß? 500 500Benutzer Benutzer 100 100MB/h MB/hDurchsatz Durchsatz 100 100Views Views Viel Vielzu zuteuer teuer 100 100Entwickler Entwickler 5 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH Performance und Skalierung Wicket Wicketist ist2-4 2-4mal mal schneller schnellerals alsJSF JSF Entwickler.de Struts Strutsist ist4-9 4-9mal mal schneller schnellerals alsJSF JSF Blog Peter Thomas Man Mandarf darfdas dasBackend Backend nicht nichtvergessen vergessen JSF JSFist istnur nuretwas etwas für fürdas dasIntranet Intranet 6 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH 3 Entwicklungs- vs. Laufzeitskalierung • Komponentenmodel – Beschleunigt die Entwicklung – Laufzeit – Kein Zauberstab • Lebenszyklus – Laufzeit – Zeit zum Verständnis: immediate? – Definiert Ablauf 7 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH Übersicht State Saving 8 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH 4 Übersicht • Zustand einer Anwendung • Beinhaltet – Infrastruktur: Komponenten, Views, ... – Daten / Beans – !! Serialisierung von Beans • Beobachtete State-Größen – 100 KB – 250 KB – 2 MB 9 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH Server vs. Client Server Server Anwendung Realm Realm Anwendung Realm Realm Zustand Zustand Zustand Client Client 10 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH 5 Server vs. Client • Server Side: – – – – Context Incomplete: Back Button & Reload,.. Ist die Regel Bessere Antwortzeiten Skaliert schlechter • Client Side: – – – – – Context Complete Besser für Clustering Kein Speicherverbrauch zwischen Requests Braucht mehr Bandbreite Zusätzlichen Aufwand für Sicherheit 11 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH State bei Clustering von HTTP Anfragen Server 1 jsf-state jsf-state jsf-state jsf-state jsf-state jsf-state AJP Server 2 HTTP Loadbalancer AJP AJP jsf-state DB Server 3 jsf-state 12 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH 6 Optimierung I • Session möglichst klein halten • Verbesserung durch alternativen SerialisierungsProvider – Beispiel JBossSerializationProvider – Bei vielen parallelen Benutzern: bis 30% weniger CPU-Last • Baum (De-) Serialisierung sehr teuer (CPU) • „Je Ajax, desto Server“ – Zumindest bei JSF-Ajax 13 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH Optimierung II • Serialiserung, auch serverseitg – com.sun.faces.serializeServerState – org.apache.myfaces.SERIALIZE_STATE_IN_SESSION • Komprimierung – com.sun.faces.compressViewState – org.apache.myfaces.COMPRESS_STATE_IN_SESSION • Abwägen: Speicher vs. CPU 14 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH 7 Session Size bei serverseitiger Skalierung • Speicher begrenzt Zahl der möglichen Sitzungen pro Knoten • GC-Overhead steigt mit Größe des Heap • 32-Bit – bis zu 1,5 GB Heapsize problemlos nutzbar – oft bessere Antwortzeiten pro Request – geringerer GC-Overhead • 64-Bit – – – – Verfügbarkeit und Reife der Kombination J2EE-Server/JVM/OS ? GC-Overhead teilweise schlechtere Antwortzeiten(Prozessor-Taktraten) Kosten ? 15 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH Skalierungsproblem Session Replication TCP Loadbalancer Context /app Context /app ReplicationValve ReplicationManager Context /app ReplicationValve Multicast Session ReplicationManager Session ReplicationValve Multicast ReplicationManager Session Name Wert Name Wert Name Wert umsatz 5000 umsatz 5000 umsatz 5000 datum 28.9.2003 datum 28.9.2003 datum 28.9.2003 positionen 10, Tee 10, Tee 2, Kaffee 2, Kaffee 50, Lolly positionen 50, Lolly 10, Tee positionen 2, Kaffee 50, Lolly 16 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH 8 Lösungssszenario: Partitionierung von Zuständen Partition „Share 1“ Knoten A Knoten B Sub-Partition „Share 1“ Knoten A Sub-Partition „Share 2“ Knoten B Knoten X Knoten Y 17 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH Best Practices - Umgang mit Managed Beans • Eine Request-Scope-Bean / View • Eine SessionBean pro Anwendung / Modul • Definierter Dialog-Mechanismus – Shale, Orchestra, Seam, ... • PageScope über Erweiterung – JSFTemplating – PrimeFaces Optimus: ViewScope – JSF 2.0 18 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH 9 Anforderungen an die Zukunft I • Überdenken Konzept der Zustandsbehaftung – REST ist in aller Munde – RestFaces / PrettyFaces – Mainstream WebBeans / Seam • Zielrichtung für JSF-Anwendungen? • Scope – PageContext: Æ JSF 2.0 – Dialog 19 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH Anforderungen an die Zukunft II • Tokenize a´la ADF – Zumindest „Context Complete“ für Server Side • Implementierungen – (De-) Serialisierung – Speicherverbrauch: Bravo MyFaces – Fokus auf Client • Delta-State-Saving 20 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH 10 Übersicht Ajax 21 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH Spannungsfelder Ajax - Übersicht • Ajax verstehen – Eye Candy vs. Usability • Nicht alles Mögliche ist sinnvoll • Sinnvolles muß möglich sein • Einheitliche Verwendung • Kapselung reicht nicht aus – Verständnis muß gegeben sein 22 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH 11 Spannungsfelder Ajax - Übersicht II • Unterschiedliche Ansätze – Selten kompatibel – Möglichkeit der Vereinheitlichung • JSF 1.2: invokeOnComponenet() & DynaFaces • RichFaces & IceFaces? • Kapselung gegenüber Handarbeit • Woodstock & DojoInitializer? 23 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH Spannungsfelder Ajax - Aus der Praxis RichFaces RichFaces rockt! rockt! Echte EchteMänner Männer nehmen nehmenDojo Dojo 24 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH 12 Ajax Strategien - Dick & Dünn Ajax-Komponenten Dojo JSF-Stub Realm Realm Anwendung Realm Realm Ajax-Servlet Ajax-Servlet Ajax-Servlet Ajax-Servlet Komponente Daten Daten, Html JavaScript Daten Daten Programmier Programmier Modell? Modell? ?? Client FatClient Ajax? Ajax? DHTML? DHTML? 25 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH Ajax Strategien - Woodstock - Dojo 26 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH 13 Spannungsfelder Ajax - Auflösung • Es gibt keine perfekte Bibliothek • Am Framework vorbei skaliert schlecht: Dojo, jMaki • Mehrere gleichzeitige Ansätze sind tödlich • Wenn FatClient, dann richtig: Woodstock 27 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH Anti-Patterns - Partial Form Processing ... <h:inputText value="#{messageBean.message}" id="nameInput"> <a4j:support event="onkeyup"/> <f:validateLength minimum="3" /> </h:inputText> ... Æ <a4j:support event="onblur"/> 28 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH 14 Best Practices - Partial Page Rendering • Ziel: Desktopanwendung – Fenster nur verändert • Ajax: Partial Page Rendering • Entwickler müssen in passenden Strukturen denken – Modularisierung der Seite in beide Richtungen • Beispiel: RichFaces reRender-Attribut – Nicht vergessen: Gesendete Daten – Hilft weniger bei Client Side State Saving 29 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH Ajax Optimierung, Beispiel RichFaces • Wichtige Attribute: – – – – reRender, ajaxRendered a4j:region, renderRegionOnly, limitToList ajaxSingle, process eventQueue, requestDelay, ignoreDupResponses • Auswahl des richtigen Filters – – – – Tidy: Korrigiert sehr aufwändig Neko: Korrigiert weniger aufwändig, deutlich schneller None: Macht gar nichts, schnellste Variante forceparser 30 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH 15 Anforderungen an die Zukunft • Kompletter AjaxStack als Teil der Implementierung Æ JSF 2.0 • Zusammenarbeit Komponentenentwickler – Austauschbarkeit – ziemlich naiv • Schnelle Integration neuer Technologien 31 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH Übersicht Wundertüte 32 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH 16 Der richtige ViewHandler X JSP Facelets JSFTemplating Shale ICEFaces JSF Core Laufzeitgewinn: 10-30% 33 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH Context Parameter - Response Buffer • Produktive Anwendung, oberer Lastbereich • Responsezeiten, Angaben in Prozent 120 100 100 92,8 80 64,4 60 40 20 0 facelets.BUFFER_SIZE=50k responseBufferSize=50k 34 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH 17 Passende Designs - Datentabelle - Übersicht • Datentabelle • Häufige Anforderung: 100 Zeilen+ • Problem: Vielfache EL-Evaluierung, einige Sekunden Ladezeit Æ Lösung: „Richtige“ Datentabelle 35 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH Passende Designs - Datentabelle - Woodstock 36 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH 18 Komponenten vs. Anwendungsframework • JSF ist ein UI-Framework für Webanwendungen“ • JSF Design: – Fokus auf Komponenten-APIs – Lebenszyklus nicht perfekt – Aber: Alle Framework-Aspekte leicht erweiterbar Æ Grundlage für Anwendungs-Frameworks Æ JSF = Komponenten-Framework Æ Ziel: Anwendungsframework für konkretes Projekt – Architektur, kein Wildwuchs – Schulung der Entwickler 37 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH Übersicht Beyond JSF 38 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH 19 Schlüsselqualifikationen • Qualifikation im JSF-Dschungel • Reproduzierbarkeit im nichtfunktionalen Systemchaos – Teststrategien – deduktive Systematik • Kommunikation und Feedback – Einsatz von Issuetrackern – Produktion Management-Summaries und Reports 39 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH Probleme mit 3rd Party • Apache Datenbankpool hat nicht skaliert – fixed mit dbcp-1.2.2, pool-1.3,collections-3.2 Mitte 2006 • Concurrency issue (race condition) in unserem Application Framework – z.B. Hibernate HHH-1486 fixed 3.2.0 Feb. 2006 – Trat nur im stochastischen Lastverhalten auf – nicht deduktiv reproduzierbar 40 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH 20 Stabilitätsproblem Threadlocal • Bei Analyse des Benchmarks tritt ein moderates memory leak auf. – JDK 1.4 war dagegen fehlertolerant, der Fehler trat erst mit JDK 1.5 auf – Ursache war die falsche Verwendung des „thread local“ API – Der Bug wurde mehrfach wieder geöffnet, weil die API an mehreren Stellen aufgerufen wurde • Vergleiche – http://java.sun.com/j2se/1.5.0/docs/api/java/lang/ThreadLocal.html – http://java.sun.com/j2se/1.4.2/docs/api/java/lang/ThreadLocal.html • Der kleine Unterschied: – public void remove() • Removes the value for this ThreadLocal 41 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH Lost Cleanup - Thread local bug ? Container /Framework Thread -Local Collection Application 1.x set() 2.x get() 1. store() 3.x remove() 2. get() XY-Scope 3. cleanup() Container /Framework Exceptions ? 42 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH 21 Lost Cleanup - Example Siehe: http://jira.atlassian.com/browse/CONF-14988 43 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH JDK Concurrency Problem ? java.beans.Introspector Frameworks nutzen zum Zugriff auf Beans Reflection über jdk-Utility Introspector Bean Bean Bean Bean Bean getBeanInfo() getBeanInfo() getBeanInfo() getBeanInfo() getBeanInfo() Framework Framework Framework Framework Framework 44 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH 22 java.beans.Introspector • Sun-Implementierung: – Zugriff BeanInfo bi = (BeanInfo)beanInfoCache.get(beanClass); if (bi == null) { bi = (new Introspector(beanClass, null, USE_ALL_BEANINFO)).getBeanInfo(); beanInfoCache.put(beanClass, bi); – Deklaration private static Map beanInfoCache = Collections.synchronizedMap(new WeakHashMap()); • effektiv führt dies zu einer Synchronisation der Methode 45 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH Introspector & JSF 46 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH 23 java.beans.Introspector • Einfacher Fix: – Hashmap durch ConcurrentHashmap austauschen – im Benchmarkszenario 30% mehr parallele Requests erzielt (dann war die CPU-Grenze erreicht - keine Lockcontention) • Aber: SUN kann wegen Seiteneffekt keinen Fix im JDK akzeptieren – eingesetzte HashMap ist eine WeakHashMap die ein Caching ermöglicht das von GC abgeräumt werden kann – ConcurrentHashMap zeigt anderes Speicherverhalten • unproblematisch in unserem Fall da Caching klassenweit möglich ist • Ausblick: Douglas Leas JSR 166x Package enthält mögliche Lösung, die beide Spezifikationen erfüllt 47 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH Übersicht Fazit 48 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH 24 Persönliche Erfahrung führte zur ICW Gründung „Es ist Samstagabend: die kleine Tochter von Peter Reuschel hat krampfartige Hustenanfälle und bekommt kaum noch Luft. Der herbeigerufene Hausarzt kann zwar die akuten Symptome lindern, für eine genaue Diagnose braucht er aber eine Röntgenaufnahme der Lunge. Das Bild wird in der Notfallambulanz der nächsten Klinik gemacht, doch die Eltern sollen nur einige handschriftliche Stichworte zum Befund mitbekommen. Die Eltern wollen aber nicht, dass ihre Kleine nur anhand einiger schwer leserlicher Notizen weiterbehandelt wird, und bitten darum, das Röntgenbild für den Hausarzt mitnehmen zu dürfen. Doch die Dienst habende Ärztin antwortet nur, dass der Hausarzt das Bild bei Bedarf anfordern könne und es ihm dann in drei Wochen vorliege. Von ihren gesetzlichen Patientenrechten wissen die Eltern noch nichts.“ http://www.icw-global.com/de/de/unternehmen/gruendungsgeschichte.html 49 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH Project: persönliche Gesundheitsakte “LifeSensor®” • Herzstück der ICW Plattform ist LifeSensor, eine patientengeführte Gesundheitsakte, die der Datensammlung und -bereitstellung dient. Screenshot of LifeSensor Fitness. Links to calendar, medical data, emergency data, documents, personal data, news and account information. Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH 25 Integration: Personal Health Record Connected • • Ziel: Integration des vollständigen medizinischen Informationsflusses mit Anspruchsverwaltung und Abrechnung in einer patientenorientierten elektronischen Akte LifeSensor® fosters platform approach Ergebnis: Integration mit vielen Systemen und Beteiligten 51 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH High system complexity • System nutzt aktuelle Software Komponenten wie z.B: – JSF, Apache Tomcat, Axis, Apache httpd, Spring Framework • läuft auf verschiedenen Web Browsern mit Html, CSS und Ajax • exponiert Web Services Siehe http://idn.icw-global.com/solutions/community/conferences/icw-developer-conference-may-2008/conference-proceedings.html 52 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH 26 Ergebnisse ICW Performance Lab bis August 2008 • Ende 2006 Benchmark eingeführt – Konzeption, Implementierung, Test, Übergabe • Anzahl der parallelen Web GUI user in dieser Phase um Faktor 5 erhöht • Web GUI response time reduziert um 40% • 2007 Test by SUN Microsystems in Langen – Anzahl der parallelen User noch einmal Faktor 3 erhöht – 6000 parallele User (Spitzenlast) Quelle: http://www.icw-global.com/de/de/partner/benchmarks/benchmarktests/lifesensor-with-hp.html 53 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH Ergebnisse ICW Performance Lab bis August 2008 • Test mit HP in Böblingen – – – – – 10 Millionen Akten (500 Akten pro Professional) ~ 1TB 8500 (10 000) parallele Benutzer (Spitzen)last Oracle Database 10gR2 Patch set 10.2.0.4 64bit Tomcat 6.0.13 Cluster mit 6 Servern Java 6 Update 6 54 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH 27 Best Practices • Definition einer klaren Statemanagement Strategy – z.B. Konversationskonzept • Verwendung gut dokumentierter Lösungspatterns – Vermeidung von Standardfehlern – z.B. Datenvisualisierung • AJAX-Integration – keine gegenläufigen Ansätze – Orientierung auf echte Usability – z.B. RichFaces vs. Dojo 55 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH Architektur • Die JSF Architektur – hat viele „Stellschrauben“ in Bezug auf Performanzaspekte • oft einfach durch reine Konfiguration • „saubere“ Programmierung vorausgesetzt – Communities sorgen für Praxisnähe und -einsatz der Ideen • Starke Architektur-Governance senkt QM-Kosten – z.B. Serializable Issues, ThreadLocal Leaks 56 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH 28 Das letzte Wort Leistungsgrenzen der Kombination – JSF – Integrationframework – OR-Mapper sind am technologischen Gesamtstack aus – – – – – JVM OS RDBMS Netzwerk IO angelehnt. 57 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH Vielen Dank für Ihre Aufmerksamkeit ! Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim Version: 0.3 www.oio.de [email protected] 29 ? ? ? ? ? Fragen ? Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim Version: 0.3 www.oio.de [email protected] Mehr von OIO zum Thema... • Schulung: JavaServer Faces – http://www.oio.de/java-server-faces.htm • Schulung: Systematisches Performance Tuning – http://www.oio.de/seminar/entscheider/performance-tuning-schulung.htm • Beratung zur Performance Optimierung – http://www.oio.de/beratung-consulting/performance-optimierung/index.htm • Vortrag: Love & Peace & JSF – http://www.oio.de/public/java/jsf-woodstock/JM1.09_Love_Peace_JSF.pdf • Vortrag: JSF und AJAX – http://www.oio.de/m/konf/oop2007/OOP07_JSF-AJAX.pdf 60 Performance-Aspekte großer JSF-Projekte © 2009 Orientation in Objects GmbH 30