2017-08-17 3 views
3

Ich habe einen Server, den ich erschaffe (ein Messaging-Dienst), und ich mache ein paar vorläufige Tests, um es zu benchmarken. Bisher ist es am schnellsten möglich, die Daten direkt auf dem Prozess des Benutzers zu verarbeiten und Worker-Pools zu verwenden. Ich habe das Laichen getestet und das ist unglaublich langsam.Müssen Sie Arbeiterpools in Erlang benutzen?

Der Test verbindet nur 10k Benutzer und jeder sendet 15kb Daten ein paar Mal zur gleichen Zeit (oder versucht auch atleast) und der Server verarbeitet die Daten (Gesamtlänge, Header und Payload) .

Das Problem, das ich mit Worker-Pools habe, ist nur dann schnell, wenn genügend Mitarbeiter vorhanden sind, um die Anzahl der Verbindungen auszugleichen. Wenn Sie zum Beispiel 500.000 oder 1 Million Benutzer haben, benötigen Sie mehr Mitarbeiter, um alle gleichzeitig eingehenden Daten zu verarbeiten. Und wenn ich 1.000 Tester habe, wäre das für meine Tests unbrauchbar.

Also meine Frage ist die folgende: Wann macht es Sinn, Pools von Arbeitern zu verwenden? Wird es einen Wendepunkt geben, an dem ich Arbeiter verwenden muss, um die Daten zu verarbeiten, um den Benutzerprozess freizugeben? Wie viele Arbeiter sind zu viel, ist 500.000 zu viel?

Und, wenn Arbeiter sind der Weg zu gehen (für diese massiven gleichzeitig verteilten Server), ich schätze, Sie können dynamisch erstellen/löschen, wie Sie brauchen?

Jede Literatur wird auch geschätzt!

Danke für Ihre Antwort!

Antwort

2

Vielleicht sind Worker Pools nicht das beste Werkzeug für Ihr Problem. Wenn ich Sie wäre, würde ich versuchen, Jay Nelsons epocxy zu verwenden, der Ihnen einen sehr grundlegenden Gegendruckmechanismus gibt, während Sie immer noch Ihre Aufgaben parallelisieren können. Von dieser Bibliothek aus würde ich entweder Concurrency-Fount- oder Concurrency-Control-Tools prüfen.

+0

Ich habe noch nicht auf diese umgestellt, aber ich bekomme Probleme, wenn ich 15-30k + Benutzer gleichzeitig auf dem Server erlang. Ich bekomme einen {Fehler, geschlossen} (wahrscheinlich wegen des langsamen Handshakes) auf dem Client, der das Sprengen durchführt. Sollte ich mich vor ssl_accept zurückziehen und mein eigenes rollen? – Mike5050