Hinweise zum Anwendungsentwurf
In diesem Artikel werden die Architekturvorschläge für Entwicklung und Optimierung von Anwendungen beschrieben.
Die Informationen zum Entwerfen von Anwendungen enthalten Vorschläge zur Architektur und Informationen zur Implementierung von Anwendungen. Für vorhandene Anwendungen können diese Empfehlungen eine Änderung der vorhandenen Implementierungen erfordern. Die Optimierung des Anwendungsservers und der Ressourcenparameter kann die größte Auswirkung auf die Leistung von Anwendungen mit abgestimmten Design haben.
Verwenden Sie die Hinweise zur Konzeptionierung von Anwendungen in diesem Artikel, um sicherzustellen, dass Ihre Anwendungen durchdacht gestaltet und optimiert sind. Diese Hinweise verweisen auf Websites und weitere Ideen für die Suche nach geeigneten Methoden für die Gestaltung von WebSphere-Anwendungen, insbesondere im Bereich der WebSphere-Erweiterungen für Java EE-Spezifikationen (Java™ Platform, Enterprise Edition).
Java EE-Anwendungen laden, speichern, erstellen und entfernen Daten aus relationalen Datenbanken. Dieser Prozess wird im Allgemeinen als Persistenz bezeichnet. Die meisten Unternehmensanwendungen greifen häufig auf die Datenbank zu. Die Architektur und die Leistung der Persistenzschicht ist für die Leistung einer Anwendung von entscheidender Bedeutung. Deshalb ist Persistenz ein sehr wichtiger Bereich, wenn Sie architekturbezogene Entscheidungen treffen, bei denen Kompromisse in Bezug auf die Leistung geschlossen werden müssen. Diese Anleitung empfiehlt, sich zuerst auf eine architektonisch sauberere Lösung zu konzentrieren, in der Datenkonsistenz, Sicherheit, Pflege, Portabilität und Leistung berücksichtigt werden. Obwohl mit diesem Ansatz möglicherweise keine absoluten Spitzenleistungen erzielt werden, wie sie bei einer manuellen Codierung einer Lösung möglich ist, die die genannten Servicequalitäten ignoriert, ist dieser Ansatz in Bezug auf die Datenkonsistenz, Wartungsfreundlichkeit, Portabilität, Sicherheit und Leistung ausgewogen.
Für die Persistenz sind mehrere Optionen in Java EE verfügbar: Session-Beans, die Entity-Beans einschließlich CMP (Container-Managed Persistence) und BMP (Bean-Managed Persistence) verwenden, Session-Beans, die Java Database Connectivity (JDBC) verwenden, und Java-Beans, die JDBC verwenden. Aus den zuvor genannten Gründen sollten Sie die Persistenz mit CMP-Entity-Beans vorziehen, weil dieser Ansatz eine maximale Sicherheit, Wartungsfreundlichkeit und Portabilität bietet. CMP wird auch in Bezug auf die Leistung empfohlen. Informationen zur Optimierung von Enterprise-Beans und insbesondere CMP finden Sie im Abschnitt "EJB-Container optimieren" des Artikels zur Optimierung von Anwendungsservern.
Wenn eine Anwendung zwar Enterprise-Beans, aber keine EJB-Entitäten erfordert, verwendet der Persistenzmechanismus in der Regel die JDBC-API. Da für JDBC eine manuelle Codierung erforderlich ist, ist die Structured Query Language (SQL), die für eine Datenbankinstanz ausgeführt wird, für die Optimierung der in der Anwendung verwendeten SQL-Anweisungen von entscheidender Bedeutung. Außerdem müssen Sie den Datenbankserver für die Unterstützung einer optimalen Leistung dieser SQL-Anweisungen konfigurieren. Schließlich muss noch die Verwendung spezifischer JDBC-APIs, einschließlich ausführbarer Anweisungen und Stapelbetrieb berücksichtigt werden.
Verwenden Sie, unabhängig vom ausgewählten Persistenzmechanismus, containergesteuerte Transaktionen. Hierbei delegiert die Bean die Verwaltung der Transaktionen an den Container. Für Anwendungen, die JDBC verwenden, kann dies auf einfache Weise durch ein Sitzungsfassadenmuster erreicht werden, das alle JDBC-Funktionen in einer Stateless-Session-Bean zusammenfasst.
Informationen zur Optimierung der Verbindung, über die die EJB-Entity-Beans bzw. JDBC kommuniziert, finden Sie im Abschnitt "Datenquellen optimieren" des Artikels zur Optimierung von Anwendungsservern.
Eine der Java EE-Standardarchitekturen für Programmierung ist die MVC-Architektur (Model View Controller), bei der ein Aufruf eines Controller-Servlet eine oder mehrere Kind-JSP-Dateien für die Erstellung der Ansicht enthalten kann. Das MVC-Muster wird für die Anwendungsarchitektur empfohlen. Dieses Muster erfordert eine deutliche Unterscheidung der Ansicht (JSP-Dateien oder Präsentationslogik), des Controllers (Servlets) und des Modells (Geschäftslogik). Die Verwendung des MVC-Musters unterstützt eine gesonderte Optimierung der Leistung und Skalierbarkeit jeder Schicht.
Implementierungen, die das Speichern des Clientbenutzerstatus vermeiden, bieten die höchste Skalierbarkeit und Leistung. Gestalten Sie die Implementierungen so, dass das Speichern von Statusinformationen vermieden wird. Falls das Speichern von Statusinformationen erforderlich ist, müssen Sie sicherstellen, dass der Umfang der Statusdaten und die Speicherdauer so klein wie möglich bleiben. Außerdem sollten Sie für den Fall, dass ein Fehler auftritt, die Möglichkeit der Statuswiederherstellung berücksichtigen, anstatt sich für das Failover auf die Replikation zu stützen.
- Optimierung der Sitzungsverwaltung
- Tipps zur Optimierung von EJBs
- Dynamischen Cache mit dem Cachemonitor optimieren
Der Workload der meisten Java EE-Anwendungen setzt sich aus mehr Leseoperationen als Schreiboperationen zusammen. Bei Leseoperationen muss eine Anforderung über mehrere Topologieebenen übergeben werden, die von einem Front-End-Web-Server, dem Web-Container eines Anwendungsservers, dem EJB-Container eines Anwendungsservers und einer Datenbank gebildet werden. WebSphere Application Server bietet die Möglichkeit, Ergebnisse auf allen Ebenen der Netztopologie und des Java EE-Programmiermodells mit Web-Services zwischenzuspeichern.
Anwendungsentwickler sollten sich beim Design der Anwendungsarchitektur Gedanken um das Caching machen, weil Caching in die meisten Ebenen des Programmiermodells integriert werden kann. Caching ist ein weiterer Grund für die Verwendung des MVC-Musters in Anwendungen. Die Kombination von Caching und MVC kann das Caching unabhängig vom Darstellungsverfahren und in Situationen durchgeführt werden, in denen den Clients der Anwendung keine Daten präsentiert werden.
Netzentwickler sollten sich bei der Netzplanung Gedanken um das Caching machen, weil Caching auch in die meisten Ebenen der Netztopologie integriert werden kann. Für Anwendungen, die im öffentlichen Internet zur Verfügung gestellt werden, sollten Netzentwickler ESI-Caching (Edge Side Include) in Erwägung ziehen, wenn das Caching von WebSphere Application Server auf das öffentliche Internet ausgedehnt werden soll. Services für Netz-Caching sind im Proxy-Server für WebSphere Application Server, WebSphere Edge Component Caching Proxy und im WebSphere-Plug-in verfügbar.
Der Workload von Java EE-Anwendungen lässt sich in der Regel in zwei Typen von Operationen einteilen. Der erste Typ von Operation wird ausgeführt, um auf eine Systemanforderung zu antworten. Der zweite Typ von Operation wird asynchron durchgeführt, nachdem die Benutzeranforderung, auf die Operation hin eingeleitet wurde, bedient wurde.
Beispielsweise können Sie eine Anwendung haben, in der Sie eine Bestellung aufgeben und anschließend weitere Aktionen ausführen können, während das System die Bestellung prüft, ferne Systeme abfragt und Sie später über den Status der Bestellung informiert. Dieses Beispiel kann auch synchron implementiert werden, sodass der Client nach Absenden der Bestellung auf eine Antwort warten muss. Bei der synchronen Implementierung müssen die Anwendungsserverressourcen und Sie warten, bis alle Operationen abgeschlossen sind. Falls der Prozess Ihnen die Weiterarbeit erlaubt, während das Ergebnis asynchron berechnet wird, kann der Anwendungsserver die Verarbeitung so planen, dass sie zu einem in Relation mit den anderen Anforderungen optimalen Zeitpunkt ausgeführt wird. Die Benachrichtigung an Sie kann dabei über E-Mail oder eine andere Schnittstelle innerhalb der Anwendung ausgelöst werden.
Da das asynchrone Konzept eine optimale Planung des Workload erlaubt und nur wenig Serverressourcen verbraucht, bieten sich asynchrone Architekturen an. WebSphere Application Server unterstützt die asynchrone Programmierung mit Java EE Java Message Service (JMS) und MDBs (Message-driven Beans) sowie Concurrency Utilities for Java EE, einem Service, der in den Artikeln zur Optimierung von Java Message Service und zur Optimierung von MDB beschrieben ist.
Stellen Sie sicher, dass beim Design aller Bibliotheken, die von Anwendungen verwendet werden, auch die serverseitige Leistung berücksichtigt wird. Einige Bibliotheken funktionieren gut in einer Clientanwendung, berücksichtigen aber keine serverseitigen Leistungsaspekte wie Speicherbelegung, Synchronisation und Pooling- Es wird empfohlen, alle Bibliotheken, die nicht im Rahmen einer Anwendung entwickelt werden, einem Leistungstest zu unterziehen, für den dieselbe Testmethodik wie für die Anwendung angewendet wird.
Weitere Referenzinformationen:IBM® WebSphere Developer Technical Journal: The top 10 Java EE best practicesImprove performance in your XML applications, Part 2