Ergebnis 1 bis 3 von 3

Thema: (node.js) Cluster

  1. #1
    Quantenmechaniker
    Registriert seit
    Aug 2002
    Beiträge
    1.868
    Renommee
    250

    (node.js) Cluster

    Hallo,

    ich bin eben dazu gekommen, die "Cluster"-Klasse von "node.js" einsetzen zu wollen.
    Hier ergeben sich für mich aber zwei Fragen.

    Erstes Problem

    Code:
    var cluster = require("cluster");
    var coreCount = require("os").cpus().length;
    var coreMultiplicator = 2;
    var cores = coreCount * coreMultiplicator;
    var online = 0;
    
    function init(pid)
    {
    }
    
    if(cluster.isMaster)
    {
            for(var i = 0; i < cores; i++)
            {
                    cluster.fork()
                            .on("disconnect", (worker) =>
                            {
                                    console.log("PID(" + worker.process.pid + ") DISCONNECT"
                                            + " [ " + (--online) + " / " + cores + " ]");
                            });
            }
            cluster.on("exit", (worker, code, signal) =>
            {
                    console.log("PID(" + worker.process.pid + ") EXIT"
                            + " [ " + (--online) + " / " + cores + " ]");
            })
            .on("online", (worker) =>
            {
                    console.log("PID(" + worker.process.pid + ") ONLINE"
                            + " [ " + (++online) + " / " + cores + " ]");
            });
    }
    else if(cluster.isWorker)
    {
            console.log("\t(START)\t'init(" + process.pid + ")'");
            init(process.pid);
            console.log("\t(STOP)\t'init(" + process.pid + ")'");
    }
    else
    {
            console.log("FAILURE");
    }
    Ich frage mich, warum die fork()-Prozesse nicht wieder von allein zurück geben bzw. geschlossen werden!?

    Bei "createServer()" o.ä. ist das ja noch klar - aber meine "init()"-Funktion gibt doch sofort wieder zurück
    (wie wenn eine (node).js-Datei mit solcher init()-Funktion startet, so beendet sich doch das gesamte Script
    unmittelbar); warum bleiben hier die Sub-Prozesse also erhalten bzw. "running"?

    Zweites Problem (betrifft auch wieder "cluster")

    Code:
    function init(pid)
    {
            var port = 8080;
    
            var http = require("http").createServer((req, res) =>
            {
                    res.end("Hello World!");
            })
            .listen(port);
    }
    Einfache Frage ... wenn eine Anzahl von "fork()" statt findet, wo jeder Sub-Prozess einen (http)createServer() startet,
    so beendet das Script diesmal klarerweise nicht - aber sollten sich die mehreren Sub-Prozesse hier nicht gegenseitig
    im Weg stehen, als dass ja versucht wird, *parallel/mehrfach* durch "listen(port)" auf den gleichen Port zuzugreifen!??

    Sprich, wenn der erste Sub-Prozess einmal "listen()" ausgeführt hat, dann sollten die weiteren Sub-Prozesse eigentlich
    eine(n) Konflikt/Kollision dabei auslösen (da ich nicht wirklich glaube, mehrfache Nutzung des gleichen Ports sei zulässig)?

    Error: listen EADDRINUSE :::8080
    THX; der Kuchen.

    1 2 3 4 5 6 7 8
    2 1 4 3 6 5 8 7
    3 4 1 2 7 8 5 6
    4 3 2 1 8 7 6 5
    5 6 7 8 1 2 3 4
    6 5 8 7 2 1 4 3
    7 8 5 6 3 4 1 2
    8 7 6 5 4 3 2 1

  2. #2
    Quantenmechaniker
    Registriert seit
    Aug 2002
    Beiträge
    1.868
    Renommee
    250

    AW: (node.js) Cluster

    Davon ab, dass ich sowieso *später* meine eigenen Call-Stacks u.a. aufbauen werde, würde ich momentan
    ganz einfach dazu tendieren (weil ich besagte Problematik atm nicht verstehe), selbst eine Anzahl von Pro-
    zessen auszuführen, deren Sockets auf "127.0.0.$n" horchen, damit im "MASTER"-Prozess "Round Robin"
    o.ä. eingesetzt werden kann (wobei ich zu einem extra Zell-Automaten für dieses Lasten-Umverteilungs-Pro-
    blem tendiere *g* ... solche würde ich sowieso gerne als universelle Software-Simulatoren einsetzen *gg* ..).

    Das hat den Vorteil, dass ich auch ganz einfach statt "127.0.0.$n" in der Port-Auswahl variieren kann, dass
    nur der MASTER-Prozess in einer "abgesicherten" Umgebung (wie `xinetd`) agieren kann, während eigentlich
    alle "echten" (d.h. alles konkrete implementierende) Prozesse alle "non-root"-Ports (>1024) belauschen. ^_^

    Bis ich node.js' "cluster" nicht verstanden habe, möchte ich das nämlich auch nicht einsetzen. Ganz davon
    ab ist das ein guter Einstiegspunkt, evtl. sogar eine Lasten-Umverteilung im Netzwerk durchführen zu können,
    auch wenn es schon etwas Aufwand wird, dies *dezentral* zu organisieren (im besten Falle nämlich setze ich
    meine Clients selbst ein - so wie ich im von mir s.g. "localhost CMS" in aller WebSocket-Echtzeit pure DB-
    Queries und deren Result-VIEWs übertrage, damit alle CMS-"Einsetzung" etc. beim Client geschehen kann;
    so liegen die mehr/minder aufwendigen (String-Verarbeitungs- oder DOM-)Prozesse beim Client und jedwede
    Security-Problematik direkt darin aufgelöst, dass die Clients nur erlaubte DB-Information erhalten - alles, was
    ihnen nicht gehört oder sie nicht sehen sollen, braucht ein Client sowieso niemals zu sehen. ;-)

    EGAL; ich schweife mal wieder aus ... so long ... der Kuchen.

    1 2 3 4 5 6 7 8
    2 1 4 3 6 5 8 7
    3 4 1 2 7 8 5 6
    4 3 2 1 8 7 6 5
    5 6 7 8 1 2 3 4
    6 5 8 7 2 1 4 3
    7 8 5 6 3 4 1 2
    8 7 6 5 4 3 2 1

  3. #3
    Quantenmechaniker
    Registriert seit
    Aug 2002
    Beiträge
    1.868
    Renommee
    250

    AW: (node.js) Cluster

    Meine Lösung ist momentan, dass ich einfach eine Anzahl von Prozessen starte, die alle auf unterschiedliche Netzwerk-Ports hören,
    während jeder initiale Netzwerk-Request - vornehmlich im "WebSocket" - ebenso eine initiale Nachricht mit einem der Port-Adressen
    erhält, um dann einfach umschalten zu können (also selbst eine Verbindung zum alternativen Port herstellt und die initiale Verbindung
    wieder "vergisst").

    Schön und gut, beim "WebSocket" ist es 'ne einfache ("Kontroll"-)Nachricht. Fraglich ist jetzt nur, wie ich das z.B. beim SMTP-Proto-
    koll erreichen kann - eine "BODY"-Codierung ist (hier jedenfalls) nicht sehr schön und spezielle SMTP-Befehle gibt's auch nicht. Eine
    Notlösung wäre natürlich noch der vollständige Traffic-Relay vom eigentlichen Master-Prozess zu jeweils einem aller vielen Slave-Pro-
    zesse, aber "schön" ist das nicht (evtl. aber nötig? Genauso, wie VPN-Tunnel arbeiten scheinen zu *müssen* - schließlich wäre hier
    ein IP-"Relay" statt Traffic-Relay (also bloße Adressierungs-Adaption) so nicht denkbar, sonst würde das ja wieder die IP verraten). ...

    1 2 3 4 5 6 7 8
    2 1 4 3 6 5 8 7
    3 4 1 2 7 8 5 6
    4 3 2 1 8 7 6 5
    5 6 7 8 1 2 3 4
    6 5 8 7 2 1 4 3
    7 8 5 6 3 4 1 2
    8 7 6 5 4 3 2 1

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. Unsupported node
    Von backtrack im Forum Technisches Off-Topic
    Antworten: 2
    Letzter Beitrag: 02.04.2011, 00:51
  2. Tor: wieso nutzt meinen Exit-node niemand?
    Von backbone im Forum Netzwerktopologie & Technik
    Antworten: 1
    Letzter Beitrag: 10.04.2008, 12:42
  3. JohnNet (jtr cluster)
    Von kraeh im Forum Kryptologie
    Antworten: 0
    Letzter Beitrag: 24.09.2005, 17:38
  4. Network Node Manager
    Von Addie Asbach im Forum Netzwerktopologie & Technik
    Antworten: 1
    Letzter Beitrag: 15.11.2003, 17:57
  5. Node eines TreeViews ermitteln
    Von WEBSTER im Forum Pascal / Delphi
    Antworten: 2
    Letzter Beitrag: 11.12.2001, 02:45

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •