Aktuelle Anpassungen
This commit is contained in:
parent
edc2b5e15f
commit
2ec3b84090
5 changed files with 39 additions and 105 deletions
|
@ -2,11 +2,10 @@
|
|||
\chapter{Konzept}
|
||||
\label{ch:concept}
|
||||
|
||||
Das folgende Kapitel enthält die im Rahmen dieser Arbeit entstandenen Konzepte, um die aktuellen Probleme aufzuzeigen.
|
||||
Hierbei sind verschiedene Vorgehen zu verwenden, da die Anwendung aktuell noch nicht als produktive Anwendung
|
||||
freigegeben ist. Zum einen werden die aktuelle Mitarbeiter befragt, zu anderen wird der Produktionsserver selbst
|
||||
überprüft. Danach wird die Anwendung an sich untersucht und zum Schluss wird eine Neuentwicklung mit Hilfe anderer
|
||||
Frameworks diskutiert.
|
||||
Das folgende Kapitel enthält die im Rahmen dieser Arbeit entstandenen Konzepte, um die vorhanden Probleme zu
|
||||
identifizieren und mit entsprechenden Maßnahmen entgegenzusteuern. Hierbei werden zum einen die Konfigurationen
|
||||
der eingesetzten Software überprüft. Zum anderen werden die verschiedenen Schichten der entwickelten Software
|
||||
auf mögliche Optimierungen untersucht und bewertet.
|
||||
|
||||
\section{Allgemeine Betrachtung des Systems}
|
||||
\label{sec:concept:viewsystem}
|
||||
|
@ -29,7 +28,7 @@ Server an seiner Leistungsgrenze arbeitet und dadurch es nicht mehr schafft die
|
|||
abzuarbeiten.
|
||||
|
||||
Da unter Linux der Arbeitsspeicher nicht mehr direkt freigegeben wird, ist hier die Page-Datei der wichtigere Indikator.
|
||||
Wenn dieses in Verwendung ist, dann benötigt die aktuell laufenden Programme mehr Arbeitsspeicher als vorhanden ist,
|
||||
Wenn dieses in Verwendung ist, dann benötigen die aktuell laufenden Programme mehr Arbeitsspeicher als vorhanden ist,
|
||||
wodurch der aktuell nicht verwendete in die Page-Datei ausgelagert wird. Hierdurch erhöhen sich die Zugriffszeiten auf
|
||||
diese Elemente drastisch.
|
||||
|
||||
|
@ -42,7 +41,7 @@ zwischengespeichert werden kann und daher diese Daten immer wieder direkt von de
|
|||
\label{sec:concept:softwarestructure}
|
||||
|
||||
Bei der Performance-Untersuchung der Anwendung, wird sich im ersten Schritt auf die Dokumentenliste beschränkt. Anhand
|
||||
dieser können die Optimierungen getestet und überprüft werden. Im Nachgang können die daraus gewonnen Kenntnisse auf
|
||||
dieser können die Optimierungen getestet und überprüft werden. Im Nachgang können die daraus gewonnenen Kenntnisse auf
|
||||
die anderen Abfragen übertragen werden.
|
||||
|
||||
Die Dokumentenliste zeigt direkte und indirekte Informationen zu einem Dokument an. Hierzu gehört die Kennung des
|
||||
|
@ -52,10 +51,10 @@ dem Schreibdatum sortiert, um die Ergebnisse bei gleichen Werten der zu sortiere
|
|||
immer in einer chronologisch aufsteigenden Form zu darzustellen.
|
||||
|
||||
Aktuell verwenden die Editoren die Dokumentenliste um die Briefe eines Adressaten zu filtern und diese in
|
||||
chronologische Reihenfolge aufzulisten und zu untersuchen wie Kommunikation zwischen den Wedekind und dem Adressat
|
||||
chronologische Reihenfolge aufzulisten und zu untersuchen wie Kommunikation zwischen Herrn Wedekind und dem Adressaten
|
||||
abgelaufen ist. Ebenso wird nach Standorten sortiert, um zu prüfen mit welchen Personen sich an den ...
|
||||
|
||||
\mytodos{Hier noch mehr INfos dazu, für was genau die Editoren diese tun}
|
||||
\mytodos{Hier noch mehr Infos dazu, für was genau die Editoren diese tun}
|
||||
|
||||
Da die Daten in der 3. Normalform in der Datenbank gespeichert werden, sind einige Relationen für die Abfragen
|
||||
notwendig. Dies wird durch die generische Abfrage in \autoref{lst:documentlist} gezeigt. Zusätzlich wird für jedes
|
||||
|
@ -109,96 +108,22 @@ Seite mit den Daten zu rendern um diese an den Client auszuliefern. Diese 2 Zeit
|
|||
Seite mit dargestellt werden. Somit kann der Benutzer auch direkt sehen, wenn das laden länger gedauert hat, an welcher
|
||||
Stelle die Verzögerung aufgetreten ist.
|
||||
|
||||
Zum Schluss soll die gesamte Anwendung noch automatisiert getestet werden. Hierfür wird ein Shell-Skript erstellt, dass
|
||||
automatisiert alle URLs der Webseite mehrfach abfragt. Die Dauer der Aufrufe der Webseiten werden gemessen und
|
||||
Die Abfragen werden ebenfalls untersucht und mit verschiedenen Methoden optimiert. Hierfür werden zum einen auf native
|
||||
SQL"=Anfragen umgestellt und die Ausführungszeiten überprüft. Ebenfalls werden die Abfragen durch Criteria API erzeugt
|
||||
und dessen Ausführungszeit ermittelt.
|
||||
|
||||
% https://www.tutorialspoint.com/jpa/jpa_jpql.htm
|
||||
|
||||
Zusätzlich werden im SQL-Server Optimierungen vorgenommen, darunter zählen die materialized views, welche eine erweiterte
|
||||
View sind. Neben der Abfrage der Daten beinhalteten diese auch noch nicht vorberechneten Daten der Abfrage, womit diese
|
||||
viel schneller abgefragt werden können. Zusätzlich werden die cached queries überprüft ob diese eine Verbesserung der
|
||||
Performance und der Abfragedauern verkürzen können.
|
||||
|
||||
Um die Optimierungen in der Anwendung zu überprüfen, werden die Webseiten über ein Shell-Skript abgefragt. Das Skript
|
||||
ruft automatisiert die URLs der Webseite mehrfach ab. Die Dauer der Aufrufe der Webseiten werden gemessen und
|
||||
statistisch ausgewertet. Für einen späteren Vergleich werden diese Informationen gesichert und mit einem erneuten Aufruf
|
||||
nach den Optimierungen verglichen. Hierdurch kann auch festgestellt werden, ob die Optimierungen erfolgreich waren.
|
||||
Um die Netzwerklatenz ignorieren zu können, wird das Skript auf dem gleichen Computer aufgerufen, auf dem die Webseite
|
||||
gestartet wurde.
|
||||
|
||||
Das zugehörige Script ist im Anhang \ref{ap:timing} angehängt.
|
||||
|
||||
\section{Vergleich mit anderen Technologien}
|
||||
\label{sec:concept:technologiecompare}
|
||||
|
||||
\mytodos{Noch tiefer eingehen?}
|
||||
|
||||
Damit eine Umsetzung auf eine andere Technologie umgestellt werden kann, muss dies den kompletten Technologie"=Stack
|
||||
besitzen, wie dies von der \ac{JSF} unterstützt wird. Daher fallen reine FrontEnd"=Bibliotheken wie VueJS oder React aus
|
||||
der Betrachtung heraus, da sie zusätzlich noch einen Backend für die Anwendungslogik (englisch business logic) benötigt.
|
||||
|
||||
\subsection{C\# - ASP.NET Core MVC}
|
||||
\label{sec:concept:technologiecompare:aspnetcore}
|
||||
|
||||
Beim Vergleich zu \ac{JSF} steht ASP.NET Core MVC in nichts nach. Im großen und ganzen ist der Funktionsumfang der
|
||||
gleiche und mit dem EntityFramework gibt es ebenfalls einen sehr mächtigen \ac{ORM}. Hierbei wird die Programmierung anhand
|
||||
des \ac{MVC}"=Entwurfsmuster implementiert \citep{AspNetCore:2024:MVC}. Dieses Muster erleichtert die Trennung der
|
||||
Benutzeranforderungen, welche durch die Controller mithilfe der Modelle abgearbeitet werden, von der Bedienoberfläche,
|
||||
die hier in der Standardelementen von Webseiten, wie \ac{HTML}, \ac{CSS} und Javascript definiert werden. Zusätzlich
|
||||
existiert noch ein spezifischer Syntax um die Daten dynamisch in die Seiten einzufügen.
|
||||
|
||||
Das System selbst ist in Schichten, auch Middleware genannt, aufgebaut \citep{AspNetCore:2024:Middleware}. Hierbei
|
||||
übernimmt jede Middleware ihre entsprechende Aufgabe oder gibt die Anfrage an die nächste Middleware weiter und wartet
|
||||
auf deren Antwort um diese und den Client zurückzugeben.
|
||||
Diese Konzept wird direkt vom Standard umgesetzt und somit sind die unterschiedlichen Verarbeitungen getrennt
|
||||
implementiert worden, was zu besserer Wartbarkeit des Programmcodes führt. Und die eigene Anwendung kann dadurch
|
||||
je nach Bedarf die Middleware aktivierten, die wirklich benötigt wird.
|
||||
|
||||
Zusätzlich können über eine Vielzahl an vorhandenen NuGet-Paketen das Programm erweitert werden. Oder Komponenten
|
||||
komplett ersetzt werden, wie z.B. das EntityFramework durch eine einfachere leichtere Version eines reinen \ac{ORM}
|
||||
zu ersetzt.
|
||||
|
||||
C\# ist wie Java durch die neue .NET Runtime, aktuell in der Version 8 verfügbar, für die meisten Betriebssystem verfügbar.
|
||||
Bei der Übersetzung hat C\# einen Vorteil gegenüber von Java, da hier der Code wie bei Java zuerst in eine Zwischencode
|
||||
\ac{IL} kompiliert wird und zur Laufzeit über einen \ac{JIT} Compiler dann direkt in optimierten Maschinencode übersetzt wird.
|
||||
Hierbei haben die meistens Test gezeigt, dass das .NET Framework hier um einiges effizienter und schneller arbeitet als
|
||||
die Java Runtime. Zusätzlich wird bei ASP.NET Core nicht noch ein zusätzlicher Server benötigt um die Anwendung aktiv
|
||||
zu halten.
|
||||
|
||||
\subsection{Golang}
|
||||
\label{sec:concept:technologiecompare:golang}
|
||||
|
||||
Go (auch Golang) ist eine junge Programmiersprache, die sich durch Simplizität und Multifunktionalität auszeichnet, was
|
||||
eines der Ziele bei der Entwicklung ist. Weitere Ziele waren die native Unterstützung von Nebenläufigkeit und die
|
||||
leichte Verwaltung von großen Codebasen in größeren Entwicklerteams und ein hohen Übersetzungsgeschwindigkeit.
|
||||
Hierdurch ist es sehr einfach und effizient möglich eine Anwendung mit Go zu entwickeln \citep{Golang:2024}.
|
||||
Zusätzliche überzeugt Go durch die Typsicherheit und die automatische Speicherbereinigung durch den \ac{GC}.
|
||||
Die Entwicklung von Microservices mit Go wird durch die integrierten Funktionen und Bibliotheken gut Unterstützt,
|
||||
wodurch die Entwicklung, Bereitstellung und Skalierung erleichtert wird.
|
||||
|
||||
Go wird in eine native Anwendung übersetzt, da für die großen Betriebssystem entsprechende Compiler existieren, sind
|
||||
Anwendung in Go ebenfalls nahezu Plattformunabhängig. Durch den integrierten Cross-Compiler, kann die Software direkt
|
||||
für andere Betriebssystem mit erstellte werden.
|
||||
|
||||
Für eine dynamische Webseite, reichen die Standard-Bibliotheken, wobei auch hier gibt es verschiedene Frameworks die
|
||||
eine Unterstützung für \ac{MVC} einbauen. Ein direkter \ac{ORM} ist ebenfalls vorhanden, um den einfachen Zugriff
|
||||
auf eine Datenbank zu ermöglichen.
|
||||
|
||||
\subsection{PHP}
|
||||
\label{sec:concept:technologiecmopare:php}
|
||||
|
||||
Mit der Skriptsprache PHP ist es sehr einfach eine dynamische Webseite zu entwickeln, da diese genau für solche
|
||||
Zwecke entwickelt wurde. Hierbei wird der Code nicht übersetzt, sondern immer zu Laufzeit interpretiert, was im
|
||||
Gegensatz zu den anderen vorgestellten Möglichkeiten im Sinne der Performance eindeutig ein Nachteil ist.
|
||||
Dafür ist eine Änderung nur mit Hilfe eines Texteditor sehr einfach und schnell umzusetzen.
|
||||
Der Zugriff auf eine Datenbank, ist direkt mit integriert und muss nur durch die Bereitstellung der passenden Treiber
|
||||
aktiviert werden.
|
||||
|
||||
Die Template-Funktion für die Webseite wird nicht direkt unterstützt, sonder hier muss zwingend eine externe Bibliothek
|
||||
verwendet werden. Sonst entsteht sehr viel gleicher Code, der auf Dauer nicht mehr Wartbar bleibt.
|
||||
|
||||
Für PHP gibt es ebenfalls umfangreiche Frameworks für die \ac{MVC}"=Unterstützung, wie z.B. \textit{Laravel} oder
|
||||
\textit{Symfony}. Um diese Webseiten aber nun wieder auf den Webserver betreiben zu können wird der \textit{composer}
|
||||
benötigt, der den Quellcode zusammenpackt und für die Bereitstellung vorbereitet. Hierbei ist die Leichtigkeit der
|
||||
Skriptsprache aber verloren gegangen.
|
||||
|
||||
\subsection{Fazit}
|
||||
\label{sec:concept:technologiecompare:summary}
|
||||
|
||||
Den größten Vorteil würde man aktuell mit der Umsetzung in Go bekommen, da dies für seine Geschwindigkeit und einfach
|
||||
bekannt und Entwickelt wurde. Zudem ist die Programmiersprache sehr jung und hat keine Altlasten mit dabei. Der
|
||||
größte Nachteil darin ist aber, dass hierfür noch nicht so viele Entwickler existieren, die dann das Projekt
|
||||
unterstützen können.
|
||||
|
||||
Meiner Einschätzung nach, wäre ein Umstieg im aktuellen Stadium nicht sehr sinnvoll, da zum einen der großteil der
|
||||
Anforderung umgesetzt ist, und für jeden Änderung die Mitarbeiter sich erst in die neue Code-Basis einarbeiten müssten.
|
||||
Bei Weiterentwicklungen durch Studenten, ist man mit Java im Vorteil, da dies an der Uni gelehrt wird.
|
||||
|
|
|
@ -29,9 +29,6 @@ prüfen, die den Cache von OpenJPE auswerten}
|
|||
Nun werden die unterschiedlichen Schichten betrachtet und möglichen Performance-Verbesserungen untersucht und deren
|
||||
Vor"= und Nachteile herausgearbeitet.
|
||||
|
||||
\subsection{Caching im PostgreSQL}
|
||||
\label{sec:performance-checking:investigation-application:caching-postgresql}
|
||||
|
||||
\subsection{Caching im OpenJPA}
|
||||
\label{sec:performance-checking:investigation-application:caching-openjpa}
|
||||
|
||||
|
@ -41,9 +38,6 @@ Vor"= und Nachteile herausgearbeitet.
|
|||
\subsection{Caching in \ac{EJB}}
|
||||
\label{sec:performance-checking:investigation-application:caching-ejb}
|
||||
|
||||
\subsection{Abfragen Native}
|
||||
\label{sec:performance-checking:investigation-application:query-native}
|
||||
|
||||
\subsection{Abfragen JPQL}
|
||||
\label{sec:performance-checking:investigation-application:query-jpql}
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
% ****************************************************************************************************
|
||||
% 1. Personal data and user ad-hoc commands
|
||||
% ****************************************************************************************************
|
||||
\newcommand{\myTitle}{Analyse und Optimierung der Webseite des Wedekind Projektes\xspace}
|
||||
\newcommand{\myTitle}{Multi-Layer Optimization Strategies for Enhanced Performance in Digital Editions: A Study on Database Queries, Caches, Java EE and JSF\xspace}
|
||||
%\newcommand{\mySubtitle}{An Homage to The Elements of Typographic Style\xspace}
|
||||
\newcommand{\myDegree}{Bachelor of Science (B.Sc.)\xspace}
|
||||
%\newcommand{\myDegree}{Bachelor of Arts (B.A.)\xspace}
|
||||
|
|
BIN
thesis.pdf
BIN
thesis.pdf
Binary file not shown.
17
thesis.tex
17
thesis.tex
|
@ -119,6 +119,10 @@
|
|||
% https://books.google.de/books?hl=de&lr=&id=3qO8DQAAQBAJ&oi=fnd&pg=PA1&dq=frank+wedekind&ots=S4LHWQ0h2e&sig=Mz8PEGF-md4n3AwH9cgXq-5vUac#v=onepage&q=frank%20wedekind&f=false
|
||||
% https://www.martin.germanistik.uni-mainz.de/forschung/frank-wedekind/
|
||||
|
||||
% Webseiten für Java und Payara
|
||||
% https://blog.payara.fish/how-to-deploy-an-application-on-payara-server-5
|
||||
% https://docs.payara.fish/community/docs/6.2023.1/Technical%20Documentation/Ecosystem/IDE%20Integration/IntelliJ%20Plugin/Payara%20Server.html
|
||||
|
||||
% Probleme mit Latexmk nach einen Update
|
||||
% pacman -S texlive-meta
|
||||
% > fmtutil-user --all
|
||||
|
@ -134,9 +138,11 @@
|
|||
% 1. Neue Payara Server - Local hinzufügen
|
||||
% 2. Bei Before Lunch "Build artifact" hinzufügen und "WedekindJSF.war" auswählen
|
||||
% 3. Unter Deployment "Artifact" "WedekindJSF.war" hinzufügen
|
||||
% 4. Sollte es Probleme mit dem Deyploment geben, ala "kann ...Servlet-class nof found" einfach alle target-Verzeichnis löschen und deployen
|
||||
|
||||
% Konfiguration Glassfish/Payara (Muss scheinbar nach jedem neustart des Rechners gemacht werden)
|
||||
% 1. Payara-Server starten, damit man an die Admin-Oberfläche kommt unter http://localhost:4848/
|
||||
% > /opt/payara/bin/asadmin start-domain domain1
|
||||
% 2. Unter Ressources\JDBC\JDBC Connection Pools einen neuen Anlegen:
|
||||
% 2.1. Poolname vergeben
|
||||
% 2.2. Resource Type: javax.sql.DataSource
|
||||
|
@ -149,4 +155,13 @@
|
|||
% 3.1. JNDI Name: jdbc/wedekindPostgreSQL (muss mit jta-data-source aus persistence.xml zusammen passen)
|
||||
% 3.2. Pool Name: den unter 2 angelegten Pool auswählen
|
||||
% 3.3. Mit Save bestätigen
|
||||
% 4. Payara-Server neustarten
|
||||
% 4. Payara-Server neustarten
|
||||
|
||||
% Sollte der Ping nicht gehen, dann braucht man noch die Treiber, welche hier zu finden sind: https://jdbc.postgresql.org/download/
|
||||
% Häufige Fehlermeldung dafür ist "No suitable driver found for jdbc:postgresql://...."
|
||||
% Nach dem Download mit nachfolgendem Kommando hinzufügen:
|
||||
% > /opt/payara/bin/asadmin add-library /path/to/download/jdbcdriver.jar
|
||||
% > sudo -i -u postgres
|
||||
% > psql
|
||||
% > CREATE EXTENSION adminpack;
|
||||
% danach sollte der Ping auf der Webseite gehen
|
Loading…
Reference in a new issue