Leistungssport

Werbung
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
Herunterladen