Dirk Weil | GEDOPLAN
Java EE hochverfügbar
dirk.weil@gedoplan.de
Dirk Weil
• GEDOPLAN GmbH, Bielefeld
• Java EE seit 1998
• Konzeption und
Realisierung
• Vorträge
• Seminare
• Veröffentlichungen
2 Java EE hochverfügbar
dirk.weil@gedoplan.de
Hochverfügbarkeit
• Lastverteilung
– Große Menge von Anfragen
– Verteilung auf mehrere
Cluster-Knoten
– Verschiedene
Lastverteilungsverfahren
– Einzelne Anfrage wird i. d. R. verlangsamt!
3 Java EE hochverfügbar
dirk.weil@gedoplan.de
Hochverfügbarkeit
• Ausfallsicherheit
– Mehrere redundante Cluster-Knoten
– Transparentes „Fail-Over“ bei
Knotenausfall
– Replikation von Sitzungsdaten
4 Java EE hochverfügbar
dirk.weil@gedoplan.de
Cluster-Architekturen
• Einfacher
Cluster-Aufbau
5
Client
LoadBalancer
DB
Cluster
Server 1
Web Logic
Server 1
Web Logic
Servlet EJB
CDI
JPA
JMS
Server 2
Web Logic
Server 2
Web Logic
Servlet EJB
CDI
JPA
JMS
Java EE hochverfügbar
dirk.weil@gedoplan.de
Cluster-Architekturen
• Mehrstufiger Cluster-Aufbau
6
Cluster 2
Client
LoadBalancer
DB
Server 3
Logic
Server 3
Logic
EJB
CDI
JPA
JMS
Server 4
Logic
Server 4
Logic
EJB
CDI
JPA
JMS
Cluster 1
Server 1
Web
Server 1
Web
Servlet
Server 2
Web
Server 2
Web
Servlet
Java EE hochverfügbar
dirk.weil@gedoplan.de
Cluster-Architekturen
• Segmentierter
Cluster-Aufbau
7
Cluster 1
Server 1
Web Logic
Server 1
Web Logic
Serv-
let
EJB
CDI
JPA
JMS
Server 2
Web Logic
Server 2
Web Logic
Serv-
let
EJB
CDI
JPA
JMS
Cluster 2
Server 3
Web Logic
Server 3
Web Logic
Serv-
let
EJB
CDI
JPA
JMS
Server 4
Web Logic
Server 4
Web Logic
Serv-
let
EJB
CDI
JPA
JMS
DBClient
LoadBalancer
Java EE hochverfügbar
dirk.weil@gedoplan.de
Cluster-Architekturen
• Load-Balancer = Illusion „1 Server“
• Implementierungsvarianten:
– Hardware
– Webserver-Proxy
– Cluster-aware Proxies
8
Load BalancerClient
10.1.2.101
Server 1
10.1.2.102
Server 2
10.1.2.103
Server 3
Java EE hochverfügbar
dirk.weil@gedoplan.de
Cluster-Architekturen
• Lastverteilungsverfahren:
– Round-Robin
– Random
– Gewichtet
• Sticky Session
9
Load BalancerClient
10.1.2.101
Server 1
10.1.2.102
Server 2
10.1.2.103
Server 3
Java EE hochverfügbar
dirk.weil@gedoplan.de
JBoss 7 im Clusterbetrieb
• „Work in Progress“
• Viele Änderungen
7.0.x 7.1.0 7.1.1 ( 7.1.3)
• Dokumentation
unvollständig,
teilweise
veraltet
10 Java EE hochverfügbar
dirk.weil@gedoplan.de
JBoss 7 im Clusterbetrieb
• Standalone-Modus
– Konfiguration …-ha.xml
– Kein gemeinsames Deployment!
– Autodeployment möglich.
11
Standalone
Server
Standalone
Server
Standalone
Server
Java EE hochverfügbar
dirk.weil@gedoplan.de
JBoss 7 im Clusterbetrieb
• Domänen-Modus
– Profil ha oder full-ha
– Gemeinsames Deployment
mittels Admin-Tools
– Kein Autodeployment
12 Java EE hochverfügbar
dirk.weil@gedoplan.de
JBoss 7 im Clusterbetrieb
13
JGroups
Infinispan
Stateful
SessionBeans
Hibernate(JPA)
Web
Session
HornetQ(JMS)
dirk.weil@gedoplan.de
Konfiguration eines Clusters
• Domain
• Server Group im
Profil ha
oder full-ha
14 Java EE hochverfügbar
dirk.weil@gedoplan.de
Konfiguration eines Clusters
• Demo:
– Master auf
Windows-PC
– 2 virtuelle
Linux-Maschinen
mit je 2 Slaves
15 Java EE hochverfügbar
dirk.weil@gedoplan.de
Web-Anwendungen
im JBoss-7-Cluster
• Lastverteilung mittels
mod_cluster möglich
– Dynamische Konfiguration
– Lastverteilung mit serverbasierten Metriken
– HTTP, HTTPS oder AJP
16
Apache
HTTP Server
10.1.2.101
JBoss1
10.1.2.102
JBoss2
10.1.2.103
JBoss3
HTTP/HTTPS/AJPHTTP/HTTPS
Java EE hochverfügbar
dirk.weil@gedoplan.de
Web-Anwendungen
im JBoss-7-Cluster
• Demo:
– Clusterfähige Web-Anwendung
im JBoss-Cluster
– Apache Webserver mit mod_cluster auf
Windows-PC
17 Java EE hochverfügbar
dirk.weil@gedoplan.de
EJBs im JBoss-7-Cluster
• Proxies implementieren
Lastverteilungsverfahren
• Erster Zugriff auf beliebigen Knoten
• Weitere Zugriffe durch Proxy verteilt
• Kein externer Loadbalancer nötig!
• Lastverteilung nur bei Remote-Zugriffen
18
Node 2
EJB
Node 1
EJBClient
Proxy
Java EE hochverfügbar
dirk.weil@gedoplan.de
EJBs im JBoss-7-Cluster
• Demo:
– Remote-Aufruf von Stateless und Stateful
Session Beans
19 Java EE hochverfügbar
dirk.weil@gedoplan.de
Messaging im JBoss-7-Cluster
• Verbindungsaufbau
(ConnectionFactory, Connection)
geschieht zufällig zu einem Knoten
• Meldungsversand
– PtP-Meldungen werden lastverteilt
– Pub/Sub-Meldungen gehen an alle Knoten
– Knoten ohne passende Consumer werden
nicht bedient
20 Java EE hochverfügbar
dirk.weil@gedoplan.de
Messaging im JBoss-7-Cluster
• Meldungsempfang
– Nur von einem Knoten
– aber: Knoten ohne passende Consumer
erhalten keine Meldungen
21 Java EE hochverfügbar
dirk.weil@gedoplan.de
Messaging im JBoss-7-Cluster
• Ein Ausfall eines Knotens …
• … wird serverseitig automatisch
behandelt
– Das Lastverteilungsverfahren wird
reorganisiert
– Zwischenzeitlich für den ausgefallenen
Knoten vorgesehene Meldungen werden
zugestellt, wenn er wieder läuft
22 Java EE hochverfügbar
dirk.weil@gedoplan.de
Messaging im JBoss-7-Cluster
• Ein Ausfall eines Knotens …
• … führt clientseitig zum Abbruch
– sofortiges Reconnect (an anderen Knoten)
möglich
• Keine Meldung geht verloren, wenn
Auslieferung persistent!
23 Java EE hochverfügbar
dirk.weil@gedoplan.de
JPA-Entities
im JBoss-7-Cluster
• Profitieren nur indirekt
– Lastverteilung Webanwendung bzw.
EJBs
– Failover Datenbank
– Performanceerhöhung
• 2nd Level Cache
• Query Cache
24 Java EE hochverfügbar
dirk.weil@gedoplan.de
JPA-Entities
im JBoss-7-Cluster
• Default-Verfahren: Cache mit Invalidierung
– Jeder Knoten füllt den 2nd Level Cache
selbsttätig
– Schreiboperation invalidiert betroffene
Einträge auf den anderen
Cluster-Knoten
• Andere Verfahren
möglich, aber
selten sinnvoll
25
JBoss1
L2C
JBoss2
L2C
JBoss3
L2C
Java EE hochverfügbar
dirk.weil@gedoplan.de
Infinispan-Repl.-Verfahren
• Session-Replikation
– Default: An alle, asynchron
• Skaliert nicht
• Hohe Verfügbarkeit
– Synchron
– Distributed
• 1 … n Kopien
• Skaliert
• Verringerte Verfügbarkeit
26 Java EE hochverfügbar
dirk.weil@gedoplan.de
Session Replication
• Für Web-App in
web.xml aktivieren
• Für EJBs serverabhängig
Java EE hochverfügbar27
<web-app …>
…
<distributable />
<jboss …>
<jee:assembly-descriptor>
<c:clustering>
<jee:ejb-name>CounterBean</jee:ejb-name>
<c:clustered>true</c:clustered>
</c:clustering>
dirk.weil@gedoplan.de
Session Replication
• Nur Serializable!
• Fat Session Problem
• Braucht N-fach Speicher
• Skaliert nicht, wenn Replikation an alle
• Unterschiedliche Trigger
• Verschiedene Granularitäten
Java EE hochverfügbar28
dirk.weil@gedoplan.de
GlassFish
• Domäne
– Dedizierter
Admin-Server
– Vollständige Kontrolle
der Cluster-Server
per SSH möglich
Java EE hochverfügbar29
Das Bild kann zurzeit nicht angezeigt werden.
dirk.weil@gedoplan.de
GlassFish
• Lastverteilung & Failover
– Web-App: HTTP Load Balancer Plug-In
– EJBs: InitialContext: Random node
EJB Proxy: Sticky / Per-Req. LB
Transparent Failover
– JMS: Message Broker
Verteilte Destinations
Transparent Failover möglich
Java EE hochverfügbar30
dirk.weil@gedoplan.de
GlassFish
• Replikationsverfahren
– In Memory
– Je ein Replikat
– Consistent Hash
Algorithm
Java EE hochverfügbar31
dirk.weil@gedoplan.de
WebLogic
• Domäne
– Dedizierter Admin-Server
– Rechnerübergreifend
mittels Node Manager
– Deployment auch auf
Cluster-Teile möglich
Java EE hochverfügbar32
dirk.weil@gedoplan.de
WebLogic
• Lastverteilung & Failover
– Web-App: Webserver-Plugin
– EJBs: Replica-aware Stubs
– JMS: Distributed Destinations
Migratable JMS Servers
Java EE hochverfügbar33
dirk.weil@gedoplan.de
WebLogic
• Replikationsverfahren
– In Memory (Primär/Sekundär)
– Filesystem
– Datenbank
Java EE hochverfügbar34
Schön, dass Sie da waren!
Fr, 15:30: Java EE – Lessons Learned
dirk.weil@gedoplan.de

Java EE hochverfügbar