Mit Node.js-Servern, frage ich mich, ob es möglich und empfohlen ist, eine HTTP-Antwort von a delegierter Arbeitsprozess statt des Hauptprozesses. Diese Arbeitsprozesse können Node.js-Server selbst oder einfach Node.js-Kindprozesse sein, die über IPC kommunizieren."Direkte Antwort mit Node.js" - Senden von HTTP-Antwort mit verschiedenen Node.js-Prozess (anders als Hauptprozess)
Ich glaube nicht, das Cluster-Kernmodul https://nodejs.org/api/cluster.html kann tun, was ich tun möchte, weil in diesem Modell alle Arbeiter auf dem gleichen Port zuhören, und sie alle Anfragen im Auftrag des Master-Prozesses verarbeiten. Was ich suche, ist ein Haupt-Node.js-Prozess, der auf alle HTTP-Anfragen antwortet, vielleicht die Authentifizierung durchführt und einige Anfragen verarbeitet, aber auch in der Lage ist, datenintensive oder CPU-intensive Anfragen an einen Worker-Pool zu delegieren.
Stellen Sie sich vor, wir haben eine GET-Anfrage für eine große Datenmenge, sagen wir 2-3MBs.
Wir haben mindestens 3 mögliche Szenarien:
- der Hauptprozess empfängt die Anforderung, fragt die Datenbank für die große Menge an Daten und sendet dann die Daten an den Anforderer zurück.
- Hauptprozess empfängt die Anforderung, sendet einige Daten an einen Worker-Prozess mithilfe von IPC, der Worker ruft die Daten aus der DB ab, führt einige schwere Operationen aus, und dann sendet der Worker IPC, um alle 3MBs Daten an die Hauptkomponente zu senden Prozess, der dann die Antwort zurücksendet.
- Der Hauptprozess empfängt die Anforderung, sendet eine kleine Menge an Informationen über den Anforderungsstream an den Worker, der Worker erledigt die gesamte Arbeit und der Worker sendet die HTTP-Antwort zurück.
Ich bin besonders neugierig auf # 3 möglich machen. 3
Eine einfache Darstellung von Szenario ist unter:
(Nur um klar zu sein, ich will nicht mehr als 3 Antworten für eine Bitte, ich bin nur versuchen zu zeigen, dass ein Arbeitnehmer könnte möglicherweise senden Sie die Antwort im Namen des Hauptprozesses).
Wer weiß, wie dies mit Node.js funktionieren könnte? Wie könnte es in anderen Sprachen funktionieren? Normalerweise habe ich keine Probleme mit dem Node.js-Gleichzeitigkeitsmodell, aber mit einigen Arten von Daten ist die Verwendung des Cluster-Moduls wahrscheinlich nicht der beste Weg, die höchsten Nebenläufigkeitsgrade zu erreichen.
Ich glaube, ein Begriff für dieses Modell ist "direkte Antwort", was bedeutet, dass der Arbeiter direkt auf die Anfrage reagiert. Und vielleicht ist es möglich, hierfür einfach das Cluster-Core-Modul https://nodejs.org/api/cluster.html zu verwenden.
Ich hatte eine ähnliche Idee vor nicht allzu langer Zeit, aber nach umfangreicher Suche endete ich mit Nginx als Load Balancer, die aussieht wie das, was Sie damit erreichen wollen, aber ohne die ganze App zu drehen. Ich würde mich auch für die Lösung interessieren, wenn jemand welche hat. – shriek
sicher, danke, ich denke cluster.setupMaster könnte tun können, was ich will, aber ich bin mir noch nicht sicher, siehe: https://nodejs.org/api/cluster.html#cluster_cluster_setupmaster_settings –
zum Beispiel, siehe die akzeptierte Antwort hier: http://stackoverflow.com/questions/23771516/using-cluster-in-a-node-module/24463511#comment59142347_24463511 –