ppt-Datei

Werbung
Implementierung und Managment
unternehmenskritischer Anwendungen
insbesondere
Performance und Skalierbarkeit
EJB basierter Anwendungen
Thomas Walter
Manager Enterprise Java Group
BEA Central & Eastern Europe
mailto: [email protected]
WebLogic, das Herz von Java™
Inhalt
 Einführung BEA WebLogic
 Skalierbarkeit & Performance
2
Einführung BEA WebLogic
 Gegründet als WebLogic




Inc., seit Sept. 98 BEAs
WebXpress Division
100% Java, EJB seit Sept.
97
Clustered EJB seit Nov.
98
> 1400 Kunden, davon
nutzen ca. 600 EJB
Mittlerweile zahlreiche
Erfahrungen aus
Projekten.....
3
1999
1998
1997
1996
1995
Inhalt
 Einführung BEA WebLogic
 Skalierbarkeit & Performance
4
Skalierbarkeit und Performance
 Systeme wachsen in vieler Hinsicht
 Benutzer, Daten, Transaktionskomplexität
 Ein System skalieren heißt
 Hardware addieren und Konfigurationsparameter
ändern um Durchsatz zu erhalten oder zu erhöhen
 Keinen Applikations-Code oder Datenbankschemas
zu ändern
 Sicherstellen, daß zusätzliche Hardware ausgelastet
wird
5
Was reduziert Skalierbarkeit?
 Die gleichen alten Ursachen
 Konkurrenz um Daten
 Konkurrenz um Prozeßeinheiten
 CPUs, Threads
 Konkurrenz um Resourcen
 Database Connections
 Memory, Disk, I/O channels
6
...plus einiger neuen Tücken
 Geschwindigkeit des Deployments
 Verringertes Time to Market
 Rapide Skalierung nach Veröffentlichen der URL
 Verteilte Objekte und Komponenten
 Einfachheit der Benutzung und verführerische
Transparenz
 Technologische Heterogenität
 Web Server, Middleware, Datenbanken
 Performance-Belange werden vergessen bis
es zu spät ist
7
Verantwortlichkeiten
 Jeder hat Verantwortung zur Schaffung von
Skalierbarkeit

EJB-Designer




benötigen umfassende Sicht, nicht middleware- oder
datenbankzentrisch
Müssen wissen welche Verbesserungen gemacht werden
können nachdem System deployed ist
Server-Hersteller
Autoren der EJB Spezifikation bei Sun
 Wie bei ACID Transaktionseigenschaften
 Atomar, Consistent, Isoliert, Dauerhaft: C kommt
durch Applikation.
8
Flaschenhälse veranschaulicht

Jeder Knoten und jede Verbindung ist ein potentieller
Flaschenhals
9
Flaschenhälse an Knoten
 Appserver
 Threads blockiert durch DB oder Monitore
 Unnötig hohe Anzahl an request-handling Threads
 Garbage Collection
 Datenbankserver
 Shared Data
 Unnötig strenge Isolationlevels
 Profiler helfen, aber erfassen keine größeren
Muster
10
Flaschenhälse an Verbindungen
 Client zu Appserver
 Business-Methoden, remote Garbage Collection,
keep-alive Traffic
 Zwischen Appservern
 Concurrency und Caching-Protokolle, verteilte
Transaktionen, Objekt-Lokation
 Appserver zu Datenbank
 Zwischen Datenbank-Servern
 Verteilte Transaktionen und Lockmanagment
 DB Server zu Disk
11
Generelle Empfehlungen
 Zielgerichtetes Design: Zuerst UI
 Höchste Aufmerksamkeit gilt Anwender:
Benutzbarkeit und Performance müssen primäres
Ziel sein
 Applikations-Designer kommt zuerst, danach der
Bean-Designer
 Performance-Analyse planen
 Zur Design-Zeit wissen, wo Hooks gesetzt werden
und wie die Daten analysiert werden
 Kennen Sie Ihre Anwendung, kennen Sie die
HotSpots
12
Kennen Sie Ihre Anwendung
 E-Commerce Applikationen
 Viele Clients, hohes Lese / Update Verhältnis, wenig
Konkurrenz, großes Datenset
 Netzwerk Managment Systeme
 Wenige Operatoren, einige HotSpot Netzwerkknoten
 Banken und Bankomaten
 Viele Clients, wenig Gleichzeitigkeit, hoher IsolationLevel, kein Datenset
 Ermitteln Sie Datenset, Gleichzeitigkeit und
Update-Erfordernisse aus Use-Cases
13
Mythos: Stateless == Skalierbar
 „Stateless == Skalierbar“ ist bedeutungslos
 Es gibt immer Zustand: Frage ist wo lebt er?
 Stateless Middleware garantiert daß Middleware kein
Flaschenhals ist
 Was machen Sie wenn Datenbank zum Flaschenhals
wird?
 Zustand ist nützlich
 Datenbanken besitzen Caches, HTTP besitzt
Cookies
 In E-Commerce Applikationen wird zu 90%
gebrowsed
 Je geringer Anforderung an Cache-Kohärenz, desto
näher kann Cache an Client liegen
14
State verwalten
 Parameterisierte Caches
 Dauer, Menge, Concurrency und Replikation
 Wenn möglich getrennte Caches für Lesen
und Schreiben
 Redesign wenn hoher Anteil geshared wird


Frontends auf Queue Requests umstellen
Shared Updates ans Transaktionsende verlagern
 Entity Beans nur für shared Data
 Non-shared Data wird komplexes Attribut
15
Verkehr zwischen Appserver und
Client reduzieren
 UI spricht mit nur einer Bean (typisch:
Session)
 Verwenden Sie grobkörnige Interfaces



Daten bulk übertragen
IDL Attribute vermeiden
Nur Daten sollten dieses Interface passieren, keine
Referenzen
 Vermeiden Sie Client-Transaktionen
 Verwenden Sie Servlets statt Applets
16
Optimierung am Appserver
 Verkehr zwischen Appserver-Prozessen
 Vermeiden verteilter Transaktionen
 Anfragen partitionieren und an entsprechenden
Appserver verteilen
 Langlaufende Transaktionen vermeiden
 Lesende von Schreibenden möglichst
trennen
 Benutzen Sie Java™ Message Service (JMS)
um Requests zu serialisieren
17
Reduktion von Verkehr zw. App- und
DB-Servern
 Reduktion der übertragenen Datenmenge
 Umsichtiger Gebrauch von AppServer Caches
 Denormalisierung
 Reduktion der Request-Anzahl
 Bulk-Zugriff
 Stored Procedures
18
Datenbankoptimierung
 Daten Partitionierung
 DB-Log auf solid-state Disks legen
 Modifizieren von SQL Statements um
Optimizer-Hints
 Nicht in Queries benötigte Attribute sind
BLOBs
 Erweiterte DBMS Features verwenden
19
Was können Appserver beitragen?
 State Managment
 Konfigurierbare Policies anbieten
 Activation und Deactivation-Policies




Deaktiviere nach Timeout, nach Methode, nach Transaktion,
niemals
Aktiviere auf Anforderung
Concurrency (optimistisch, pessimistisch)
Caching (mit verschiedenen Isolation-Levels)
20
Flexible Caching Strategien
 Hängt ab von Lese- / Schreibmuster und
Toleranz gegenüber Cache-Inkohärenz
 Strategien



Nur ein Ort für primary Key
Viele Instanzen (für einen primary Key) die zu jeweils
anderen Servern sprechen
Viele Instanzen, die nur über DB kommunizieren
21
Was können Appserver beitragen...
 Daten-Partitionierung
 Factory based Routing
 Data-dependent Routing
 Connection Managment
 Keine TCP Connections von n Clients zu m Servern
 Objekt- und Resource-Pooling
 Transparentes Failover und Failback
 Monitoring Hooks für Requests, Datenbank-
Treiber, Caches
22
Was die EJB Spezifikation benötigt
 Massen CRUDs
 Relationships
 und effiziente Traversierung von Relationships
 Explizite Aktivierungs- / Deaktivierungs-
Policies
 Verbindung zwischen EJB Container und
JMS
23
Herunterladen