# Performance Testing zweier Architekturen



## ZH1896ZH (19. Jul 2022)

Für ein Projekt soll ich zwei Architektur-Prototypen bauen.

Die Protoypen sollen Webanwendungen sein und anschliessend auf ihre Performance geprüft werden:

Antwortzeit bei 20 gleichzeitigen Clients
Antwortzeit bei tiefer, normaler, erhöhter & hoher Last
CPU- & Arbeitspeicherauslastung bei 10 Clients
Maximale Anzahl Clients bis zum Systemabsturz
Bei der Geschäftslogik handelt es sich um Investmentstrategien {Bester gleitender Durchschnitt; Buy & Hold; Rebalancing}, welche auf grössere Mengen von Wertpapierdaten angewendet werden.

Die Anweisung ist, ich soll bei einem Prototypen die Berechnungen auf dem Client machen, beim Anderen die Berechnungen auf dem Server.

Ich habe den ersten Prototypen (3-Schichten; Client-Server; Berechnungen im Server) bereits erstellt. Dieser sieht so aus:



Meine Frage nun ist, wie die Architektur des zweiten Protoyps aussehen soll?

In erster Linie habe ich an eine Java-Desktop-Applikation gedacht, da dort die Berechnungen beim Client gemacht werden. Jedoch ist dies keine Webanwendung und die Applikation ist nur auf einen Client ausgelegt
Ich habe auch an ein Webapplikation gedacht, wo halt alle Berechnungen in JavaScript gemacht werden. Jedoch habe ich meine Bedenken ob das sinnvoll ist:
Da ich erstens nicht weiss wie ich die zwei Prototypen fair testen und vergleichen soll


Habt ihr eventuell eine Idee, wie ich den zweiten Prototypen bauen kann, sodass ein sinnvolles Performance-Testing im Anschluss gemacht werden kann?

Ich bin froh um jeden Input!


----------



## LimDul (19. Jul 2022)

Grundsätzlich würde ich die zweite Variante im Frontend mit Javascript sehen. Da gibt es lustige Toolkits wie angular und ähnliches


----------



## ZH1896ZH (19. Jul 2022)

LimDul hat gesagt.:


> Grundsätzlich würde ich die zweite Variante im Frontend mit Javascript sehen. Da gibt es lustige Toolkits wie angular und ähnliches


Alles klar, ich kenne mich leider nicht so gut mit JS-Frameworks aus. Gibt es da evtl. eines das sich anbieten würde, um die Business-Logik von Java nach JS zu übersetzen?
Auch frage ich mich, wie die Architektur mit Angular aussehen würde. Da läuft doch noch ein Server (Node.js) im Hintergrund. Könntest du mir das evtl kurz skizzieren?


----------



## ZH1896ZH (19. Jul 2022)

LimDul hat gesagt.:


> Grundsätzlich würde ich die zweite Variante im Frontend mit Javascript sehen. Da gibt es lustige Toolkits wie angular und ähnliches




Hast du an so etwas gedacht?
Letzte Frage:
Wie könnte ich diese beiden Architekturen fair testen? Mit einem Tool oder manuell?
--> da es bei der zweiten Architektur keine Rest-APIs gibt, kann ich mir nicht vorstellen wie ich das ganze testen soll 😐


----------



## LimDul (19. Jul 2022)

Ahnung hab ich davon nicht wirklich. Selenium wäre ein Tool, was man einfach auf die Web-Oberflächen loslässt.
JMeter ist mehr auf Performance-Tests ausgelegt und sollte das eigentlich abdecken.

Aber das ist alles maximal Halbwissen was ich habe - Javascript meide ich wie der Teufel das Weihwasser


----------



## Oneixee5 (19. Jul 2022)

LuP-Tests werden bei uns mit Apache JMeter durchgeführt. Die JMeter-Instanzen laufen in AWS. Zusätzlich laufen Dienste auf dem Server, welche alle Parameter des Servers überwachen. Die Software heißt Dynatrace. Man kann damit alles erkunden, alle Antwortzeiten, SQL-Statements, Garbage Collection, Netzwerk, Temperaturen, Datenträger, Logfiles, einfach alles.
Mit AWS kann man einfach die Last erhöhen oder einstellen, wie man gerade möchte.
Es entsteht aber etwas Aufwand um firmeneigene Proxys und IDS anzupassen, ansonsten würden solche Szenarien einfach unterbunden.


----------



## Oneixee5 (19. Jul 2022)

ZH1896ZH hat gesagt.:


> Anhang anzeigen 18758
> 
> Hast du an so etwas gedacht?
> Letzte Frage:
> ...


AngularJS ist mir etwas zu akademisch, das kann man im öffentlichen Dienst verwenden. Meine persönliche Meinung ist, man kommt mit React oder VueJS schneller ans Ziel.


----------



## mrBrown (19. Jul 2022)

ZH1896ZH hat gesagt.:


> --> da es bei der zweiten Architektur keine Rest-APIs gibt, kann ich mir nicht vorstellen wie ich das ganze testen soll 😐


Testen kann man die Performance bei sowas nur super  schwierig, außer es geht nur um die Server-Last, aber dann braucht man nichts testen, sondern kann einfach feststellen, das Variante A langsamer ist als „Variante A, abzüglich vieler Berechnungen“.

Für die Performance die der Nutzer sieht muss man mit echten Browsern und im Idealfall echten Nutzern testen, als Kriterien kann man zB Zeit bis DOM vollständig ausgebaut ist, Dauer und Größe der Request, Zeit bis zum letzten Layout-Shift, etc. In etwa das, was Lighthouse in Chrome liefert.

eindeutige Ergebnisse bleiben aber immer schwierig, einfach dadurch wie Nutzer Geschwindigkeit wahrnehmen.
Es kann durchaus als schneller wahrgenommen werden, wenn es einen Ladebalken gibt und die Ergebnisse 2 Sekunde brauchen, als wenn es keinen Ladebalken gibt, aber die Ergebnisse nach einer Sekunde da sind (Zahlen ausgedacht  ). Oder auch mit Lazy Loading, die Gesamtmenge ist langsamer, aber der Nutzer kann schneller _irgendwas_ machen bzw. sehen.


----------

