Nodejs Worker Threads Performance

BTCStorage

Ensign
Registriert
Mai 2020
Beiträge
175
Hallo,

ich wollte euch mal gerne fragen, wie sind eure Erfahrungen mit Nodejs Worker Threads, nachdem ich jetzt den Aufbau von prepared Responses in ein Worker Thread gebaut habe, kann ich nicht wirklich feststellen das es schneller laeuft, es ist im Prinzip gleich schnell kann man sagen, ich wollte mal testen ob das die Performance steigern wird, weil der Hauptserver etwas ausgelastet wird, aber alleine der Aufwand die ganzen Daten zwischen den Threads hin und her zu senden kostet ja auch etwas Performance.

Die prepared Responses werden im Prinzip jede Sekunde abgefragt, ein Router sendet die dann jeweils als Antwort und muss die nicht selber aufbauen, die machen daher auch Sinn, aber wegen der Auslagerung des Aufbaus der prepared Responses in ein Worker Threads weis ich nicht ob das wirklich so viel Nutzen hat wie hier und da erzaehlt wird, also ganz abgesehen davon was so Programme wie Chatgpt einen da erzaehlen wie sind den eure Erfahrungen mit Worker Threads?

Ich mein ich will die schon gerne nutzen wenn die die Performance steigern aber irgendwie kann ich das jetzt nicht erkennen das mein Programm deswegen doppelt so schnell arbeitet oder so, was sagt ihr zu Worker Threads oder was benutzt ihr am liebsten fuer solche Aufgaben?
 
Es kommt hier, wie so oft, auf den Kontext an.

Was für ein Problem versuchst du denn zu lösen? Hast du performance Probleme? Wie viele tausenden anfragen pro Sekunden muessen bearbeitet werden?
Subprozesse können sinnvoll sein, wenn du Anfragen oder Aufgaben hast, die aufwändig sind und blockieren würden.
Eine API, die „simple“ Anfragen beantwortet, wird so etwas nicht notwendig haben.
 
@mschuebel wie wuerdest du den zb folgende Aufgabe lieber loesen:

Aufgabe: Jede Sekunde Accountdaten abfragen von Cryptoplatform, Offene und Geschlossene Trades lesen in Datenbanken speichern

Wenn man logisch denkt will man das nicht unbedingt im Server ablaufen lassen perIntervalfunktion, wo alle Router stehen und Anfragen beantworten werden sollen, also waere fuer sowas quasi ein Worker Thread gut, aber die Daten die im Worker Thread gesammelt werden brauch man dann auch jederzeit im Serverthread, also fraegt man sich wofuer ein Worker Thread, ob man das nicht irgendwie im Serverbereich optimiert, laeuft ja sowieso alles asynchron nicht blockierend sagt man sich, aber das Auslagern in Worker Threads hoert sich auch logisch an
 
Eine Abfrage pro Sekunde ist nichts. Alles was I/O betrifft wird von Node intern sowieso schon in anderen Threads ausgeführt. Mehrere Worker wären in diesem Falle dann sinnvoll, wenn du 1000te requests pro Sekunde machen würdest. Ein Worker bekommt dann aber nicht nur eine Aufgabe, sondern macht alles von Anfang bis Ende. So spart man sich den IPC overhead.
 
  • Gefällt mir
Reaktionen: floq0r
@Bagbag wie findest du die Idee anstatt Worker Threads einfach ein zweiten Server starten, auf anderen Port laufen lassen, beide laufen auf den gleichen PC und mit Websocket die Daten austauschen? Irgendwie scheint das vom Aufbau her weniger kompliziert aus zu sehen, weil ein Worker arbeitet ja im Prinzip auch mit aehnlichen Funktionen fuer Datenaustausch wie Websocket, aber da muss man glaube weniger einstellen.

1000te request pro Sekunde muss schon echt viel Arbeitet sein, das mueste schon Sekunden an Zeit kosten, ich habe beispielweise vielleicht pro Account eine Funktion die vielleicht 10 API Abfragen macht, sagen wir wenn du 10 Accounts gleichzeittig laufen hast, koennte man schon vielleicht an sowas wie 100 request pro Sekunde dran kommen und man denkt sich schon warum nicht einfach diese ganze Arbeit auf ein anderen Platz verteilen, aber ich muss sagen ich habe jetzt auch nicht wirklich so ein grosen Unterschied gemerkt nachdem ich so einige Funktionen ueber ein Worker Thread laufen lasse, man weis zwar der Server muss nicht die ganze Arbeit alleine machen und kann besser auf Request reagieren, aber naja das staendige hin und her senden der Daten ist ja auch Arbeit, irgendwie bin ich mehr ein Fan von weiteren Server starten als sowas wie Worker Threads, weil die weiteren Server kann man im Prinzip mit Websocket oder auch Http abfragen und hat irgendwie weniger Einstellungen.

Ich glaube hier im Forum habe ich auch schon von Leuten gehoert das man im Prinzip alles nur mit ein Server gut aufbauen kann und das vielleicht sogar so besser laeuft, wenn man gut genug optimiert, naja da muss man sich wohl langsam rantasten und den Aufbau seiner Funktionen gut verstehen
 
Mehrere Instanzen die mit Websockets o.Ä. arbeiten ist mehr Overhead als simples IPC über Memory. Meines Erachtens macht es das auch komplexer statt einfacher. Sehe da null Vorteile.
 
ja hast Recht, habe das jetzt auch nochmal nachgelesen, im Prinzip arbeiten die Worker Threads etwas schneller im Datenaustausch weil im gleichen Arbeitsspeicherbereich oder so Daten ausgetauscht werden. Naja im Prinzip brauch meine Anwendung vielleicht gar nicht Worker Threads, ein wenig optimiertes Cacheing und komprimierte Ausgaben schaffen auch schon etwas Performancegewinn, da muss jeder irgendwie ein wenig austesten ab wann man die Last auf Worker verteilt oder sonstige Techniken, wahrscheinlich sind solche Sachen wirklich erst dann spuerbar zu erkennen wenn man wirklich tausende Accounts hat und da wird man dann auch nicht nur Worker einsetzen sondern komplett der ganze Aufbau auf genauste optimiert sein.

Irgendwie macht Optimierung auch Spass aber da brauch man auch etwas Erfahrung, wenn man nur drauf hoert was Chatgpt sagt dann wuerde man auch zu sehr ueberoptimieren und alles nur unnoetig kompliziert aufbauen, ein paar Flags hier und da damit Funktionen nicht doppelt aufgerufen werden, ein bischen Caeching und parallele Abfragen, so Kleinigkeiten reichen oft schon aus, damit die Performance gut funktioniert und wenn man dann wirklich immer mehr Accounts hat wird man wohl am besten einfach die Last auf mehrere Server verteilen mit Load Balancer und aehnliches, wo dann die Anfragen an die weniger belasteten Server gehen, so kann mann schon einfach immer mehr Accounts bearbeiten, da muss man wohl auch ein wenig Erfahrung haben was ein Nutzen hat.
 
Zurück
Oben