Stress-Test: Gleichzeitige WebFront-Benutzer

Da ich soeben eine Anfrage dafür bekommen habe und es ausprobieren wollte, habe ich einen „Stress-Test“ auf die JSON-RPC API losgelassen. Ich will euch die Ergebnisse natürlich nicht verheimlichen.

Testumgebung

[ul]
[li]IP-Symcon 5.0[/li][li]a) Windows 10, Intel i7-7700K@4,2GHz[/li][li]b) SymBox neo[/li][li]WebFront von der WebFront Demo: IP-Symcon WebFront[/li][li]Tool: Webserver Stress Tool - Website-Performance, Last- und Stress-Test[/li][li]Anbindung übers LAN[/li][/ul]

Test-Parameter siehe Bild 5.

[ul]
[li]Bis maximal 200 User werden über 1 Minuten pro User jede Sekunde Anfragen gestellt. Dies simuliert somit ein bereits offenes WebFront eines Users. (Oder für den zweiten Fall ein neues WebFront) Theoretisch simuliert es sogar eine steigende Belastung, da die Anzahl der empfangenen Meldungen steigt, je älter die LastMessageID im JSON-RPC Request ist. Ich vernachlässige diese Tatsache aber der Einfachheit halber.[/li][/ul]

Test-Ergebnisse für WFC_GetSnapshotChanges auf Windows mit i7-7700k siehe Bild 1.

[ul]
[li]Bis ca. 150 gleichzeitige User auf dem Rechner hat man keinerlei spürbare Verzögerung. Ab dann wird es etwas langsamer.[/li][/ul]

Test-Ergebnisse für WFC_GetSnapshot auf Windows mit i7-7700k siehe Bild 2.

[ul]
[li]Für das Laden vom Snapshot (=Neues WebFront) arbeitet der Rechner bis ca. 60 neuen Usern pro Sekunden schnell.[/li][/ul]

Test-Ergebnisse für WFC_GetSnapshotChanges auf SymBox siehe Bild 3.

[ul]
[li]Bis ca. 50 gleichzeitige User auf einer SymBox neo hat man keinerlei spürbare Verzögerung. Ab dann wird es langsamer.[/li][/ul]

Test-Ergebnisse für WFC_GetSnapshot auf SymBox siehe Bild 4.

[ul]
[li]Für das Laden vom Snapshot (=Neues WebFront) arbeitet die SymBox bis ca. 10 neuen Usern pro Sekunden schnell.[/li][/ul]

Weitere Hinweise

  • Mit schnellerer Hardware sind mehr User möglich. Insgesamt lastet IP-Symcon jedoch bei dem Windows System die CPU nicht vollständig aus - dort wäre rein software-technisch noch Potenzial vorhanden. Die SymBox wird hingegeben vollständig ausgelastet.
    Bei einem größeren IP-Symcon mit sehr vielen Nachrichten pro Sekunden kann die Anzahl der gleichzeitigen User geringer ausfallen, da mehr Daten verarbeitet werden müssen. Dort hilft dann aber wieder die CPU-Power :wink:
    Die Abfrage, die ich gestellt habe, bezieht sich auf die IPS_GetSnapshot*/WFC_GetSnapshot* Funktionen. Andere Funktionen können natürlich langsamer sein - sind aber für das WebFront nicht so relevant, da diese nicht so oft aufgerufen werden.
    Das Öffnen von WebFronts beinhaltet normalerweise ja noch einige statische Inhalte wie die index.html, CSS und ein paar Bilder. Das Laden dieser Dateien wurde hier nicht betrachtet.

paresy

Habe den Test noch etwas erweitert und verbessert. Die Ergebnisse von heute Morgen waren leider nicht ganz korrekt.

paresy

Dumme Frage: Was ist das bzw. was macht das?

Das ist die Funktion welche das WebFront im Hintergrund nutzt um die Daten vom Server zu bekommen (okay, die Console nutzen es auch, ebenso wie IPSView).
Michael

Im Prinzip geht es darum wie viele gleichzeitige Nutzer WebFront, Verwaltungskonsole oder IPSView nutzen können. (Diese nutzen fast die selben APIs)

paresy

Ich meinte die Frage so: hängt das nun noch von der Komplexität des Webfront ab (1 angezeigter Datenpunkt oder 100 Datenpunkte) oder ist das für diesen Test egal?

Für den „Öffne neues WebFront“ Fall ja. Für die aktiven User auf einem WebFront nein. Dort ist eher relevant wie viele Änderungen pro Sekunde es im System gibt. Der Test soll im ersten Moment nur einen groben Überblick geben, in welche Richtung es geht. Ich freue mich jedoch, dass überhaupt Interesse an dem Thema besteht. Das kann man bestimmt noch etwas „wissenschaftlicher“ angehen :slight_smile:

Wenn du z.B. nur 10 Variablen hast, welche sich jedoch alle 10 mal pro Sekunde ändern, so hast du wenig Variablen, aber sehr viel Last auf dem System. Das Öffnen vom WebFront wird also bestimmt viele neue Nutzer pro Sekunde können, bei den dauerhaft möglichen aktiven Nutzern, wirst du wahrscheinlich weniger bedienen können.

paresy

Hi Paresy,

Kannst du diesen Test bitte auch mit dem gleichen System aber über den Connect Dienst machen?
Danke!

Gruß, Lutz

Moin Paresy,

danke für den Test. Ich bin noch am überlegen, ob mir das so wirklich weiter hilft. Dafür müsste ich mal ein bisl genauer wissen, wie die besagten Funktionen

IPS_GetSnapshot / WFC_GetSnapshot

bzw. *Changes

genutzt werden sollen. Ich hatte zwar kurz mit nem WebInspektor rein geschaut, und versucht das nachzuvollziehen. Aber irgendwie kann ich mir gar nicht vorstellen, dass der Refresh aller Variablen schneller gehen soll als nur die, die auch gerade angezeigt werden. Aber genau das scheint ja mit diesen Funktionen nicht zu gehen?

Für meinen Einsatzzweck (wofür ich diese Anfrage gestellt hatte) wollte ich eigentlich ein PHP Skript triggern, und mit entsprechendem Parameter gewisse Variablen abfragen bzw. setzen.

Allerdings hängt die Geschwindigkeit dann wohl maßgeblich von der Abarbeitungsgeschwindigkeit des Skriptes und den parallel abzuarbeitenden PHP Skripten ab!? Und hier könnte ich dann sicherlich schnell gegen eine Grenze laufen.

Ist es besser die Daten auf Basis von GetSnapshot abzufragen anstatt per Skript?

Hängt wohl auch stark damit zusammen wie du die Anfragen stellst.
GetSnapshot ist mir auch zu aufwändig gewesen. Ich habe eine Anzeige im WF welche per JS jede Sekunde eine Variable aus IPS liest (per Webhook und somit auch ein PHP-Skript triggert).
Eventuell wäre die json-rpc da schneller, da es dann Serverseitig kein Script braucht.
Dafür könnte ein Webhook mehrere Werte auf einmal zurückgeben.
Michael

Vielleicht mal kurz zum Einsatzzweck. Geplant sind circa 50 Webfronts, die jeweils eine Teilmenge aus den angelegten Devices anzeigen sollen. Ich möchte eigentlich gar kein WebFront Konfigurator benutzen, sondern das soll alles aus dem Gerätebaum heraus gefischt werden. Der Aufbau ist ungefähr so…

Wohnung 1 (ID:12345)

  • Wohnzimmer
  • Schlafzimmer

  • Wohnung 2 (ID:23456)
  • Wohnzimmer
  • Schlafzimmer

  • Wohnung 3 (ID:34567)

usw usf.

Mein Plan ist, ein eigenes Webfront zu erstellen, dem man nur die root ID der Wohnung geben muss, und er baut den Rest selber auf. Bzw. der Aufbau ist fast überall gleich, und brauch so nur 1 mal definiert zu werden.

Nun ist es halt so, dass im ungünstigsten Fall alle 50 Devices ihre Daten abfordern werden. Und ich möcht ja ungern die Refreshrate auf >1s setzen wollen.

Der Plan sieht vor, ein Skript zu schreiben, welches dann alle Untergeräte aus der übergebenen Root ID raus sucht, und die entsprechenden Daten dazu.

Da ich jetzt gerade erst in der Planungsphase stecke würde ich ein späteres auftauchen von „geht leider nicht“ verhindern wollen. Was sagt denn Paresy dazu… wie wäre denn die sicherste Methode?

Wie sicherst du IPS ab gegen unbefugten Zugriff auf Daten anderer Wohnungen?

Die sicherste Methode ist ausprobieren. Wenn du die Daten z.B. alle auf einmal per WebHook zusammensammelst und lieferst, sollte es trotzdem weiterhin performant sein. Aber wie volkerm schon korrekt sagt musst du dich selber um die Authentifizierung kümmern. Bei den WFC_GetSnapshot* Funktion über das WebFront kümmern wir uns um die Sicherheit.

paresy

Nach dem Stresstest von Paresy würde ich sagen… Einfach das WebFront nutzen und Ende.
Ein Script mit allen WebFront-Konfigurator IDs und den RootIDs zum einmaligen / späteren einpflegen der Startkategorie in alle Konfiguratoren.
Eventuell ein ‚Master‘ WebFront aus dem du die Struktur kopierst (auch per Script).
Das muss dann nur bei Änderungen ausgeführt werden.
Wenn das Script dann am besten auch nur mit Links arbeitet (z.b. Link zum Wohnzimmer, Link zur Küche erzeugen usw) ist es ‚relativ‘ einfach zu pflegen.
Und wenn der WF Editor deaktiviert ist; sollte es auch relativ sicher sein und spart Ressourcen da nur die sichtbare Teilmenge im Snapshot übertragen wird. Also nicht alles an alle WebFronts.
Michael

Moin, ich habe jetzt mal angefangen das so wie Nall-Chan vorgeschlagen hat umzusetzen.

Allerdings sehe ich da jetzt mit der Nutzungsweise nicht so ganz das was ich mir vorgestellt habe.

Wenn ich jetzt per API z.B. mit

$result = $rpc->WFC_GetSnapshot(51879);

den Inhalt des einen Webfronts sehen will, schmeisst er mir den kompletten Baum als Array zurück.
Egal welche ID ich nehme. Ich kann mir schon vorstellen warum, aber kann ich das nicht irgendwie einschränken?

Das Datenvolumen bei einem fast leeren Baum liegt schon bei 100k. Ich glaube nicht, dass das so der beste Weg wäre.

Ich befürchte fast, dass ich das doch mit einem Script machen muss, damit die Datenmenge ein wenig eingestampft wird. Allerdings entsteht dann wieder Prozessorlast. :-/

Oder hab ich das jetzt völlig falsch verstanden?

Jup, hast du.
Ich hatte von der Verwendung der Funktion abgeraten.
Warum nicht einfach x WebFronts anlegen?
Michael
PS: Deaktivier den WebFront Editor und das Snapshot sollte kleiner werden.

Ich hatte das schon vorher mit extra WebFronts gemacht, aber der „Übeltäter“ war noch der aktivierte Editor. Sobald ich den deaktiviert hatte, wurde das ganze nur auf das reduziert, was ich auch wirklich benötige.

Wunderbare Sache das. Nun guck ich mal, wie ich das umsetze.

Jetzt ist nur die Frage, ob trotz „unlimited“ IPS mit den 50 WebFronts klar kommt. Hab ich bisher noch nirgends gesehen. Was macht denn da der Loginbereich des Webfronts? :smiley:

Vielen Dank für die Unterstützung.

Gruß
Kevin

Jetzt ist nur die Frage, ob trotz „unlimited“ IPS mit den 50 WebFronts klar kommt. Hab ich bisher noch nirgends gesehen. Was macht denn da der Loginbereich des Webfronts? :smiley:

Der sieht dann voll doof aus. Aber - Du kannst die WebFront Konfiguratoren ja auf „unsichtbar“ stellen und nur ein paar ausgewählte WebFronts in den Login Bereich sichtbar stellen :slight_smile:

Brauchst du eigentlich mehr als 50000 Objekte? :smiley:

paresy

Ich hoffe nicht! Aber bei der Menge an gleichartigen Konfigurationen usw. wünsche ich mir eine Console die schnell das tut, was ich möchte.
Auch wenn man für alles irgendwelche Skripte schreiben kann. Manchmal bin ich zu faul für solche Erleichterungen, und bin dann gleichzeitig genervt, wenn man in der Console nicht schnell arbeiten kann.

Ehrlich gesagt bin ich ganz froh, dass es die Legacy noch gibt. Aber die soll ja abgeschafft werden. :frowning:

Rekursives Copy+Paste von ganzen Abschnitten ist da ein Segen.

Das sollte aber auch in der webbasierten Konsole gut funktionieren. Dort habe ich auch schon mal 45000 Objekte drin gemacht :wink: Träger wird die webbasierte Konsole wenn sehr viel gleichzeitig offen ist. Wenn man die unbenutzen Teilbäume schließt, kann man da aber auch sehr leicht gegenwirken.

paresy